์‹คํƒ€๋ž˜ ๊ฐœ๋ฐœ ๋กœ๊ทธ

์ด 58๊ฐœ ํ•ญ๋ชฉ ยท 19๊ฐœ ์™„๋ฃŒ ยท 4๊ฐœ ์ง„ํ–‰์ค‘ ยท 34๊ฐœ ์˜ˆ์ •

์ „์ฒด ์ง„ํ–‰๋ฅ 33%
โœ“ ์™„๋ฃŒ 19โš™ ์ง„ํ–‰์ค‘ 4โ—‹ ์˜ˆ์ • 34
58๊ฐœ ํ‘œ์‹œ

P0 โ€” ์ด๋ฒˆ ์ฃผ (์‹œ์—ฐ)

โœ“
F-001URL ์Šฌ๋ž˜์‹œ ์ค‘๋ณตP0

์ƒ์„ฑ ๋งํฌ ์ด์ค‘ ์Šฌ๋ž˜์‹œ ์ˆ˜์ •

/request2/18
โœ“
F-002๋ฏธ๋ฆฌ๋ณด๊ธฐ ์นด๋“œ ๋ฌธ๊ตฌP0

์ธํ„ฐ๋ทฐ์ด ์ด๋ฆ„ ํฌํ•จํ•˜๋„๋ก ๋ณ€๊ฒฝ

/request2/18
โœ“
F-002b์ธํ„ฐ๋ทฐ์ด ๋žœ๋”ฉ ์•ˆ๋‚ด๋ฌธP0

6๊ฐœ ์•ˆ๋‚ด ๋ฌธ๊ตฌ๋กœ ์ „๋ฉด ๊ฐœํŽธ

/i/{id}2/18
โœ“
F-00330๋ถ„ ๋ฌธ๊ตฌ ์ œ๊ฑฐP0

ํŽธํ•˜์‹ค ๋•Œ ์‹œ์ž‘ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค๋กœ ๊ต์ฒด

/request, /i/{id}2/18
โœ“
F-004์ฒ˜์Œ์œผ๋กœ ๋ฒ„ํŠผ ๋ณ€๊ฒฝP0

๋…น์ทจ ํ˜„ํ™ฉ ํ™•์ธํ•˜๊ธฐ๋กœ ๋ณ€๊ฒฝ

/request2/18
โœ“
F-011ํƒ€์ด๋จธ ๋…น์Œ ์ „ ์นด์šดํŠธP0

์ฒซ ๋ฉ”์‹œ์ง€ ์ „์†ก ์‹œ์ ๋ถ€ํ„ฐ ์‹œ์ž‘

/interview/{id}2/18
โœ“
F-012์—ฌ๊ธฐ๊นŒ์ง€ ๋ฒ„ํŠผ ์œ„์น˜P0

์šฐ์ƒ๋‹จ์—์„œ ํ•˜๋‹จ์œผ๋กœ ์ด๋™

/interview/{id}2/18
โœ“
F-013AI ์ฒซ ๋ฉ”์‹œ์ง€ ์—๋ŸฌP0

chat API ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์ˆ˜์ •

/interview/{id}2/18
โœ“
F-015๋งํ’์„  ํƒ€์ž„์Šคํƒฌํ”„P0

๊ฐ ๋ฉ”์‹œ์ง€์— ์‹œ๊ฐ ํ‘œ์‹œ (์˜คํ›„ 3:24)

/interview/{id}2/19
โœ“
F-018์™„๋ฃŒ ํ™”๋ฉด ๋ฒ„ํŠผP0

์ด์•ผ๊ธฐ ๊ธฐ๋ก ๋ณด๊ธฐ โ†’ /archive ์—ฐ๊ฒฐ

/interview/{id}2/18
โœ“
F-016ํ…”๋ ˆ๊ทธ๋žจ ์Šคํƒ€์ผ ์Œ์„ฑ UXP0

๋…น์Œ โ†’ ์˜ค๋””์˜ค ๋ฒ„๋ธ”(์žฌ์ƒ/๋ณ€ํ™˜/์‚ญ์ œ) โ†’ ์ „์†ก

/interview/{id}2/25
โœ“
F-017AI ์‘๋‹ต ํƒ€์ด๋ฐP0

๋‹ค์ค‘ ์กฐ๊ฐ(์˜ค๋””์˜ค+ํ…์ŠคํŠธ) ๋ˆ„์  ํ›„ ์ „์†ก ๋ฒ„ํŠผ์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐ

/interview/{id}2/25
โš™
F-014๋…น์Œ ํƒ€์ด๋จธ ํฌ๊ธฐP0

๋…น์Œ ์ค‘ ํƒ€์ด๋จธ text-2xl๋กœ ํ™•๋Œ€

/interview/{id}
โœ“
F-026์Œ์„ฑ ์›๋ณธ ์ €์žฅP0

Supabase Storage ์—…๋กœ๋“œ + audio_chunks ํ…Œ์ด๋ธ” + Whisper segments ๋งคํ•‘

/interview/{id}2/25

P1 โ€” Phase 1 ์–ด๋ฒ„์ด๋‚  MVP (5์›” 8์ผ)

โœ“
F-007์•„์นด์ด๋ธŒ ๋ฐ์ดํ„ฐ ์—ฐ๋™P1

ํ•˜๋“œ์ฝ”๋”ฉ โ†’ ์‹ค์ œ ์ธํ„ฐ๋ทฐ ๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง

