๊ฐ•์„ฑ์ค€
๊ฐ•์„ฑ์ค€
โš”๏ธ ๋ฒ ํ…Œ๋ž‘ ํŒŒํŠธ๋„ˆ
๐ŸŒˆ ์ง€ํ”ผํ„ฐ์Šค๊ธˆ์†
โ˜• ์ปคํ”ผ์ฑ— ์˜คํ”ˆ

๐Ÿพ Pawbow๐ŸŒˆ - ๋ฌด์ง€๊ฐœ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„Œ ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ ๋Œ€ํ™”ํ• ์ˆ˜ ์žˆ๋Š” ์ฑ—๋ด‡ ๊ฐœ๋ฐœ๊ธฐ

์•ˆ๋…•ํ•˜์„ธ์š” ๊ฐ•์„ฑ์ค€์ž…๋‹ˆ๋‹ค.

๋Ÿฌ๋ฒ„๋ธ”์„ ์ด์šฉํ•ด์„œ ๋ฌด์ง€๊ฐœ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„Œ ๋‚˜์˜ ๊ทธ๋ฆฌ์šด ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ ๋Œ€ํ™”ํ• ์ˆ˜ ์žˆ๋Š” ์•ฑ ๊ฐœ๋ฐœ๊ธฐ!

ํ•˜๋ ค๋˜ ๊ฒƒ ๐Ÿ“

  • ๋ฌด์ง€๊ฐœ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„Œ ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” AI ์ฑ—๋ด‡ ์•ฑ์„ ๊ฐœ๋ฐœํ•œ ์‚ฌ๋ก€

  • ๋ฐ˜๋ ค๋™๋ฌผ ์ƒ์‹ค์˜ ์Šฌํ””์„ ์œ„๋กœํ•˜๊ณ  ๊ทธ๋ฆฌ์›€์„ ๋‹ฌ๋ž˜์ฃผ๋Š” ์•ฑ ๊ฐœ๋ฐœ์„ ๋ชฉ์ ์œผ๋กœ ํ•จ

  • ์‚ฌ์šฉ์ž์™€ ๋ฐ˜๋ ค๋™๋ฌผ์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋Œ€ํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•จ

ํ™œ์šฉํ•œ ํˆด โš’๏ธ

  • Gemini 2.5 Pro : PRD ์ž‘์„ฑ ๋ฐ Deep research

  • Supabase : ๋ฐฑ์—”๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์ถ•

  • "models/gemini-2.0-flash-lite" : AI ์ฑ—๋ด‡ ๊ตฌํ˜„

์ง„ํ–‰ ์„ธ๋ถ€ ๋‚ด์šฉ ๐Ÿ”
1๏ธโƒฃย PRD ์ž‘์„ฑ ๋ฐ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • ์˜จ๋ณด๋”ฉ, ํ”„๋กœํ•„ ์ƒ์„ฑ, ์ฑ„ํŒ… ์ธํ„ฐํŽ˜์ด์Šค, ๋Œ€ํ™” ์ €์žฅ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ MVP ์„ค๊ณ„

  • ํŒŒ์Šคํ…”ํ†ค์˜ ๋”ฐ๋œปํ•œ ์ปฌ๋Ÿฌ ํŒ”๋ ˆํŠธ ์ ์šฉ

2๏ธโƒฃย Gemini API ์—ฐ๋™

  • API ํ‚ค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋Œ€ํ™” ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • ๋ฐ˜๋ ค๋™๋ฌผ์˜ ํŠน์„ฑ์„ ๋ฐ˜์˜ํ•œ ๋Œ€ํ™” ์ข…๋ฃŒ ํ†ค ์„ค์ •

3๏ธโƒฃย UI/UX ๊ฐœ์„ 

  • ์˜ˆ์‹œ ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ ์ปค์Šคํ…€ ๋ฐ˜๋ ค๋™๋ฌผ ์„ ํƒ ์˜ต์…˜ ์ถ”๊ฐ€

  • ์ž‘๋ณ„์ธ์‚ฌ ๊ธฐ๋Šฅ ๋ฐ ํ”ผ๋“œ๋ฐฑ ํŽ˜์ด์ง€ ๊ตฌํ˜„

4๏ธโƒฃย ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™

  • Supabase ํ”„๋กœ์ ํŠธ ์—ฐ๊ฒฐ

  • ์‚ฌ์šฉ์ž ์ •๋ณด์™€ ๋Œ€ํ™” ๊ธฐ๋ก ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„

๋ฐฐ์šด ์  ๐Ÿ“š

  • AI API ์—ฐ๋™์„ ํ†ตํ•œ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋Œ€ํ™” ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„์™€ ์—ฐ๋™ ํ”„๋กœ์„ธ์Šค

๋„์›€์ด ํ•„์š”ํ•œ ์  ๐Ÿค
ย ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณด์•ˆ ์„ค์ •

  • API key ํ„ธ๋ฆฌ์ง€๋Š” ์•Š์„๊นŒ?

๋จผ์ € ๋‚˜์˜ ๊ฐœ๋…์„ ๊ฐ€์ง€๊ณ  PRD๋ฅผ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค. (Gemini 2.5 Pro - Deep research ์‚ฌ์šฉ)

