Daeseon Yoo
Back to project
·Update·4 min·Review needed

버팀목: 하룻밤 자율 MVP 빌드 — 사양서 한 장에서 동작하는 앱까지

work.md 사양서 하나를 받아 하룻밤에 '버팀목'(무너질 때 꺼내보는 비공개 보관함) PWA MVP를 끝까지 빌드한 기록. 외부 계정 0개로 즉시 실행되도록 설계.

AI version

무엇

버팀목 — 무너지는 순간 나를 붙드는 것들(사랑하는 사람의 목소리·사진·말, 아끼는 글)을 펜던트처럼 비공개로 품는 보관함. 직접 담거나, 사랑하는 사람이 가입 없이 링크로 한마디를 보탤 수 있다. (제품명은 작업 제목, 미정.)

입력은 work.md 한 장(사양서). 출력은 로컬에서 npm run dev로 바로 도는 풀스택 PWA.

빌드 순서 (work.md §22)

  1. 데이터모델 + 백엔드 골격 (인증/기여 수신/스토리지)
  2. 기여 링크 화면(심장) + 주인 직접 추가
  3. 보관함 보기 + 꺼내는 모먼트(펜던트 여는 정서적 경험)
  4. PWA 설치화 (Manifest + 직접 작성한 Service Worker) + iOS 안내
  5. Web Push(VAPID) + node-cron 스케줄러
  6. 숨기기/삭제·알림설정·안전(전문도움) 링크
  7. 검증 지표

핵심 원칙: 외부 계정 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 정상 생성 확인

결과 (첫 커밋들)

  • 7b19c3d Initial commit (사양서만)
  • e050e41 foundation + backend skeleton (PGlite, auth, storage, APIs)
  • e1a924e full UI — owner/contribution flow, surfacing moment, PWA
  • f2c40f2 docs — PROGRESS.md(아침 인수인계) + README

사람 vs AI

방향·사양(work.md 전체)·제품 판단(영상 추가, 카카오 연동, 신뢰 설계 방향)·실기기 테스트·키 발급은 사람이. 구현·아키텍처 결정·디버깅·검증은 이 세션이. 이 로그들은 그 구현을 사람이 이해하고 소유하기 위한 기록이다 — 관련 결정의 상세는 stack-decisions, pglite-embedded-db, adversarial-security-review, trust-by-feeling, kakao-oauth-debug, video-fourth-type 항목 참고.

Review needed

No human review on this entry yet.