/archive/{id}2/19
โœ“
F-009DB ์ „ํ™˜ (Supabase)P1

JSON ํŒŒ์ผ โ†’ Supabase PostgreSQL

์ „์ฒด2/19
โœ“
F-019๋Œ€์‹œ๋ณด๋“œ ์ธ์ฆP1

ID/PW ๋กœ๊ทธ์ธ ๋ณดํ˜ธ

/dashboard2/19
โœ“
F-022๊ฐœ๋ฐœ ๋กœ๊ทธ ํŽ˜์ด์ง€P1

ํ”ผ๋“œ๋ฐฑ ํ•ญ๋ชฉ ์›น ์‹ค์‹œ๊ฐ„ ํ‘œ์‹œ

/dashboard/log2/19
โš™
F-005์นด์นด์˜คํ†ก ๊ณต์œ P1

์นด์นด์˜ค SDK ์—ฐ๋™ ์™„๋ฃŒ, ํ…Œ์ŠคํŠธ ํ•„์š”

/request, /archive/{id}
โ—‹
F-010์†Œ์…œ ๋กœ๊ทธ์ธP1

์นด์นด์˜ค (๊ตญ๋‚ด) + Google/Apple (ํ•ด์™ธ). NextAuth. F-027 ํ†ตํ•ฉ.

์ „์ฒด
โ—‹
F-027์นด์นด์˜ค ์•Œ๋ฆผํ†กP1

๋น„์ฆˆ๋‹ˆ์Šค ์ฑ„๋„ + ์•Œ๋ฆผ ํ…œํ”Œ๋ฆฟ. ์ง„์ฒ™ ์•Œ๋ฆผ, ๋ฆฌ๋งˆ์ธ๋”, ๊ฒฐ๊ณผ ๋„์ฐฉ ์•Œ๋ฆผ.

์ „์ฒด
โœ“
F-028๋Œ€ํ™” ์ด์–ดํ•˜๊ธฐP1

์žฌ์ง„์ž… ์‹œ ์ด์ „ ๋Œ€ํ™” ๋กœ๋“œ + ๋‚ ์งœ ๊ตฌ๋ถ„์„  + AI ๋งฅ๋ฝ ์ด์–ด๋ฐ›๊ธฐ. session_end ์ƒํƒœ. Archive ์ด์–ดํ•˜๊ธฐ ๋ฐฐ๋„ˆ. handleResume + PATCH /api/create-interview.

/i/{id}, /interview/{id}2/26
โ—‹
F-029/request ์Œ์„ฑ ์ž…๋ ฅP1

4๋‹จ๊ณ„ ํผ ๋Œ€์‹  ์Œ์„ฑ ํ•œ๋งˆ๋””๋กœ ํŒŒ์‹ฑ. GPT-4o๊ฐ€ ๊ด€๊ณ„/์ด๋ฆ„/์—ฐ๋ น/์งˆ๋ฌธ/์—ฐ๋ฝ์ฒ˜ ์ถ”์ถœ. ๊ธฐ์กด ํผ์€ ํด๋ฐฑ.

/request
โ—‹
F-030์ธ์‚ฌ ๋…น์ŒP1

๋งํฌ ์ƒ์„ฑ ์‹œ ์•„๋“ค์ด ์•„๋ฒ„์ง€์—๊ฒŒ ์Œ์„ฑ ์ธ์‚ฌ. ์•„๋ฒ„์ง€ ์ฒซ ์ง„์ž… ์‹œ AI ์ฒซ ๋ฉ”์‹œ์ง€ ์ „์— ์žฌ์ƒ. greetingAudioUrl.

/request, /interview/{id}
โ—‹
F-031๊ฐ€์ž… ์œ ๋„ (์ธํ„ฐ๋ทฐ์ด)P1

๋Œ€ํ™” ์™„๋ฃŒ ํ›„ ์นด์นด์˜ค ์—ฐ๊ฒฐ ๊ฐ•ํ•˜๊ฒŒ ์œ ๋„. ์ด์–ดํ•˜๊ธฐ/์•Œ๋ฆผ์— ํ•„์š”. ๊ฑด๋„ˆ๋›ฐ๊ธฐ๋Š” ์ž‘๊ณ  ์—ฐํ•˜๊ฒŒ.

/interview/{id}
โ—‹
F-032๊ฐ€์ž… ์œ ๋„ (์š”์ฒญ์ž)P1

๋งํฌ ์ƒ์„ฑ ํ›„ ์นด์นด์˜ค ์—ฐ๊ฒฐ ์œ ๋„. ๊ฒฐ๊ณผ ๋„์ฐฉ ์นดํ†ก ์•Œ๋ฆผ์— ํ•„์š”.

/request
โ—‹
F-033์™„๋ฃŒ ํ™”๋ฉด ์žฌ์„ค๊ณ„P1

์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€ ํ›„: ์นด์นด์˜ค ์—ฐ๊ฒฐ + ๋งํฌ ์ €์žฅ(๋‚˜์—๊ฒŒ ๋ณด๋‚ด๊ธฐ) + ๊ธฐ๋ก ๋ณด๋Ÿฌ๊ฐ€๊ธฐ. session_end ์ƒํƒœ.

/interview/{id}
โš™
F-034๊ฒฐ์ œ (๊ธฐ๋ก ๋ณด๊ด€)P1