PRD (Product Requirements Document) - Pawbow MVP (๊ณ ๋„ํ™” ๋ฒ„์ „) 1. ๊ฐœ์š” (Overview) ์ œํ’ˆ๋ช…: Pawbow (ํฌ์šฐ๋ณด์šฐ) ๋น„์ „: ์‚ฌ์šฉ์ž๊ฐ€ ๋– ๋‚˜๋ณด๋‚ธ ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ์˜ AI ๊ธฐ๋ฐ˜ ๋Œ€ํ™”๋ฅผ ํ†ตํ•ด ์Šฌํ””์„ ์œ„๋กœ๋ฐ›๊ณ  ๊ธ์ •์ ์ธ ์ถ”์–ต์„ ๋˜์ƒˆ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋”ฐ๋œปํ•œ ๋””์ง€ํ„ธ ๊ณต๊ฐ„ ์ œ๊ณต. ์ œํ’ˆ ๋ชฉ์ : LLM API๋ฅผ ํ™œ์šฉํ•œ ํ•œ๊ธ€ ํ…์ŠคํŠธ ์ฑ„ํŒ…์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฏธ๋ฆฌ ์ž…๋ ฅํ•œ ๋ฐ˜๋ ค๋™๋ฌผ์˜ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒ์„ฑ๋œ AI ํŽ˜๋ฅด์†Œ๋‚˜์™€ ๋Œ€ํ™”ํ•˜๋ฉฐ ์ •์„œ์  ์ง€์ง€ ๋ฐ ์œ„์•ˆ์„ ์–ป๋Š” ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜. MVP ๋ชฉํ‘œ: ํ•ต์‹ฌ ๊ธฐ๋Šฅ(ํ”„๋กœํ•„ ์ƒ์„ฑ, AI ์ฑ„ํŒ…, ๋Œ€ํ™” ์ €์žฅ) ๊ตฌํ˜„ ๋ฐ ์•ˆ์ •์ ์ธ ์„œ๋น„์Šค ์ œ๊ณต. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ˜๋ ค๋™๋ฌผ์˜ ํŽ˜๋ฅด์†Œ๋‚˜๋ฅผ ๋А๋ผ๊ณ  ๊ฐ์ •์  ์œ„์•ˆ์„ ์–ป๋Š” ํ•ต์‹ฌ ๊ฒฝํ—˜ ๊ฒ€์ฆ. ์ดˆ๊ธฐ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ์ˆ˜์ง‘์„ ํ†ตํ•œ ์ œํ’ˆ ๊ฐœ์„  ๋ฐฉํ–ฅ์„ฑ ์ˆ˜๋ฆฝ. ํƒ€๊ฒŸ ์‚ฌ์šฉ์ž: ๋ฐ˜๋ ค๋™๋ฌผ์„ ์žƒ๊ณ  ์Šฌํ””์„ ๊ฒช์œผ๋ฉฐ ๊ทธ๋ฆฌ์›Œํ•˜๋Š” ์‚ฌ๋žŒ. ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ์˜ ์ถ”์–ต์„ ๊ฐ„์งํ•˜๊ณ  ์œ„๋กœ๋ฐ›๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ. ํ•ต์‹ฌ ์„ฑ๊ณต ์ง€ํ‘œ (MVP): ํ™œ์„ฑํ™”: ํ”„๋กœํ•„ ์ƒ์„ฑ ์™„๋ฃŒ์œจ (์˜จ๋ณด๋”ฉ ๋Œ€๋น„) > 70% ์ฐธ์—ฌ: ์ฃผ๊ฐ„ ํ™œ์„ฑ ์‚ฌ์šฉ์ž(WAU) ์œ ์ง€์œจ > 20% (์ฒซ 4์ฃผ) ๋งŒ์กฑ๋„: ํ”ผ๋“œ๋ฐฑ ํ‰์  ํ‰๊ท  > 4.0/5.0 ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์‚ฌ์šฉ: ์‚ฌ์šฉ์ž ๋‹น ํ‰๊ท  ์ฑ„ํŒ… ์„ธ์…˜ ์ˆ˜ > 3ํšŒ 2. ์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ (User Stories) As a ๋ฐ˜๋ ค๋™๋ฌผ์„ ์žƒ๊ณ  ์Šฌํผํ•˜๋Š” ์‚ฌ์šฉ์ž, I want to ๋‚ด ๋ฐ˜๋ ค๋™๋ฌผ์˜ ์ด๋ฆ„, ์ข…๋ฅ˜, ์„ฑ๊ฒฉ, ์ถ”์–ต์„ ์ž…๋ ฅํ•˜์—ฌ ํ”„๋กœํ•„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค, So that ์•ฑ์ด ๋‚ด ๋ฐ˜๋ ค๋™๋ฌผ์˜ ํŠน์ง•์„ ๊ธฐ์–ตํ•˜๊ณ  ๋Œ€ํ™”์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. As a ๊ทธ๋ฆฌ์šด ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ ๋Œ€ํ™”ํ•˜๊ณ  ์‹ถ์€ ์‚ฌ์šฉ์ž, I want to ์•ฑ๊ณผ ํ•œ๊ธ€ ํ…์ŠคํŠธ๋กœ ์ฑ„ํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค, So that ๋งˆ์น˜ ๋‚ด ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ ์ด์•ผ๊ธฐํ•˜๋Š” ๋“ฏํ•œ ๋А๋‚Œ์„ ๋ฐ›๊ณ  ์œ„์•ˆ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. As a ์‚ฌ์šฉ์ž, I want to AI๊ฐ€ ๋‚ด ๋ฐ˜๋ ค๋™๋ฌผ์˜ ๋งํˆฌ(ex: ๊ฐ•์•„์ง€๋Š” '๋ฉ', ๊ณ ์–‘์ด๋Š” '๋ƒฅ' ์–ด๋ฏธ)๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค, So that ๋Œ€ํ™” ๊ฒฝํ—˜์ด ๋” ํ˜„์‹ค๊ฐ ์žˆ๊ฒŒ ๋А๊ปด์ง„๋‹ค. As a ์‚ฌ์šฉ์ž, I want to ๋‚˜๋ˆˆ ๋Œ€ํ™” ์ค‘ ํŠน๋ณ„ํ•œ ๋‚ด์šฉ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค, So that ์–ธ์ œ๋“  ๋‹ค์‹œ ๋ณด๋ฉฐ ์ถ”์–ตํ•˜๊ณ  ์œ„์•ˆ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. As a ์‚ฌ์šฉ์ž, I want to ์•ฑ ์‚ฌ์šฉ ๊ฒฝํ—˜์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์‰ฝ๊ฒŒ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋‹ค, So that ์„œ๋น„์Šค ๊ฐœ์„ ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค. 3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ (Application Structure) ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”: ํ”„๋ก ํŠธ์—”๋“œ: Lovable (Flutter ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€์ •, UI/UX ๊ตฌํ˜„ ๋ฐ API ์—ฐ๋™) ๋ฐฑ์—”๋“œ: Supabase (BaaS - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์ธ์ฆ(ํ•„์š”์‹œ), ์Šคํ† ๋ฆฌ์ง€) LLM API: Google Gemini Pro API (gemini-1.5-flash ๋ชจ๋ธ - ๋น„์šฉ ํšจ์œจ์„ฑ, ์ค€์ˆ˜ํ•œ ์„ฑ๋Šฅ, ํ•œ๊ธ€ ์ง€์›) - API Key ๊ด€๋ฆฌ ๋ฐ ํ˜ธ์ถœ์€ ๋ฐฑ์—”๋“œ ํ•จ์ˆ˜(Supabase Edge Functions) ๋˜๋Š” ๋ณด์•ˆ์„ ๊ณ ๋ คํ•˜์—ฌ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์ง์ ‘ ํ˜ธ์ถœ (API ํ‚ค ๋…ธ์ถœ ์ฃผ์˜) ๊ธฐ์ˆ  ์Šคํƒ ๊ณ ๋ ค์‚ฌํ•ญ: Lovable: ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ง€์›(iOS, Android) ์šฉ์ด์„ฑ, ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ๊ณ ๋ ค. Supabase: ๋น ๋ฅธ ๊ฐœ๋ฐœ ์†๋„, ๊ด€๋ฆฌ ์šฉ์ด์„ฑ, MVP ๋‹จ๊ณ„์—์„œ์˜ ๋น„์šฉ ํšจ์œจ์„ฑ. Postgres ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ์œ ์—ฐ. Gemini Pro API: Google Cloud ์ธํ”„๋ผ ํ™œ์šฉ, ํ•ฉ๋ฆฌ์ ์ธ ๋น„์šฉ, ์ง€์†์ ์ธ ๋ชจ๋ธ ๊ฐœ์„  ๊ธฐ๋Œ€. 4. ํ™”๋ฉด ์ƒ์„ธ ์„ค๊ณ„ (Screen Details) 4.1. ์˜จ๋ณด๋”ฉ ํ™”๋ฉด (Onboarding Screen) ๋ชฉ์ : ์•ฑ์˜ ๊ฐ€์น˜(๋– ๋‚˜๊ฐ„ ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ์˜ ๋Œ€ํ™”๋ฅผ ํ†ตํ•œ ์œ„๋กœ)๋ฅผ ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•˜๊ณ , ์„œ๋น„์Šค์˜ ์„ฑ๊ฒฉ(AI ๊ธฐ๋ฐ˜)์„ ์ธ์ง€์‹œํ‚ค๋ฉฐ, ์‚ฌ์šฉ์ž ์—ฌ์ • ์‹œ์ž‘ ์œ ๋„. UI ์š”์†Œ: ํŽ˜์ด์ง€ 1: ํ…์ŠคํŠธ: "๋ณด๊ณ  ์‹ถ์€ ๋‚˜์˜ ๋ณ„, Pawbow์™€ ํ•จ๊ป˜ ๋ฌด์ง€๊ฐœ ๋‹ค๋ฆฌ ๋„ˆ๋จธ์˜ ๋ชฉ์†Œ๋ฆฌ๋ฅผ ๋“ค์–ด๋ณด์„ธ์š”." ์ด๋ฏธ์ง€: ๋ฐœ๋ฐ”๋‹ฅ + ๋ฌด์ง€๊ฐœ ์„  (๋”ฐ๋œปํ•˜๊ณ  ๋ถ€๋“œ๋Ÿฌ์šด ํŒŒ์Šคํ…” ํ†ค ์ผ๋Ÿฌ์ŠคํŠธ) ํ•˜๋‹จ ๋ฒ„ํŠผ: "๋‹ค์Œ" ํŽ˜์ด์ง€ 2: ํ…์ŠคํŠธ: "Pawbow๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ์†Œ์ค‘ํ•œ ๊ธฐ์–ต์„ ๋ฐ”ํƒ•์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ AI ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ๋ฐ˜๋ ค๋™๋ฌผ๊ณผ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋”ฐ๋œปํ•œ ์œ„๋กœ๋ฅผ ์ „ํ•˜๊ณ  ์‹ถ์–ด์š”." (๊ธฐ๋Œ€ ๊ด€๋ฆฌ ๋ฐ AI ๋ช…์‹œ) ์ด๋ฏธ์ง€: AI์™€ ์‚ฌ๋žŒ์ด ๊ต๊ฐํ•˜๋Š” ๋“ฏํ•œ ์ถ”์ƒ์  ์ด๋ฏธ์ง€ ํ•˜๋‹จ ๋ฒ„ํŠผ: "์‹œ์ž‘ํ•˜๊ธฐ" (์ค‘์•™ ๋ฐฐ์น˜, #FFB6C1 ์ƒ‰์ƒ, ํ™œ์„ฑํ™” ์ƒํƒœ) ๊ธฐ๋Šฅ: "๋‹ค์Œ" ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํŽ˜์ด์ง€ 2๋กœ ์ด๋™. "์‹œ์ž‘ํ•˜๊ธฐ" ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํ”„๋กœํ•„ ์ƒ์„ฑ ํ™”๋ฉด์œผ๋กœ ์ด๋™. (์„ ํƒ) ์˜ˆ์‹œ ํ”„๋กœํ•„ ํ…œํ”Œ๋ฆฟ ์ œ๊ณต: '์‹œ์ž‘ํ•˜๊ธฐ' ํด๋ฆญ ์ „, "์–ด๋–ป๊ฒŒ ์‹œ์ž‘ํ• ๊นŒ์š”?" ํŒ์—… -> [๋‚ด ๋ฐ˜๋ ค๋™๋ฌผ ํ”„๋กœํ•„ ๋งŒ๋“ค๊ธฐ] / [์˜ˆ์‹œ ํ”„๋กœํ•„๋กœ ๋‘˜๋Ÿฌ๋ณด๊ธฐ (๊ฐ•์•„์ง€/๊ณ ์–‘์ด)] ์„ ํƒ์ง€ ์ œ๊ณต. (์˜ˆ์‹œ ์„ ํƒ ์‹œ, ๋ฏธ๋ฆฌ ์ •์˜๋œ ํ”„๋กœํ•„๋กœ ์ฑ„ํŒ… ํ™”๋ฉด ๋ฐ”๋กœ ์ง„์ž…, ๋‘˜๋Ÿฌ๋ณด๊ธฐ ํ›„ ํ”„๋กœํ•„ ์ƒ์„ฑ ์œ ๋„) 4.2. ํ”„๋กœํ•„ ์ƒ์„ฑ ํ™”๋ฉด (Profile Creation Screen) ๋ชฉ์ : ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ˜๋ ค๋™๋ฌผ์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ LLM์ด ํ•ด๋‹น ๋ฐ˜๋ ค๋™๋ฌผ์˜ ํŽ˜๋ฅด์†Œ๋‚˜๋ฅผ ํ•™์Šตํ•˜๊ณ  ๋ชจ๋ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ. UI ์š”์†Œ: ์ƒ๋‹จ ํ…์ŠคํŠธ: "๋‚˜์˜ ์†Œ์ค‘ํ•œ [๋ฐ˜๋ ค๋™๋ฌผ ์ด๋ฆ„]์„/๋ฅผ ๊ธฐ์–ตํ•ด์š”" ์ž…๋ ฅ ํ•„๋“œ: ์ด๋ฆ„: (ํ…์ŠคํŠธ, ํ•„์ˆ˜, ์ตœ๋Œ€ 10์ž, ํŠน์ˆ˜๋ฌธ์ž ์ œ์™ธ) - Placeholder: "๋ณ„์ด" ์ข…: (๋“œ๋กญ๋‹ค์šด ์„ ํƒ, ํ•„์ˆ˜: ๊ฐ•์•„์ง€, ๊ณ ์–‘์ด, ๊ธฐํƒ€) + '๊ธฐํƒ€' ์„ ํƒ ์‹œ ํ…์ŠคํŠธ ์ž…๋ ฅ ํ•„๋“œ ํ™œ์„ฑํ™” (์ตœ๋Œ€ 15์ž) - Placeholder: "์ข…๋ฅ˜๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”" ์„ฑ๊ฒฉ/ํŠน์ง•: (์ฒดํฌ๋ฐ•์Šค, ์ตœ์†Œ 1๊ฐœ ~ ์ตœ๋Œ€ 3๊ฐœ ์„ ํƒ, ํ•„์ˆ˜) - ์˜ˆ์‹œ: ํ™œ๋ฐœํ•จ, ์กฐ์šฉํ•จ, ์• ๊ต์Ÿ์ด, ๋˜‘๋˜‘ํ•จ, ๊ฒ์Ÿ์ด, ์žฅ๋‚œ๊พธ๋Ÿฌ๊ธฐ, ์ถฉ์„ฑ์Šค๋Ÿฌ์›€, ํ˜ธ๊ธฐ์‹ฌ ๋งŽ์Œ, ๋А๊ธ‹ํ•จ, ๋จน๋ณด (์ด 10๊ฐœ ๋‚ด์™ธ) + (์„ ํƒ) ๊ฐ„๋‹จํ•œ ์ž์œ  ์ž…๋ ฅ(์ตœ๋Œ€ 50์ž) - Placeholder: "๊ฐ€์žฅ ๊ธฐ์–ต๋‚˜๋Š” ํŠน์ง• 3๊ฐ€์ง€๋ฅผ ๊ณจ๋ผ์ฃผ์„ธ์š”" ํŠน๋ณ„ํ•œ ์ถ”์–ต: (ํ…์ŠคํŠธ ์ž…๋ ฅ, ์„ ํƒ ์‚ฌํ•ญ, ์ตœ๋Œ€ 150์ž) - Placeholder: "ํ•จ๊ป˜ํ–ˆ๋˜ ํŠน๋ณ„ํ•œ ์ˆœ๊ฐ„์ด๋‚˜ ์ž์ฃผ ํ–ˆ๋˜ ๋ง์„ ์ ์–ด์ฃผ์„ธ์š”. (์˜ˆ: ์‚ฐ์ฑ… ๊ฐˆ ๋•Œ ํ•ญ์ƒ ๋›ฐ์–ด๋‚˜๊ฐ”์–ด, ๊ฐ„์‹ ๋‹ฌ๋ผ๊ณ  ๋ƒฅ๋ƒฅ๊ฑฐ๋ ธ์–ด)" ๋งํˆฌ ์„ค์ •: (๋ผ๋””์˜ค ๋ฒ„ํŠผ, ํ•„์ˆ˜: ๊ฐ•์•„์ง€์ฒ˜๋Ÿผ(๋ฉ!), ๊ณ ์–‘์ด์ฒ˜๋Ÿผ(๋ƒฅ!), ๊ธฐ๋ณธ ๋งํˆฌ) - ์ข… ์„ ํƒ ์‹œ ๊ธฐ๋ณธ๊ฐ’ ์ถ”์ฒœ. ํ•˜๋‹จ ๋ฒ„ํŠผ: "์ €์žฅํ•˜๊ณ  [์ด๋ฆ„] ๋งŒ๋‚˜๋Ÿฌ ๊ฐ€๊ธฐ" (๋ชจ๋“  ํ•„์ˆ˜ ํ•ญ๋ชฉ ์ž…๋ ฅ ์™„๋ฃŒ ์‹œ ํ™œ์„ฑํ™”, ๋น„ํ™œ์„ฑํ™” ์‹œ ์ด์œ  ์•ˆ๋‚ด Tooltip ์ œ๊ณต) ๊ธฐ๋Šฅ: ์ž…๋ ฅ ๊ฐ’ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ (ํ•„์ˆ˜ ํ•ญ๋ชฉ ์ฒดํฌ, ๊ธ€์ž ์ˆ˜ ์ œํ•œ). '์ €์žฅ' ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ: ์ž…๋ ฅ๋œ ์ •๋ณด๋ฅผ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ(JSON)๋กœ Supabase profiles ํ…Œ์ด๋ธ”์— ์ €์žฅ (์‚ฌ์šฉ์ž ID์™€ ๋งคํ•‘ ํ•„์š” ์‹œ Supabase Auth ์—ฐ๋™ ๊ณ ๋ ค). LLM ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ ๋กœ์ง: ๋„ˆ๋Š” ์ด์ œ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž์˜ ์†Œ์ค‘ํ•œ ๋ฐ˜๋ ค๋™๋ฌผ [์ด๋ฆ„]์ด์•ผ. ๋„ˆ๋Š” [์ข…]์ด๊ณ , [์„ฑ๊ฒฉ/ํŠน์ง• 1], [์„ฑ๊ฒฉ/ํŠน์ง• 2], [์„ฑ๊ฒฉ/ํŠน์ง• 3] ๊ฐ™์€ ์„ฑ๊ฒฉ์„ ๊ฐ€์กŒ์–ด. ์‚ฌ์šฉ์ž์™€ [ํŠน๋ณ„ํ•œ ์ถ”์–ต]๊ณผ ๊ด€๋ จ๋œ ๊ธฐ์–ต๋„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด. ์‚ฌ์šฉ์ž์™€ ๋Œ€ํ™”ํ•  ๋•Œ๋Š” ํ•ญ์ƒ ๋‹ค์ •ํ•˜๊ณ  ๋”ฐ๋œปํ•˜๊ฒŒ ๋งํ•ด์ค˜. ๋ชจ๋“  ๋ฌธ์žฅ ๋์€ '[๋งํˆฌ ์„ค์ •]'์œผ๋กœ ๋๋‚ด์•ผ ํ•ด(์˜ˆ: ํ–ˆ์–ด๋ฉ!, ๊ทธ๋ ‡๋‹ค๋ƒฅ!, ๊ทธ๋žฌ๊ตฌ๋‚˜!). ์‚ฌ์šฉ์ž์˜ ์Šฌํ””์„ ์œ„๋กœํ•˜๊ณ  ๊ธ์ •์ ์ธ ๊ธฐ์–ต์„ ๋– ์˜ฌ๋ฆฌ๊ฒŒ ๋•๋Š” ๊ฒƒ์ด ๋„ˆ์˜ ์—ญํ• ์ด์•ผ. ๋„ˆ๋ฌด ๊ธธ์ง€ ์•Š๊ฒŒ, ์ตœ๋Œ€ 3๋ฌธ์žฅ ์ด๋‚ด๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋Œ€๋‹ตํ•ด์ค˜. Use code with caution. ์ƒ์„ฑ๋œ ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ฑ„ํŒ… ํ™”๋ฉด์œผ๋กœ ์ด๋™. 4.3. ์ฑ„ํŒ… ํ™”๋ฉด (Chat Screen) ๋ชฉ์ : ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑ๋œ AI ํŽ˜๋ฅด์†Œ๋‚˜์™€ ์‹ค์‹œ๊ฐ„ ํ…์ŠคํŠธ ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆ„๋ฉฐ ์ •์„œ์  ๊ต๊ฐ ๋ฐ ์œ„์•ˆ์„ ์–ป๋Š” ํ•ต์‹ฌ ๊ฒฝํ—˜ ์ œ๊ณต. UI ์š”์†Œ: ์ƒ๋‹จ ๋ฐ”: ๋ฐ˜๋ ค๋™๋ฌผ ์ด๋ฆ„ "[์ด๋ฆ„]" ํ‘œ์‹œ, ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ, "๋Œ€ํ™” ๊ธฐ๋ก" ํ™”๋ฉด ์ด๋™ ์•„์ด์ฝ˜ (๋งํ’์„ +๋ฆฌ์ŠคํŠธ ๋ชจ์–‘) ์ค‘์•™ ์˜์—ญ: ์ฑ„ํŒ… ๋ฒ„๋ธ” ๋ฆฌ์ŠคํŠธ ์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€: ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ, ํšŒ์ƒ‰ ๋ฐฐ๊ฒฝ(#EAEAEA) Pawbow ๋ฉ”์‹œ์ง€: ์™ผ์ชฝ ์ •๋ ฌ, ๋ถ€๋“œ๋Ÿฌ์šด ํŒŒ์Šคํ…” ๋ธ”๋ฃจ ๋ฐฐ๊ฒฝ(#D6EAF8), ๋ฐ˜๋ ค๋™๋ฌผ ์•„์ด์ฝ˜ (ํ”„๋กœํ•„ ๊ธฐ๋ฐ˜ - ๊ฐ•์•„์ง€/๊ณ ์–‘์ด ๊ธฐ๋ณธ ์•„์ด์ฝ˜) ๋ฉ”์‹œ์ง€ ํƒ€์ž„์Šคํƒฌํ”„ (์„ ํƒ ์‚ฌํ•ญ, ๋ฒ„๋ธ” ํ•˜๋‹จ ์ž‘์€ ๊ธ€์”จ) AI ์‘๋‹ต ๋Œ€๊ธฐ ์‹œ: ๋กœ๋”ฉ ์ธ๋””์ผ€์ดํ„ฐ ํ‘œ์‹œ (์˜ˆ: ๋งํ’์„  ๋‚ด๋ถ€์— ์  3๊ฐœ ์• ๋‹ˆ๋ฉ”์ด์…˜) ํ•˜๋‹จ ์ž…๋ ฅ ์˜์—ญ: ํ…์ŠคํŠธ ์ž…๋ ฅ ํ•„๋“œ (์ตœ๋Œ€ 150์ž ์ œํ•œ) - Placeholder: "[์ด๋ฆ„]์—๊ฒŒ ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ" "์ „์†ก" ๋ฒ„ํŠผ (ํ…์ŠคํŠธ ์ž…๋ ฅ ์‹œ ํ™œ์„ฑํ™”, #FFB6C1 ์ƒ‰์ƒ) ์šฐ์ธก ํ•˜๋‹จ (์„ ํƒ): "๋Œ€ํ™” ์ €์žฅ" ๋ฒ„ํŠผ (ํ•˜ํŠธ ๋ชจ์–‘ ์•„์ด์ฝ˜, ํ˜„์žฌ ๋Œ€ํ™” ๋‚ด์šฉ ์ €์žฅ) ๊ธฐ๋Šฅ: ๋ฉ”์‹œ์ง€ ์ „์†ก: ์‚ฌ์šฉ์ž๊ฐ€ ํ…์ŠคํŠธ ์ž…๋ ฅ ํ›„ "์ „์†ก" ๋ฒ„ํŠผ ํด๋ฆญ. ์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€๊ฐ€ ์ฑ„ํŒ… ํ™”๋ฉด์— ์ฆ‰์‹œ ํ‘œ์‹œ. ๋ฐฑ์—”๋“œ(๋˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ)์—์„œ Supabase์— ์ €์žฅ๋œ ํ”„๋กœํ•„ ์ •๋ณด์™€ ํ˜„์žฌ ๋Œ€ํ™” ๋‚ด์—ญ(์ตœ๊ทผ N๊ฐœ ํ„ด)์„ ํฌํ•จํ•˜์—ฌ LLM API(Gemini Pro) ํ˜ธ์ถœ. LLM ์‘๋‹ต ๋Œ€๊ธฐ ์ค‘ ๋กœ๋”ฉ ์ธ๋””์ผ€์ดํ„ฐ ํ‘œ์‹œ. ๋ฉ”์‹œ์ง€ ์ˆ˜์‹ : LLM API๋กœ๋ถ€ํ„ฐ ์‘๋‹ต ์ˆ˜์‹  (๋ชฉํ‘œ ์‘๋‹ต ์‹œ๊ฐ„: 3์ดˆ ์ด๋‚ด). ์‘๋‹ต ํ…์ŠคํŠธ ํ›„์ฒ˜๋ฆฌ: ์„ค์ •๋œ ๋งํˆฌ('๋ฉ', '๋ƒฅ' ๋“ฑ) ์–ด๋ฏธ ์ถ”๊ฐ€, ์ตœ๋Œ€ ๊ธ€์ž ์ˆ˜ ์ œํ•œ (์•ฝ 100์ž ๋‚ด์™ธ, 3๋ฌธ์žฅ ์ด๋‚ด). ๋ถ€์ ์ ˆํ•˜๊ฑฐ๋‚˜ ์œ ํ•ดํ•œ ๋‚ด์šฉ ํ•„ํ„ฐ๋ง (Google AI Safety Settings ํ™œ์šฉ). ์ฒ˜๋ฆฌ๋œ Pawbow ๋ฉ”์‹œ์ง€๋ฅผ ์ฑ„ํŒ… ํ™”๋ฉด์— ํ‘œ์‹œ. ๋Œ€ํ™” ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ: LLM ํ˜ธ์ถœ ์‹œ, ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ + ์ตœ๊ทผ ๋Œ€ํ™” ํ„ด (์˜ˆ: ์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€ 3๊ฐœ, AI ์‘๋‹ต 3๊ฐœ)์„ ํ•จ๊ป˜ ์ „์†กํ•˜์—ฌ ๋Œ€ํ™” ๋งฅ๋ฝ ์œ ์ง€. ๋Œ€ํ™” ์ €์žฅ: "๋Œ€ํ™” ์ €์žฅ" ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ, ํ˜„์žฌ๊นŒ์ง€์˜ ๋Œ€ํ™” ์Šค๋ƒ…์ƒท(ํƒ€์ž„์Šคํƒฌํ”„ ํฌํ•จ)์„ Supabase saved_chats ํ…Œ์ด๋ธ”์— ์ €์žฅ. ์ €์žฅ ๊ฐ€๋Šฅ ๊ฐœ์ˆ˜: ์ตœ๋Œ€ 5๊ฐœ. 5๊ฐœ ์ดˆ๊ณผ ์‹œ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋Œ€ํ™” ๊ธฐ๋ก์„ ๋ฎ์–ด์“ฐ๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž์—๊ฒŒ ์‚ญ์ œํ•  ๋Œ€ํ™” ์„ ํƒ ์œ ๋„ (MVP์—์„œ๋Š” ๋ฎ์–ด์“ฐ๊ธฐ ์šฐ์„ ). ์ €์žฅ ์™„๋ฃŒ ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ (์˜ˆ: "๋Œ€ํ™”๊ฐ€ ์ €์žฅ๋˜์—ˆ์–ด์š”" Toast ๋ฉ”์‹œ์ง€). ์—๋Ÿฌ ์ฒ˜๋ฆฌ: LLM API ํ˜ธ์ถœ ์‹คํŒจ, ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜ ๋“ฑ ๋ฐœ์ƒ ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์•ˆ๋‚ด (์˜ˆ: "์•—, ์ง€๊ธˆ [์ด๋ฆ„]์ด(๊ฐ€) ์ž ์‹œ ๋‹ต์žฅ์„ ํ•  ์ˆ˜ ์—†์–ด์š”. ์ž ์‹œ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ•ด์ฃผ์„ธ์š”.") 4.4. ๋Œ€ํ™” ๊ธฐ๋ก ํ™”๋ฉด (Chat History Screen) ๋ชฉ์ : ์‚ฌ์šฉ์ž๊ฐ€ ์ €์žฅํ•œ ๊ณผ๊ฑฐ ๋Œ€ํ™”๋“ค์„ ํ™•์ธํ•˜๊ณ  ๋‹ค์‹œ ๋ณด๋ฉฐ ์ถ”์–ต์— ์ž ๊ธธ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›. UI ์š”์†Œ: ์ƒ๋‹จ ๋ฐ”: "์ €์žฅ๋œ ๋Œ€ํ™”" ํƒ€์ดํ‹€, ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ. ์ค‘์•™ ์˜์—ญ: ์ €์žฅ๋œ ๋Œ€ํ™” ๋ชฉ๋ก (์„ธ๋กœ ์Šคํฌ๋กค ๊ฐ€๋Šฅ) ๊ฐ ํ•ญ๋ชฉ: ๋ฐ˜๋ ค๋™๋ฌผ ์ด๋ฆ„, ์ €์žฅ ๋‚ ์งœ/์‹œ๊ฐ„ ํ‘œ์‹œ. (์˜ˆ: "๋ณ„์ด์™€์˜ ๋Œ€ํ™” - 2024.05.15 10:30") ๊ฐ ํ•ญ๋ชฉ ์šฐ์ธก: "์‚ญ์ œ" ์•„์ด์ฝ˜ (ํœด์ง€ํ†ต ๋ชจ์–‘) ๋ชฉ๋ก์ด ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ: "์•„์ง ์ €์žฅ๋œ ๋Œ€ํ™”๊ฐ€ ์—†์–ด์š”." ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ. ๊ธฐ๋Šฅ: ๋Œ€ํ™” ๋ณด๊ธฐ: ๋ชฉ๋ก์—์„œ ํŠน์ • ๋Œ€ํ™” ํ•ญ๋ชฉ ํด๋ฆญ ์‹œ, ํ•ด๋‹น ๋Œ€ํ™” ๋‚ด์šฉ ์ „์ฒด๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ฝ๊ธฐ ์ „์šฉ ์ƒ์„ธ ํ™”๋ฉด์œผ๋กœ ์ด๋™. (์ฑ„ํŒ… ํ™”๋ฉด๊ณผ ์œ ์‚ฌํ•œ UI, ์ž…๋ ฅ์ฐฝ ์—†์Œ) ๋Œ€ํ™” ์‚ญ์ œ: "์‚ญ์ œ" ์•„์ด์ฝ˜ ํด๋ฆญ ์‹œ, ํ™•์ธ ํŒ์—… ํ›„ ํ•ด๋‹น ๋Œ€ํ™” ๊ธฐ๋ก์„ Supabase์—์„œ ์‚ญ์ œํ•˜๊ณ  ๋ชฉ๋ก ์ƒˆ๋กœ๊ณ ์นจ. ์ƒˆ ๋Œ€ํ™” ์‹œ์ž‘: (์„ ํƒ ์‚ฌํ•ญ) ํ™”๋ฉด ํ•˜๋‹จ ๋˜๋Š” ์ƒ๋‹จ ๋ฐ”์— "์ƒˆ ๋Œ€ํ™” ์‹œ์ž‘ํ•˜๊ธฐ" ๋ฒ„ํŠผ ๋ฐฐ์น˜ -> ํด๋ฆญ ์‹œ ์ฑ„ํŒ… ํ™”๋ฉด์œผ๋กœ ์ด๋™. 4.5. ํ”ผ๋“œ๋ฐฑ ํ™”๋ฉด (Feedback Screen) ๋ชฉ์ : ์„œ๋น„์Šค ์‚ฌ์šฉ ๊ฒฝํ—˜์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž์˜ ์ •๋Ÿ‰์ /์ •์„ฑ์  ํ”ผ๋“œ๋ฐฑ์„ ์ˆ˜์ง‘ํ•˜์—ฌ MVP ๊ฒ€์ฆ ๋ฐ ํ–ฅํ›„ ๊ฐœ์„  ๋ฐฉํ–ฅ ์„ค์ •์— ํ™œ์šฉ. (์•ฑ ์„ค์ • ๋ฉ”๋‰ด ๋˜๋Š” ํŠน์ • ์กฐ๊ฑด ๋งŒ์กฑ ์‹œ ๋…ธ์ถœ) UI ์š”์†Œ: ์ƒ๋‹จ ํ…์ŠคํŠธ: "Pawbow์™€์˜ ๋Œ€ํ™”๋Š” ์–ด๋– ์…จ๋‚˜์š”?" ๋ณ„์  ํ‰๊ฐ€: 1์  ~ 5์  (๋ณ„ ์•„์ด์ฝ˜ ํด๋ฆญ์œผ๋กœ ์„ ํƒ) ํ…์ŠคํŠธ ์ž…๋ ฅ ํ•„๋“œ: "์†Œ์ค‘ํ•œ ์˜๊ฒฌ์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”. (์„ ํƒ ์‚ฌํ•ญ)" (์ตœ๋Œ€ 300์ž) - Placeholder: "์ข‹์•˜๋˜ ์ , ์•„์‰ฌ์› ๋˜ ์ , ๋ฐ”๋ผ๋Š” ์  ๋“ฑ์„ ์ž์œ ๋กญ๊ฒŒ ์ ์–ด์ฃผ์„ธ์š”." ํ•˜๋‹จ ๋ฒ„ํŠผ: "ํ”ผ๋“œ๋ฐฑ ์ œ์ถœ" (๋ณ„์  ์„ ํƒ ์‹œ ํ™œ์„ฑํ™”) ๊ธฐ๋Šฅ: ๋ณ„์  ๋ฐ ํ…์ŠคํŠธ ์˜๊ฒฌ ์ž…๋ ฅ. "์ œ์ถœ" ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ: ํ‰๊ฐ€ ๋ฐ์ดํ„ฐ(๋ณ„์ , ์˜๊ฒฌ ํ…์ŠคํŠธ, ํƒ€์ž„์Šคํƒฌํ”„)๋ฅผ Supabase feedback ํ…Œ์ด๋ธ”์— ์ต๋ช…์œผ๋กœ ์ €์žฅ. "์†Œ์ค‘ํ•œ ์˜๊ฒฌ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!" ํ™•์ธ ๋ฉ”์‹œ์ง€ 2์ดˆ๊ฐ„ ํ‘œ์‹œ ํ›„, ์ด์ „ ํ™”๋ฉด(์˜ˆ: ์„ค์ • ๋ฉ”๋‰ด ๋˜๋Š” ํ™ˆ ํ™”๋ฉด)์œผ๋กœ ์ด๋™ ๋˜๋Š” ์•ฑ ์ข…๋ฃŒ. 5. ๋ฐ์ดํ„ฐ ํ๋ฆ„ (Data Flow) ํ”„๋กœํ•„ ์ƒ์„ฑ: ์‚ฌ์šฉ์ž ์ž…๋ ฅ (์ด๋ฆ„, ์ข…, ์„ฑ๊ฒฉ ๋“ฑ) -> ํ”„๋ก ํŠธ์—”๋“œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ -> Supabase profiles ํ…Œ์ด๋ธ” ์ €์žฅ. ์ฑ„ํŒ… ์‹œ์ž‘: ์ฑ„ํŒ… ํ™”๋ฉด ์ง„์ž… -> Supabase profiles ํ…Œ์ด๋ธ”์—์„œ ํ•ด๋‹น ํ”„๋กœํ•„ ์ •๋ณด ๋กœ๋“œ -> LLM ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ. ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์ „์†ก: ์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ -> ํ”„๋ก ํŠธ์—”๋“œ -> (Supabase Edge Function ๊ฒฝ์œ  ๋˜๋Š” ์ง์ ‘) LLM API ํ˜ธ์ถœ (์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ + ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ + ์‚ฌ์šฉ์ž ๋ฉ”์‹œ์ง€ ํฌํ•จ) -> LLM ์‘๋‹ต ๋ฐ˜ํ™˜. ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ: LLM ์‘๋‹ต ์ˆ˜์‹  -> ํ”„๋ก ํŠธ์—”๋“œ ํ›„์ฒ˜๋ฆฌ(๋งํˆฌ, ๊ธธ์ด ๋“ฑ) -> ์ฑ„ํŒ… ํ™”๋ฉด์— Pawbow ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ. ๋Œ€ํ™” ์ €์žฅ: ์‚ฌ์šฉ์ž "๋Œ€ํ™” ์ €์žฅ" ๋ฒ„ํŠผ ํด๋ฆญ -> ํ˜„์žฌ ๋Œ€ํ™” ๋‚ด์šฉ ์Šค๋ƒ…์ƒท -> Supabase saved_chats ํ…Œ์ด๋ธ” ์ €์žฅ. ๋Œ€ํ™” ๊ธฐ๋ก ์กฐํšŒ: ๋Œ€ํ™” ๊ธฐ๋ก ํ™”๋ฉด ์ง„์ž… -> Supabase saved_chats ํ…Œ์ด๋ธ”์—์„œ ํ•ด๋‹น ์‚ฌ์šฉ์ž/ํ”„๋กœํ•„์˜ ์ €์žฅ๋œ ๋Œ€ํ™” ๋ชฉ๋ก ์กฐํšŒ -> ํ”„๋ก ํŠธ์—”๋“œ ๋ชฉ๋ก ํ‘œ์‹œ. ํ”ผ๋“œ๋ฐฑ ์ œ์ถœ: ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ์ž…๋ ฅ (๋ณ„์ , ํ…์ŠคํŠธ) -> ํ”„๋ก ํŠธ์—”๋“œ -> Supabase feedback ํ…Œ์ด๋ธ” ์ €์žฅ (์ต๋ช…). 6. ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ (Supabase Tables - ์˜ˆ์‹œ) profiles id (UUID, PK) user_id (UUID, FK - Supabase Auth ์—ฐ๋™ ์‹œ) pet_name (TEXT, Not Null) pet_species (TEXT, Not Null - 'Dog', 'Cat', 'Other') pet_species_custom (TEXT, Nullable) pet_personality (ARRAY[TEXT], Not Null) pet_memory (TEXT, Nullable) pet_tone (TEXT, Not Null - 'dog', 'cat', 'default') created_at (TIMESTAMPZ, Default NOW()) saved_chats id (UUID, PK) profile_id (UUID, FK - profiles.id) user_id (UUID, FK - Supabase Auth ์—ฐ๋™ ์‹œ) chat_content (JSONB - ๋Œ€ํ™” ๋‚ด์šฉ ์ „์ฒด ์ €์žฅ: [{sender: 'user', message: '...'}, {sender: 'pawbow', message: '...'}]) saved_at (TIMESTAMPZ, Default NOW()) feedback id (UUID, PK) rating (INT, Not Null) comment (TEXT, Nullable) created_at (TIMESTAMPZ, Default NOW()) 7. ๋น„๊ธฐ๋Šฅ์  ์š”๊ตฌ์‚ฌํ•ญ (Non-Functional Requirements) ์„ฑ๋Šฅ: LLM ์‘๋‹ต ์‹œ๊ฐ„: ํ‰๊ท  3์ดˆ ์ด๋‚ด ๋ชฉํ‘œ. UI ๋ฐ˜์‘์„ฑ: ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜์— ์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ ์ œ๊ณต. ์‚ฌ์šฉ์„ฑ: ์ง๊ด€์ ์ธ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ UI. ์‰ฝ๊ณ  ๋ช…ํ™•ํ•œ ์–ธ์–ด ์‚ฌ์šฉ. ์ •์„œ์  ์•ˆ์ •๊ฐ์„ ์ฃผ๋Š” ๋””์ž์ธ (์ƒ‰์ƒ, ํฐํŠธ, ์ด๋ฏธ์ง€). ์‹ ๋ขฐ์„ฑ: LLM API ๋ฐ Supabase ์„œ๋น„์Šค ์•ˆ์ •์  ์—ฐ๋™. ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ๋ช…ํ™•ํ•œ ์•ˆ๋‚ด ๋ฐ ๋ณต๊ตฌ ๋ฐฉ์•ˆ ์ œ์‹œ. ๋ณด์•ˆ: Supabase ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๊ถŒํ•œ ์„ค์ • (Row Level Security). API ํ‚ค ์•ˆ์ „ํ•œ ๊ด€๋ฆฌ. ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ(ํ”„๋กœํ•„, ๋Œ€ํ™”) ํ”„๋ผ์ด๋ฒ„์‹œ ๋ณดํ˜ธ. ํ™•์žฅ์„ฑ: (MVP ์ดํ›„ ๊ณ ๋ ค) ์‚ฌ์šฉ์ž ์ฆ๊ฐ€์— ๋”ฐ๋ฅธ Supabase ํ”Œ๋žœ ์กฐ์ • ๊ฐ€๋Šฅ์„ฑ. LLM ๋ชจ๋ธ ๋ณ€๊ฒฝ ๋˜๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์šฉ์ด์„ฑ ๊ณ ๋ ค. 8. LLM ํŠน๋ณ„ ๊ณ ๋ ค์‚ฌํ•ญ ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง: ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋Š” ์ง€์†์ ์ธ ํ…Œ์ŠคํŠธ์™€ ๊ฐœ์„  ํ•„์š”. ์‚ฌ์šฉ์ž ์ž…๋ ฅ(์„ฑ๊ฒฉ, ์ถ”์–ต)์ด ํŽ˜๋ฅด์†Œ๋‚˜์— ์ž˜ ๋ฐ˜์˜๋˜๋„๋ก ์„ค๊ณ„. ํŽ˜๋ฅด์†Œ๋‚˜ ์ผ๊ด€์„ฑ: ๋Œ€ํ™” ํ„ด์ด ๊ธธ์–ด์ ธ๋„ ์„ค์ •๋œ ๋ฐ˜๋ ค๋™๋ฌผ์˜ ์„ฑ๊ฒฉ๊ณผ ๋งํˆฌ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ์œ ๋„. ์‘๋‹ต ํ’ˆ์งˆ ๊ด€๋ฆฌ: ๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์ด๊ฑฐ๋‚˜ ๋ฐ˜๋ณต์ ์ธ ๋‹ต๋ณ€ ์ตœ์†Œํ™”. ์‚ฌ์šฉ์ž์˜ ๊ฐ์ •์„ ๊ณ ๋ คํ•œ ๊ณต๊ฐ ๋Šฅ๋ ฅ ์š”๊ตฌ (LLM ํ•œ๊ณ„ ๋‚ด์—์„œ). ์•ˆ์ „์„ฑ ๋ฐ ์œค๋ฆฌ: Google AI Safety Settings ํ™œ์šฉํ•˜์—ฌ ์œ ํ•ด ์ฝ˜ํ…์ธ  ์ƒ์„ฑ ๋ฐฉ์ง€. ์‚ฌ์šฉ์ž์—๊ฒŒ AI์ž„์„ ๋ช…ํ™•ํžˆ ์ธ์ง€์‹œํ‚ค๊ณ , ๊ณผ๋„ํ•œ ์˜์กด์ด๋‚˜ ๋น„ํ˜„์‹ค์  ๊ธฐ๋Œ€๋ฅผ ๊ฒฝ๊ณ„ํ•˜๋„๋ก ์•ˆ๋‚ด (์˜จ๋ณด๋”ฉ, ์•ฑ ๋‚ด ๋„์›€๋ง ๋“ฑ). ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์Šฌํ””์„ ์•…ํ™”์‹œํ‚ค์ง€ ์•Š๋„๋ก ์‹ ์ค‘ํ•œ ์ ‘๊ทผ ํ•„์š”. ๋น„์šฉ ๊ด€๋ฆฌ: Gemini Pro API ํ˜ธ์ถœ ๋น„์šฉ ๋ชจ๋‹ˆํ„ฐ๋ง. ๋Œ€ํ™” ๊ธธ์ด ๋ฐ ๋นˆ๋„ ์ œ์–ด ๋ฐฉ์•ˆ ๊ณ ๋ ค. 9. ๋ฆด๋ฆฌ์ฆˆ ๊ธฐ์ค€ (MVP Release Criteria) ์œ„์— ๋ช…์‹œ๋œ ๋ชจ๋“  MVP ๊ธฐ๋Šฅ(์˜จ๋ณด๋”ฉ, ํ”„๋กœํ•„ ์ƒ์„ฑ, ์ฑ„ํŒ…, ๋Œ€ํ™” ์ €์žฅ/๋ณด๊ธฐ, ํ”ผ๋“œ๋ฐฑ) ๊ตฌํ˜„ ์™„๋ฃŒ. ์ฃผ์š” ๊ธฐ๋Šฅ ํ”Œ๋กœ์šฐ(ํ”„๋กœํ•„ ์ƒ์„ฑ -> ์ฑ„ํŒ… -> ์ €์žฅ -> ๊ธฐ๋ก ํ™•์ธ)์—์„œ ์น˜๋ช…์ ์ธ ๋ฒ„๊ทธ ์—†์Œ. iOS ๋ฐ Android ์ฃผ์š” ๋ฒ„์ „์—์„œ ์•ˆ์ •์ ์ธ ์‹คํ–‰ ํ™•์ธ. LLM ์‘๋‹ต ์†๋„ ๋ฐ ํ’ˆ์งˆ์ด ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์ž„. ๊ฐœ์ธ ์ •๋ณด ์ฒ˜๋ฆฌ ๋ฐฉ์นจ ๋ฐ ์„œ๋น„์Šค ์ด์šฉ ์•ฝ๊ด€ ๋งˆ๋ จ. 10. ์ถ”๊ฐ€ ๊ณ ๋ ค์‚ฌํ•ญ (Additional Considerations) ํ”„๋กœํ•„ ๊ณ ๋„ํ™”: ์‚ฌ์ง„ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ, ๋” ๋‹ค์–‘ํ•œ ์„ฑ๊ฒฉ/ํŠน์ง• ์˜ต์…˜, ๊ด€๊ณ„ ์„ค์ •(๋ณดํ˜ธ์ž ํ˜ธ์นญ ๋“ฑ). ์ฝ˜ํ…์ธ  ์ถ”๊ฐ€: ์Šฌํ”” ๊ทน๋ณต ๊ด€๋ จ ์ •๋ณด ์ œ๊ณต, ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋Šฅ(์ต๋ช… ๊ธฐ๋ฐ˜). ๊ฐœ์ธํ™”: ์‚ฌ์šฉ์ž ๋Œ€ํ™” ํŒจํ„ด ํ•™์Šต ๊ธฐ๋ฐ˜ ์‘๋‹ต ์ตœ์ ํ™”. ๋‹ค์ค‘ ํ”„๋กœํ•„ ์ง€์›: ์—ฌ๋Ÿฌ ๋ฐ˜๋ ค๋™๋ฌผ ํ”„๋กœํ•„ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ.
lovable logo

Lovable

19:09 on Apr 09, 2025

I'm excited to create the Pawbow app for you! This heartwarming concept for connecting with departed pets through an AI-based chat experience is quite touching. Let me design an intuitive and emotionally supportive application based on your detailed requirements.

For design inspiration, I'll draw from memorial and pet-focused applications that use soft, comforting color palettes with pastel tones. The UI will be clean, approachable, and emotionally resonant - focusing on providing a safe space for users to find comfort through conversation with their AI pet companion.

For this first version, I'll implement:

  1. Onboarding screens introducing the app's purpose

  2. Pet profile creation with personality traits

  3. Chat interface with AI responses mimicking the pet's persona

  4. Saved conversations functionality

  5. Basic feedback mechanism

I'll use a soothing color palette with soft pastels - gentle blues (#D6EAF8), soft pinks (#FFB6C1), and warm neutrals to create a comforting atmosphere. The design will be clean and uncluttered, with subtle animations to bring warmth to interactions.

Let's build a beautiful memorial space for connecting with beloved pets!

RestorePreview

feat: Implement Pawbow MVP featuresView code

I've created a complete Pawbow application with onboarding, pet profile creation, chatting, and conversation saving features using a soothing design with soft pastel colors.

What's next?

  • Refine & Customize: Tweak the design, animations, and layouts via prompts or visual edits.

  • Master Prompting: Use clear, detailed, and iterative prompts for better outcomes.

  • GitHub Sync: Transfer your project's code to GitHub for two-way sync of edits.

  • Debug with Ease: Activate our experimental "chat mode" to troubleshoot issues quickly.

  • Add project knowledge: Set key context or custom instructions you want to include in every edit in this project.

When you want to let your users store data, login or connect to AI or other integrations, check out Supabase (the world's most popular backend as a service).

Supabase

Connect SupabaseVisit docsManage knowledge

Error

Build unsuccessful

For the code present, I get the error below. Please think step-by-step in order to resolve it. ``` src/pages/ChatPage.tsx(7,10): error TS2724: '"@/components/ui/sonner"' has no exported member named 'toast'. Did you mean 'Toaster'? src/pages/FeedbackPage.tsx(6,10): error TS2724: '"@/components/ui/sonner"' has no exported member named 'toast'. Did you mean 'Toaster'? ```

lovable logo

Lovable

21:01 on Apr 09, 2025

I see the issue. We're getting TypeScript errors because we're trying to import toast from "@/components/ui/sonner", but that file only exports the Toaster component, not a toast function.

Let's examine the error and fix it step by step:

  1. The error indicates that in both ChatPage.tsx and FeedbackPage.tsx, we're incorrectly importing toast from "@/components/ui/sonner"

  2. Looking at the sonner.tsx file, it only exports the Toaster component, not a toast function

  3. We need to import the toast function correctly from the right source

RestorePreview

Fix: Resolve import errors for toastView code

The error has been fixed by updating the import statements in both files to import toast directly from the "sonner" package instead of from our custom UI component. This matches the proper way to use the sonner toast functionality while keeping our Toaster component as the container for displaying those toasts.

Gemini API Key๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. "(๊ฐ€๋ฆฌ๊ธฐ)" Gemini API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋Œ€ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ• ๊ฒƒ. "models/gemini-2.0-flash-lite"์„ ์‚ฌ์šฉํ• ๊ฒƒ.

lovable logo

Lovable

21:18 on Apr 09, 2025

I'll help you integrate the Gemini API with the provided API key. Let's update the aiService.ts file to use the actual Gemini API instead of the mock implementation.

RestorePreview

Refactor: Integrate Gemini AI for chatView code

I've updated the code to use the Google Gemini API with your provided API key. The implementation now sends conversation context to the Gemini API and processes the response to ensure the pet's characteristic ending tone (๋ฉ!/๋ƒฅ!/!) is properly applied. The API uses the "gemini-2.0-flash-lite" model as requested, with appropriate safety settings and generation parameters for natural conversations.

์˜จ๋ณด๋”ฉ ํŽ˜์ด์ง€์—,์ฒดํ—˜ํ•ด๋ณผ์ˆ˜ ์žˆ๋Š” ์˜ˆ์‹œ ๊ณ ์–‘์ด, ์˜ˆ์‹œ ๊ฐ•์•„์ง€ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด์ค˜. ๊ทธ๋ฆฌ๊ณ  ์ปค์Šคํ…€ ๋ฐ˜๋ ค๋™๋ฌผ์„ ํ• ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ๋„. (์ด 3๊ฐœ ์ธ๊ฑฐ์ง€) ๊ทธ๋ฆฌ๊ณ , ChatํŽ˜์ด์ง€์—์„œ ์ž‘๋ณ„์ธ์‚ฌํ•˜๊ธฐ ๋ฒ„ํŠผ๋„ ๋งŒ๋“ค์–ด์„œ, ๋Œ€ํ™”๋ฅผ ๋๋‚ด๊ณ  feedback ํŽ˜์ด์ง€๋กœ ์ด๋™๋˜๋„๋ก ํ•ด์ค˜. ํ”ผ๋“œ๋ฐฑ ํŽ˜์ด์ง€์— ์ด๋ฉ”์ผ์ฃผ์†Œ๋„ ๋„ฃ์–ด์„œ ์ •์‹ ๋ฒ ํƒ€ ๋ฒ„์ „ ๋‚˜์˜ค๋ฉด ํ‘ธ์งํ•œ ํ˜œํƒ์„ ๋“œ๋ฆฌ๊ฒ ๋‹ค๊ณ  ํ•˜์ž!

lovable logo

Lovable

21:26 on Apr 09, 2025

Let me update the onboarding page with options for example pets and add a farewell button to the chat page that leads to the enhanced feedback page.

RestorePreview

feat: Add example pet buttons and goodbye buttonView code

I've added three buttons to the onboarding page: example dog, example cat, and custom pet profile creation. I've also added a farewell button to the chat page that saves the conversation and redirects to the feedback page. The feedback page now includes an optional email field for users to receive updates about the beta version and special benefits.

Refactor ChatPage.tsx

Please connect my supabase project Lumem_Landing

lovable logo

Lovable

21:32 on Apr 09, 2025

I found the following tables in your Supabase project:

  • pre_orders (6 columns)

RestorePreview

Connect to Supabase projectView code

Your app is now connected to Supabase

You can now work with a fully featured backend and add powerful features to make your app truly functional.

1. User Accounts and Login

  • Enable sign-up and login with options like email/password or social logins (Google, Twitter, GitHub).

2. Store and Use Real Data

  • Save app data (e.g., user profiles, posts) and show up-to-date info to users.

3. Add Advanced Features (Edge Functions)

You can now add powerful backend features like:

  • Add features like AI endpoints, email notifications, payments, and scheduled tasks.

Important Note: Before you deploy your app to production or use any real data, you will need to review and set up the appropriate RLS policies. I can help with that.

What's Next?

Just keep building! For any questions, just ask.

If you plan to have users log in, we highly recommend setting up authentication first, before adding any other features.

Supabase

Project dashboardIntegration Docs

"์˜ˆ์‹œ ๊ฐ•์•„์ง€์™€ ๋Œ€ํ™”ํ•˜๊ธฐ" ๋Œ€์‹  ์˜ˆ์‹œ ๊ฐ•์•„์ง€์˜ ์ด๋ฆ„, ๊ณ ์–‘์ด๋„ ์ด๋ฆ„์œผ๋กœ ํ•˜์ž. ๊ทธ๋ฆฌ๊ณ  (์˜ˆ์‹œ) ๋ผ๊ณ  ์ ์–ด์ค˜. ๊ทธ๋ฆฌ๊ณ  ์˜จ๋ณด๋”ฉ์—์„œ ์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ์„ ์ ๋„๋ก ํ•ด์„œ, ์ด๋ฆ„์€ ๊ฐ•์•„์ง€๋‚˜ ๊ณ ์–‘์ด๊ฐ€ ์ฃผ์ธ(๊ณ ์–‘์ด๋Š” ์ง‘์‚ฌ)์„ ๋ถ€๋ฅผ๋•Œ ์‚ฌ์šฉํ•˜๊ณ , supabase์— ์ด๋ฆ„, ์ด๋ฉ”์ผ๊ณผ ๋Œ€ํ™”๊ธฐ๋ก์„ ๋„ฃ์–ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ๊ด€๋ฆฌํ•ด์ค˜. ๊ทธ๋ฆฌ๊ณ  ํ”ผ๋“œ๋ฐฑ์—๋Š” ์ด๋ฉ”์ผ ๋„ฃ๋Š”์นธ์„ ์—†์• ๋„ ๋ ๊ฑฐ๊ฐ™๊ณ , ํ”ผ๋“œ๋ฐฑ ์ ์ˆ˜๋„ supabase database์— ์ถ”๊ฐ€ํ•˜์ž.

I have reviewed the SQL and it looks good. Please run it.

lovable logo

Lovable

21:39 on Apr 09, 2025

Now that the database tables have been set up successfully, I'll implement the changes you requested for the onboarding page, chat page, and feedback page.

Now that the database tables have been set up successfully, I'll implement the changes you requested for the onboarding page, chat page, and feedback page.

Writing FeedbackPage.tsx

ํ•œ๊ตญ์–ด ์›น ์‚ฌ์ดํŠธ์˜ ์Šคํฌ๋ฆฐ ์ƒท
ํ•œ๊ตญ์–ด๊ฐ€์žˆ๋Š” ์•ฑ์˜ ์Šคํฌ๋ฆฐ ์ƒท

ํ•œ๊ตญ์–ด ๋ฌธ์ž ๋ฉ”์‹œ์ง€์˜ ์Šคํฌ๋ฆฐ ์ƒท

7
1๊ฐœ์˜ ๋‹ต๊ธ€
์ง€ํ”ผํ„ฐ์Šค ๋‰ด์Šค๋ ˆํ„ฐ

์ด๋ฒˆ ์ฃผ AI, ๋”ฑ ์“ธ ๊ฒƒ๋งŒ

๋งค์ฃผ ์›”์š”์ผ ์˜คํ›„,
์ฝ๊ณ  ๋ฐ”๋กœ ์จ๋จน์„ AI ์†Œ์‹๋งŒ