·업데이트·4 분·리뷰 필요
버팀목: 하룻밤 자율 MVP 빌드 — 사양서 한 장에서 동작하는 앱까지
work.md 사양서 하나를 받아 하룻밤에 '버팀목'(무너질 때 꺼내보는 비공개 보관함) PWA MVP를 끝까지 빌드한 기록. 외부 계정 0개로 즉시 실행되도록 설계.
AI 버전
무엇
버팀목 — 무너지는 순간 나를 붙드는 것들(사랑하는 사람의 목소리·사진·말, 아끼는 글)을 펜던트처럼 비공개로 품는 보관함. 직접 담거나, 사랑하는 사람이 가입 없이 링크로 한마디를 보탤 수 있다. (제품명은 작업 제목, 미정.)
입력은 work.md 한 장(사양서). 출력은 로컬에서 npm run dev로 바로 도는 풀스택 PWA.
빌드 순서 (work.md §22)
- 데이터모델 + 백엔드 골격 (인증/기여 수신/스토리지)
- 기여 링크 화면(심장) + 주인 직접 추가
- 보관함 보기 + 꺼내는 모먼트(펜던트 여는 정서적 경험)
- PWA 설치화 (Manifest + 직접 작성한 Service Worker) + iOS 안내
- Web Push(VAPID) + node-cron 스케줄러
- 숨기기/삭제·알림설정·안전(전문도움) 링크
- 검증 지표
핵심 원칙: 외부 계정 0개로 즉시 실행
work.md §22의 "외부 키에서 멈추지 말 것" 지침에 따라, 키가 필요한 모든 것(소셜 로그인·DB·스토리지·VAPID)을 인터페이스 뒤의 로컬 기본값/목으로 두고 "나중에 실제 설정 필요" 목록(PROGRESS.md)에 기록.
- DB → 임베디드 PostgreSQL(PGlite),
.data/pglite - 인증 → 세션 쿠키 dev 로그인 (프로덕션: Better Auth + 카카오/애플)
- 스토리지 → 로컬 파일 + 인증 게이트 라우트 (프로덕션: R2/S3 + 서명 URL)
- 푸시 → VAPID 키 자동 생성(
web-push.generateVAPIDKeys()),.data/secrets.json - 아이콘 → 외부 툴 없이 순수 Node PNG 인코더로 생성(
scripts/gen-icons.mjs)
검증 (실행 없이 '완료' 금지, §22)
실제 dev 서버를 띄워 end-to-end로 확인:
- 주인 직접 추가(글/사진) + 공개 기여(글) → 보관함에 origin 라벨로 혼합 표시
- 미디어 접근통제: 쿠키 있으면
200, 없으면401 - 멱등 재제출 →
duplicate - 동시 30건 쓰기 정상, DB 충돌 0
- 프로덕션 빌드
21/21라우트 클린 컴파일 - Tailwind v4 커스텀 토큰(따뜻한 펜던트 팔레트) CSS 정상 생성 확인
결과 (첫 커밋들)
7b19c3dInitial commit (사양서만)e050e41foundation + backend skeleton (PGlite, auth, storage, APIs)e1a924efull UI — owner/contribution flow, surfacing moment, PWAf2c40f2docs — PROGRESS.md(아침 인수인계) + README
사람 vs AI
방향·사양(work.md 전체)·제품 판단(영상 추가, 카카오 연동, 신뢰 설계 방향)·실기기 테스트·키 발급은 사람이. 구현·아키텍처 결정·디버깅·검증은 이 세션이. 이 로그들은 그 구현을 사람이 이해하고 소유하기 위한 기록이다 — 관련 결정의 상세는 stack-decisions, pglite-embedded-db, adversarial-security-review, trust-by-feeling, kakao-oauth-debug, video-fourth-type 항목 참고.
리뷰 필요
내 시각이 아직 안 들어간 entry.