Toss Payments ์—ฐ๋™ ์™„๋ฃŒ. ์ˆ˜๋™ ์ž‘์—… ํ•„์š”: 1) developers.tosspayments.com ๊ฐ€์ž… + ํ…Œ์ŠคํŠธ ์ƒ์  ์ƒ์„ฑ 2) .env.local์— NEXT_PUBLIC_TOSS_CLIENT_KEY=test_ck_xxx, TOSS_SECRET_KEY=test_sk_xxx ์ถ”๊ฐ€ 3) Vercel ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€ 4) /archive/{id} ํ•˜๋‹จ ๋ฒ„ํŠผ ํด๋ฆญ โ†’ /payment/{id} โ†’ ํ…Œ์ŠคํŠธ ์นด๋“œ ๊ฒฐ์ œ โ†’ /payment/success ํ™•์ธ. ์ƒ์„ธ: TOSS_PAYMENT_SETUP.md ์ฐธ์กฐ. ์ฝ”๋“œ: app/payment/[interviewId]/page.tsx, app/api/payment/confirm/route.ts, payment/success/fail ํŽ˜์ด์ง€, ArchiveView.tsx CTA ์ถ”๊ฐ€๋จ. Interview.payment ํƒ€์ž… ์ถ”๊ฐ€๋จ.

/archive/{id}
โ—‹
F-035์„ฑ๊ฒฉ ๋ถ„์„ ๋ฆฌํฌํŠธP1

1์ธ ์„ฑ๊ฒฉ ํ”„๋กœํŒŒ์ผ. ์ž์ฃผ ์“ฐ๋Š” ๋‹จ์–ด, ๊ฐ์ • ํŒจํ„ด, ๊ฐ€์น˜๊ด€ ๋งต, ์ธ์ƒ ํƒ€์ž„๋ผ์ธ. GPT-4o ๋ถ„์„. 19,000์›.

/archive/{id}
โ—‹
F-036์ด๋ฉ”์ผ ๊ฒฐ๊ณผ ์ „์†กP1

์ธํ„ฐ๋ทฐ ์™„๋ฃŒ ์‹œ ์š”์ฒญ์ž ์ด๋ฉ”์ผ๋กœ archive ๋งํฌ ์ „์†ก.

๋ฐฑ์—”๋“œ
โ—‹
F-046์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜ (Phase 0)P1

AI๊ฐ€ ๊ตฌ์ˆ ์‚ฌ ์˜๋ฏธ ์„ค๋ช… + ๊ธฐ๋ณธ์ •๋ณด ์ˆ˜์ง‘ (์ƒ๋…„์›”์ผ, ์ถœ์ƒ์ง€). ์ธ์‚ฌ ๋…น์Œ ์žฌ์ƒ ํ›„, ๋ณธ ๋Œ€ํ™” ์ „์— ์ง„ํ–‰. ๋‹น์‹ ์˜ ๊ธฐ๋ก์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ์•Œ๋ฆฌ๊ธฐ.

/interview/{id}
โ—‹
F-050PostHog ๋„์ž…P1

์–ด๋ฒ„์ด๋‚  ์งํ›„ ์ฆ‰์‹œ ๋„์ž…. ์œ ์ € ํ–‰๋™ ๋ถ„์„, ํผ๋„ ์ถ”์  (๋งํฌ ์ƒ์„ฑ โ†’ ๋Œ€ํ™” ์‹œ์ž‘ โ†’ 1์ฑ•ํ„ฐ ์™„์ฃผ). ์ดํƒˆ ์ง€์  ํŒŒ์•…. ๋ฌด๋ฃŒ ํ”Œ๋žœ ์‹œ์ž‘.

์ „์ฒด
โ—‹
F-051Deepgram A/B ํ…Œ์ŠคํŠธP1

Whisper vs Deepgram ํ•œ๊ตญ์–ด ํ’ˆ์งˆ ๋น„๊ต. ๋…ธ์ธ ๋ฐœํ™”/์‚ฌํˆฌ๋ฆฌ ์ •ํ™•๋„ ๊ฒ€์ฆ. ๋น„์šฉ: $2.58 vs $3.60 (10์‹œ๊ฐ„). ์†๋„: 2-3๋ฐฐ ๋น ๋ฆ„. Nova-2 ๋ชจ๋ธ ํ…Œ์ŠคํŠธ.

๋ฐฑ์—”๋“œ
โ—‹
F-052์™„์ฃผ์œจ ํผ๋„ ๋ถ„์„P1

PostHog ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜. ๊ฐ ๋‹จ๊ณ„๋ณ„ ์ดํƒˆ๋ฅ : ๋งํฌ ์ˆ˜์‹  โ†’ ํด๋ฆญ โ†’ ๋™์˜ โ†’ ์ฒซ ๋ฉ”์‹œ์ง€ โ†’ 5๋ถ„ โ†’ 1์ฑ•ํ„ฐ ์™„์ฃผ. ๊ฐœ์„  ์šฐ์„ ์ˆœ์œ„ ๊ฒฐ์ •.

๋Œ€์‹œ๋ณด๋“œ

P2 โ€” Phase 2 ๊ด€๊ณ„ ๋ถ„์„ (6~7์›”)

โ€“
F-006์ธํ„ฐ๋ทฐ ๋ชฉ๋กP2

๋‹น๋ถ„๊ฐ„ /archive/{id}๋กœ ์ถฉ๋ถ„. ์ธํ„ฐ๋ทฐ 3๊ฑด ์ด์ƒ ์‹œ ํ—ค๋” ๋“œ๋กญ๋‹ค์šด ๋˜๋Š” /my

/my ๋˜๋Š” ํ—ค๋”
โ—‹
F-023์š”์ฒญ์ž ๋Œ€ํ™” ์ฐธ์—ฌP2

์•„๋“ค์ด ์ฑ„ํŒ…๋ฐฉ์— ๋ฉ”์‹œ์ง€ ๊ฐ€๋Šฅ. Message.role์— requester ์ถ”๊ฐ€. AI๋Š” ์•„๋ฒ„์ง€์™€ ์ฃผ ๋Œ€ํ™”.

/interview/{id}
โ—‹
F-024์•„์นด์ด๋ธŒ ๊ณต๋™ ํŽธ์ง‘P2

์ „์‚ฌ๋ณธ ๊ณต๋™ ์ˆ˜์ •

/archive/{id}/edit
โš™
F-025์…€ํ”„ ๋ชจ๋“œP2

์ค€๋น„ ์ค‘ ํŽ˜์ด์ง€๋งŒ ์กด์žฌ

/self
โ—‹
F-037๋‹จํ†ก๋ฐฉ ๊ตฌ์กฐP2

์•„๋ฒ„์ง€+์•„๋“ค+AI ๊ฐ™์€ ์ฑ„ํŒ…๋ฐฉ. Message.role์— requester ์ถ”๊ฐ€. 3๋ฒˆ์งธ ๋ฒ„๋ธ” ์ƒ‰์ƒ. F-023 ๊ตฌํ˜„์ฒด.

/interview/{id}
โ—‹
F-038๋…ธํฌ/์ž…์žฅ ํ—ˆ๊ฐ€P2

์•„๋“ค ์ ‘๊ทผ ์‹œ ๋Œ€๊ธฐ์‹ค. ์•„๋ฒ„์ง€ ํ—ˆ๋ฝ์œผ๋กœ ์ž…์žฅ. ๋‚ด๋ณด๋‚ด๊ธฐ ๊ฐ€๋Šฅ. participants ์ƒํƒœ polling.

/interview/{id}
โ—‹
F-039๊ด€๊ณ„ ๋‹ค์ด๋‚˜๋ฏน ๋ถ„์„P2

2์ธ ์ด์ƒ ์ธํ„ฐ๋ทฐ ๋น„๊ต. ๊ฐ™์€ ์‚ฌ๊ฑด ๋‹ค๋ฅธ ๊ธฐ์–ต, ๊ฐ์ • ์˜จ๋„ ์ฐจ์ด, ๋ฐ˜๋ณต ํŒจํ„ด. 29,000์›.

/archive/{id}
โœ“
F-040messages ํ…Œ์ด๋ธ” ๋ถ„๋ฆฌP2

interviews.messages JSONB โ†’ messages ํ…Œ์ด๋ธ”. createMessage/getMessages/getMessageCount CRUD. ํด๋ฐฑ ๋กœ์ง. MessageMeta (phase, topic, intensity). /api/messages ์—”๋“œํฌ์ธํŠธ. Realtime ๊ตฌ๋…์€ Phase 2.

๋ฐฑ์—”๋“œ2/26
โ—‹
F-041์นด์นด์˜ค ๋ฆฌ๋งˆ์ธ๋” ์•Œ๋ฆผP2

์•„๋ฒ„์ง€: ์ด์–ดํ•˜๊ธฐ ๋ฆฌ๋งˆ์ธ๋” (์ตœ๋Œ€ 3ํšŒ). ์•„๋“ค: ์ง„์ฒ™ ์•Œ๋ฆผ (์‹œ์ž‘/์™„๋ฃŒ/์ถ”๊ฐ€). ๋ฐค 9์‹œ ์ดํ›„ ๊ธˆ์ง€.

๋ฐฑ์—”๋“œ
โ—‹
F-047archive ํŽธ์ง‘ ๋ชจ๋“œP2

์ฝ๊ธฐ ์ „์šฉ โ†’ ํŽธ์ง‘ ๊ฐ€๋Šฅ. ์ฑ•ํ„ฐ ์žฌ๋ฐฐ์น˜, ์ œ๋ชฉ ์ˆ˜์ •, ๊ตฌ๊ฐ„ ์‚ญ์ œ/์ถ”๊ฐ€. ์ฑ… ํŽธ์ง‘ ์ธํ„ฐํŽ˜์ด์Šค. F-024์˜ ์‹ค์ฒด.

/archive/{id}
โ—‹
F-048๊ฐ€์กฑ ์ดˆ๋Œ€ (์—„๋งˆ๋„)P2

archive์—์„œ '์—„๋งˆ๋„ ์ดˆ๋Œ€ํ•˜๊ธฐ' โ†’ ์ƒˆ /request ์ƒ์„ฑ. ๊ธฐ์กด ๊ฐ€์กฑ ์ปจํ…์ŠคํŠธ(์ด๋ฆ„, ๊ด€๊ณ„) ์ž๋™ ๋ฌผ๋ ค๋ฐ›๊ธฐ.

/archive/{id}
โ—‹
F-049์ด์•ผ๊ธฐ ์™„์„ฑ๋„ ํŒ๋‹จP2

AI๊ฐ€ ์„ธ์…˜ ์ˆ˜, ์ด ์‹œ๊ฐ„, ์ฃผ์ œ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๋ณด๊ณ  '์ฑ…์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ด์•ผ๊ธฐ๊ฐ€ ๋ชจ์˜€์Šต๋‹ˆ๋‹ค' ์ œ์•ˆ. 10์‹œ๊ฐ„ ๋ชฉํ‘œ.

/interview/{id}, /archive/{id}
โ—‹
F-053Deepgram ์ „ํ™˜P2

A/B ํ…Œ์ŠคํŠธ ์™„๋ฃŒ ํ›„. /api/transcribe๋ฅผ Deepgram API๋กœ ์ „ํ™˜. ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ์ค€๋น„. ํ™”์ž ์‹๋ณ„ ๊ธฐ๋Šฅ ํ™œ์šฉ ๊ฐ€๋Šฅ.

๋ฐฑ์—”๋“œ
โ—‹
F-054AssemblyAI ํ™”์ž ์‹๋ณ„P2

๋‹จํ†ก๋ฐฉ ๊ธฐ๋Šฅ ์‹œ ํ•„์š”. ํ™”์ž๋ณ„ ๋ฒ„๋ธ” ์ƒ‰์ƒ ๊ตฌ๋ถ„. ๊ฐ์ • ๋ถ„์„ ๊ธฐ๋Šฅ. speaker_label ์ž๋™ ํƒœ๊น….

/interview/{id}
โ—‹
F-055Pinecone ๋„์ž…P2

Human Voice Graph ๊ตฌ์ถ• ์‹œ์ž‘. entities๋ฅผ ๋ฒกํ„ฐํ™”ํ•˜์—ฌ ์ €์žฅ. ์œ ์‚ฌ ๊ฒฝํ—˜ ๋งค์นญ ('์ด๋Ÿฐ ์ด์•ผ๊ธฐ๋ฅผ ํ•œ ๋ถ„๋“ค๋„'). ์ฑ•ํ„ฐ ์ถ”์ฒœ ๊ณ ๋„ํ™”.

๋ฐฑ์—”๋“œ

P3 โ€” Phase 3 ๊ตฌ๋… + ์Šค์ผ€์ผ (8~9์›”)

โ—‹
F-042๊ฐ€์กฑ ๊ตฌ๋…P3

์›” 9,900์›. ๋ฌด์ œํ•œ ๋Œ€ํ™”, ๋ถ„์„, ์Œ์„ฑ ๋ณด๊ด€. Toss ์ •๊ธฐ๊ฒฐ์ œ.

์ „์ฒด
โ—‹
F-043๊ฐ€์กฑ ์„œ์‚ฌ ์ง€๋„P3

3์ธ ์ด์ƒ ๊ฐ€์กฑ ๋ถ„์„. ๋ˆ„๊ฐ€ ์–ด๋–ค ๊ธฐ์–ต์˜ ์ค‘์‹ฌ์ธ์ง€, ์„ธ๋Œ€ ๊ฐ„ ๊ฐ€์น˜๊ด€ ๋ณ€ํ™” ์‹œ๊ฐํ™”.

/archive
โ—‹
F-044๋‹ค๊ตญ์–ด UIP3

์˜์–ด/์ผ๋ณธ์–ด UI. ๋Œ€ํ™”๋Š” ํ•œ๊ตญ์–ด ์œ ์ง€. ํ•ด์™ธ ๊ตํฌ ์ž๋…€๊ฐ€ ํ•œ๊ตญ ๋ถ€๋ชจ๋‹˜๊ป˜ ๋ณด๋‚ด๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค.

์ „์ฒด
โ—‹
F-045Google/Apple ๋กœ๊ทธ์ธP3

ํ•ด์™ธ ์‚ฌ์šฉ์ž ๋Œ€์‘. ์นด์นด์˜ค ์—†๋Š” ๊ตํฌ/์™ธ๊ตญ์ธ ๊ฐ€์กฑ. F-010 ํ™•์žฅ.

์ „์ฒด
โ—‹
F-056Stripe ๊ธ€๋กœ๋ฒŒ ๊ฒฐ์ œP3

ํ•ด์™ธ ์‹œ์žฅ ์ง„์ถœ ์‹œ. Toss๋Š” ํ•œ๊ตญ ์‹œ์žฅ ์œ ์ง€. ๊ตฌ๋… ๊ด€๋ฆฌ ๊ฐ•๋ ฅ. ๋‹ค๊ตญ์–ด ๊ฒฐ์ œ ํŽ˜์ด์ง€.

์ „์ฒด
โ—‹
F-057WorkOS Enterprise SSOP3

B2B (์š”์–‘์›, ์ข…์นœํšŒ, ๊ตํšŒ ๋“ฑ). SAML/OIDC SSO. ์กฐ์ง ๋‹จ์œ„ ๊ด€๋ฆฌ.

์ „์ฒด

๋กœ๋“œ๋งต โ€” ๋ฏธ์ •

โ—‹
F-020์ด๋ฒคํŠธ ๋กœ๊ทธ๋กœ๋“œ๋งต

์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ

/dashboard
โ—‹
F-021๋งํฌ ์ƒ์„ฑ ํ˜„ํ™ฉ๋กœ๋“œ๋งต

์ „์ฒด ์ธํ„ฐ๋ทฐ ๋งํฌ ๋ชฉ๋ก/์ƒํƒœ

/dashboard
โ—‹
F-008์˜จ๋ณด๋”ฉ/ํŠœํ† ๋ฆฌ์–ผ๋กœ๋“œ๋งต

์—ญํ• ๋ณ„ ๊ฐ€์ด๋“œ

/request, /i/{id}

๋ณ€๊ฒฝ ์ด๋ ฅ

3/5

  • archive ํŽ˜์ด์ง€ ์ดˆ๊ณ  ํŽธ์ง‘ ๊ธฐ๋Šฅ (์ฝ๊ธฐ/ํŽธ์ง‘ ๋ชจ๋“œ ์ „ํ™˜)
  • /api/update-draft PATCH ์—”๋“œํฌ์ธํŠธ (์ฑ•ํ„ฐ๋ณ„ ์ดˆ๊ณ  ์ €์žฅ)
  • ๋Œ€์‹œ๋ณด๋“œ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์—ฐ๋™ (/api/interviews GET)
  • ๋Œ€์‹œ๋ณด๋“œ ๊ด€๋ฆฌ ๋ฒ„ํŠผ (์ดˆ๊ณ  ์ƒ์„ฑ, ์ปจํ…์ŠคํŠธ ์ดˆ๊ธฐํ™”)
  • /api/init-chapter-context POST ์—”๋“œํฌ์ธํŠธ
  • generateDraftPrompt ์™„์ „ ์žฌ์ž‘์„ฑ (์—ฐ๋Œ€๊ธฐ โ†’ ๊ฐ์ •์ˆœ ๊ตฌ์กฐ)
  • autobiography_draft ํŒŒ์‹ฑ ๋ฒ„๊ทธ ์ˆ˜์ • (Next.js ์บ์‹œ ์ด์Šˆ)
  • archive/[id]/page.tsx: export const dynamic = "force-dynamic"
  • lib/store.ts: getInterview() autobiography_draft ๋ช…์‹œ์  ์„ ํƒ
  • design/ ํด๋” ์ „์ฒด ๋™๊ธฐํ™” (01-user-journey, 02-data-model, 03-interview-engine, 06-api, 07-decisions)
  • supabase/migrations/20260305_transcript_corrected.sql: transcript_corrected ์ปฌ๋Ÿผ ์˜ˆ์•ฝ

2/26

  • F-028 ๋Œ€ํ™” ์ด์–ดํ•˜๊ธฐ ์™„๋ฃŒ: session_end ์ƒํƒœ, Archive ์ด์–ดํ•˜๊ธฐ ๋ฐฐ๋„ˆ, Interview ์žฌ์ง„์ž… ๋กœ์ง
  • DateDivider ์ปดํฌ๋„ŒํŠธ ์‹ ๊ทœ (๋‚ ์งœ ๊ตฌ๋ถ„์„ )
  • Interview ํŽ˜์ด์ง€ status ๋ถ„๊ธฐ: complete โ†’ archive ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ, session_end โ†’ ๊ธฐ์กด ๋Œ€ํ™” ๋กœ๋“œ
  • /api/messages์—์„œ ์ด์ „ ์„ธ์…˜ ๋ฉ”์‹œ์ง€ ๋กœ๋“œ, ๋งˆ์ง€๋ง‰ ์„ธ์…˜ ๋‚ ์งœ ์ถ”์ถœ
  • handleResume ํ•จ์ˆ˜: status๋ฅผ active๋กœ ๋ณ€๊ฒฝ + AI ์žฌ์‹œ์ž‘
  • PATCH /api/create-interview ์—”๋“œํฌ์ธํŠธ ์ถ”๊ฐ€
  • AI ์ด์–ดํ•˜๊ธฐ ํ”„๋กฌํ”„ํŠธ ๊ฐ•ํ™”: "์ค‘์š”" ํ‚ค์›Œ๋“œ + 3๋‹จ๊ณ„ ํฌ๋งท (์ธ์‚ฌ โ†’ ์ง€๋‚œ ๋Œ€ํ™” ์–ธ๊ธ‰ โ†’ ๋‹ค์Œ ์งˆ๋ฌธ)
  • F-040 messages ํ…Œ์ด๋ธ” ๋ถ„๋ฆฌ ์™„๋ฃŒ: interviews.messages JSONB โ†’ messages ํ…Œ์ด๋ธ”
  • createMessage/getMessages/getMessageCount CRUD ํ•จ์ˆ˜ ์ถ”๊ฐ€
  • MessageMeta ์ธํ„ฐํŽ˜์ด์Šค (phase, topic, subtopic, qtype, intensity)
  • /api/messages GET ์—”๋“œํฌ์ธํŠธ ์‹ ๊ทœ, ํด๋ฐฑ ๋กœ์ง (backward compatibility)
  • updateInterview camelCase โ†’ snake_case ๋งคํ•‘ ์ถ”๊ฐ€ (sessionCount โ†’ session_count ๋“ฑ)
  • /api/complete ์—๋Ÿฌ ๋กœ๊น… ์ถ”๊ฐ€
  • supabase-session-upgrade.txt: session + analysis ์ปฌ๋Ÿผ DDL
  • CLAUDE.md v0.4.0 ์—…๋ฐ์ดํŠธ (Messages table + Session management + Resume conversation)
  • F-034 ํ† ์ŠคํŽ˜์ด๋จผ์ธ  ๊ฒฐ์ œ ์—ฐ๋™ (ํ…Œ์ŠคํŠธ ๋ชจ๋“œ)
  • app/payment/[interviewId]/page.tsx: ๊ฒฐ์ œ ์œ„์ ฏ ํŽ˜์ด์ง€ ์ƒ์„ฑ
  • app/api/payment/confirm/route.ts: ๊ฒฐ์ œ ์Šน์ธ API
  • app/payment/success/page.tsx, fail/page.tsx: ๊ฒฐ๊ณผ ํŽ˜์ด์ง€
  • ArchiveView.tsx: "๊ธฐ๋ก ๋ณด๊ด€ํ•˜๊ธฐ 9,900์›" CTA ์ถ”๊ฐ€
  • Interview.payment ํƒ€์ž… ์ถ”๊ฐ€ (paymentKey, orderId, amount, method, status, approvedAt)
  • @tosspayments/tosspayments-sdk ํŒจํ‚ค์ง€ ์„ค์น˜
  • TOSS_PAYMENT_SETUP.md: ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ๊ฐ€์ด๋“œ
  • ์ˆ˜๋™ ์ž‘์—… ํ•„์š”: developers.tosspayments.com ๊ฐ€์ž…, API ํ‚ค ๋ฐœ๊ธ‰, ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€, ํ…Œ์ŠคํŠธ
  • FLOW-MAP.md ์—…๋ฐ์ดํŠธ: ํ•œ ์‚ฌ์ดํด ์ „์ฒด ๊ทธ๋ฆผ(3-D), ์•„์นด์ด๋ธŒ ์ž‘์—… ๊ณต๊ฐ„ ์žฌ์ •์˜(์ฝ๊ธฐ/๋“ฃ๊ธฐ/ํŽธ์ง‘/ํ™•์žฅ/๋ถ„์„/์ถœํŒ/๋ณด๊ด€), AI ์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜ Phase 0 ์ถ”๊ฐ€(๊ตฌ์ˆ ์‚ฌ ์˜๋ฏธ ์„ค๋ช… + ๊ธฐ๋ณธ์ •๋ณด ์ˆ˜์ง‘)
  • F-046~F-049 ์ถ”๊ฐ€: ์˜ค๋ฆฌ์—”ํ…Œ์ด์…˜, archive ํŽธ์ง‘ ๋ชจ๋“œ, ๊ฐ€์กฑ ์ดˆ๋Œ€, ์ด์•ผ๊ธฐ ์™„์„ฑ๋„ ํŒ๋‹จ
  • Feedback ์ด 49๊ฐœ ํ•ญ๋ชฉ์œผ๋กœ ํ™•์žฅ

2/25

  • F-016 ํ…”๋ ˆ๊ทธ๋žจ ์Šคํƒ€์ผ ์Œ์„ฑ UX: ๋…น์Œ โ†’ ์˜ค๋””์˜ค ๋ฒ„๋ธ”(์žฌ์ƒ/๋ณ€ํ™˜/์‚ญ์ œ) โ†’ ์ „์†ก
  • F-017 AI ์‘๋‹ต ํƒ€์ด๋ฐ: ๋‹ค์ค‘ ์กฐ๊ฐ(์˜ค๋””์˜ค+ํ…์ŠคํŠธ) ๋ˆ„์  ํ›„ ์ „์†ก ๋ฒ„ํŠผ์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐ
  • AudioBubble, TextChunkBubble ์ปดํฌ๋„ŒํŠธ ์‹ ๊ทœ
  • MicButton ์ฝœ๋ฐฑ ๋ณ€๊ฒฝ: onTranscription โ†’ onRecordingComplete
  • Enter ํ‚ค ๋™์ž‘ ๋ณ€๊ฒฝ: ์ฆ‰์‹œ ์ „์†ก โ†’ ์กฐ๊ฐ ์ถ”๊ฐ€
  • MediaRecorder ์„ค์ •: 48kHz mono opus/aac, 32kbps
  • pending ์กฐ๊ฐ ์˜์—ญ: ์ „์†ก ์ „ ์กฐ๊ฐ๋“ค ์‹œ๊ฐ์  ๊ตฌ๋ถ„
  • ํ…์ŠคํŠธ ์กฐ๊ฐ: ํƒญํ•˜์—ฌ ์ธ๋ผ์ธ ํŽธ์ง‘
  • ์˜ค๋””์˜ค ์กฐ๊ฐ: ์žฌ์ƒ/์ผ์‹œ์ •์ง€, โ†’A ํ…์ŠคํŠธ ๋ณ€ํ™˜, ์‚ญ์ œ
  • "์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€" ๋ฒ„ํŠผ ์‹œ๊ฐ์  ๊ฐ•ํ™” (48px, ์ „์ฒด ๋„ˆ๋น„, ๋ณด๋”)
  • ์ฑ„ํŒ… ํƒ€์ž„์Šคํƒฌํ”„์— ๋‚ ์งœ ์ถ”๊ฐ€ (2/25 ์˜คํ›„ 3:24 ํ˜•์‹)
  • Message์— ๊ณ ์œ  ID ์ถ”๊ฐ€ (ํ–ฅํ›„ blob ๋‹จ์œ„ ํŽธ์ง‘ ๋Œ€๋น„)
  • /request ๊ฒฐ๊ณผ ํ™”๋ฉด์— ๊ฐœ๋ฐœ์ž์šฉ ํ…Œ์ŠคํŠธ ๋ฒ„ํŠผ ์ถ”๊ฐ€
  • F-026 ์Œ์„ฑ ์›๋ณธ ์ €์žฅ: Supabase Storage ์—…๋กœ๋“œ + audio_chunks ํ…Œ์ด๋ธ”
  • /api/transcribe verbose_json ์ „ํ™˜: segments ํƒ€์ž„์Šคํƒฌํ”„ ๋งคํ•‘
  • /api/upload-audio, /api/save-audio-chunk, /api/audio/[chunkId] ์‹ ๊ทœ
  • /api/audio-chunks/[interviewId] ์‹ ๊ทœ
  • lib/store.ts AudioChunk CRUD ์ถ”๊ฐ€
  • ArchiveView ์˜ค๋””์˜ค ์žฌ์ƒ ์—ฐ๋™
  • FLOW-MAP.md ์ž‘์„ฑ: ์œ ์ € ํ”Œ๋กœ์šฐ, ์ˆ˜์ต ๊ตฌ์กฐ, ๊ฐ€์ž… ์ •์ฑ…, ์•Œ๋ฆผ ์‹œ๋‚˜๋ฆฌ์˜ค ํ™•์ •
  • ํ”ผ๋“œ๋ฐฑ ํ•ญ๋ชฉ F-029~F-045 ์ถ”๊ฐ€ (ํ”Œ๋กœ์šฐ ๋งต ๊ธฐ๋ฐ˜ ์ „์ฒด ๋กœ๋“œ๋งต)
  • CLAUDE.md v0.3.0 ์—…๋ฐ์ดํŠธ

2/19

  • F-009 Supabase ์ „ํ™˜ ์™„๋ฃŒ (JSON โ†’ PostgreSQL)
  • F-009 store.ts ํ”Œ๋žซ ์ปฌ๋Ÿผ ๋ฐฉ์‹์œผ๋กœ ์ „๋ฉด ๊ต์ฒด + lib/supabase.ts ์‹ฑ๊ธ€ํ†ค ๋ถ„๋ฆฌ
  • Race condition ์ˆ˜์ •: ์ธํ„ฐ๋ทฐ ์ฒซ ๋ฉ”์‹œ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ˆœ์„œ ๋ณด์žฅ
  • "์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€" โ†’ /api/complete ํ˜ธ์ถœ ํ›„ /archive ์ด๋™ ์ˆ˜์ •
  • F-007 ์•„์นด์ด๋ธŒ ์‹ค์ œ ๋ฐ์ดํ„ฐ ์—ฐ๋™ ์™„๋ฃŒ
  • F-015 ์ฑ„ํŒ… ๋งํ’์„  ํƒ€์ž„์Šคํƒฌํ”„ ์ถ”๊ฐ€
  • F-019 ๋Œ€์‹œ๋ณด๋“œ ์ธ์ฆ (ID/PW) ๊ตฌํ˜„
  • F-022 ๊ฐœ๋ฐœ ๋กœ๊ทธ ํŽ˜์ด์ง€ ๊ตฌํ˜„
  • F-005 ์นด์นด์˜คํ†ก ๊ณต์œ  SDK ์—ฐ๋™ (๋„๋ฉ”์ธ ๋“ฑ๋ก ์™„๋ฃŒ)
  • OG ์ด๋ฏธ์ง€ + favicon ์ถ”๊ฐ€ (128ร—128 PNG)
  • /vision ์ „๋ฉด ์—…๋ฐ์ดํŠธ: HOMP, ํฌ๋ ˆ๋ด์…œ, ์ฐฝ์—…์ž, ๊ธ€๋กœ๋ฒŒ ๋น„์ „ ๋“ฑ
  • ํ—ค๋”: Inspiration โ†’ ์†Œ๊ฐœ, Vision โ†’ ๋กœ๋“œ๋งต, ๊ด€๋ฆฌ์ž ๋งํฌ ์ถ”๊ฐ€
  • ํ‘ธํ„ฐ: ๋ฟŒ๋ฆฌ๊นŠ์€๋‚˜๋ฌด ์—ฐ๊ตฌ์†Œ ๋งํฌ, ์‚ฌ์—…์ž ์ •๋ณด ์ถ”๊ฐ€
  • ๋กœ๊ทธ์ธ ํ™”๋ฉด: ์‹ฌ์‚ฌ์šฉ ID/PW ํžŒํŠธ ํ‘œ์‹œ (bts / arirang2026)
  • CLAUDE.md v0.2.0 ์—…๋ฐ์ดํŠธ
  • e2e ํ…Œ์ŠคํŠธ ํ†ต๊ณผ: request โ†’ ๋Œ€ํ™” โ†’ ์™„๋ฃŒ โ†’ archive โ†’ book

2/18

  • F-001~F-004, F-002b ์™„๋ฃŒ (์นดํ”ผ/UX ์ˆ˜์ •)
  • F-011, F-012, F-013, F-018 ์™„๋ฃŒ (์ธํ„ฐ๋ทฐ UI ๊ฐœ์„ )
  • ๋žœ๋”ฉ/inspiration/vision ํŽ˜์ด์ง€ ๋ฐฐํฌ
  • Nav + Footer ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ๊ตฌํ˜„
  • v0 ๋””์ž์ธ 7๊ฐœ ํŽ˜์ด์ง€ ํ†ตํ•ฉ

2/17

  • ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ค๊ณ„ ๋ฐ Claude Code ๋ธŒ๋ฆฌํ”„ ์ž‘์„ฑ
  • v0.dev ๋ชฉ์—… 7๊ฐœ ํŽ˜์ด์ง€ ์ œ์ž‘
  • Vercel ์ฒซ ๋ฐฐํฌ