diff --git a/memory/project_status.md b/memory/project_status.md index 1a59906..d0f3871 100644 --- a/memory/project_status.md +++ b/memory/project_status.md @@ -1,15 +1,86 @@ # D3RO-VOICE 프로젝트 현황 -> 마지막 갱신: 2026-04-10 (4차 사이클) +> 마지막 갱신: 2026-04-11 (Mac 부트스트랩) > 규칙 13: 작업 완료 즉시 이 파일 갱신 의무 +## Mac 환경 부트스트랩 (2026-04-11) + +Windows → Mac 핸드오프 완료 (`memory/handoff-latest.md` 참조). + +| 항목 | 상태 | +|---|---| +| Homebrew | ✅ 기존 설치 | +| Python 3.13 | ✅ 기존 설치 | +| Node 22.22.2 (brew) | ✅ 신규 설치 | +| sox 14.4.2 (brew) | ✅ 신규 설치 | +| Ollama | ❌ 미설치 (로컬 LLM 필요 시 `brew install ollama && ollama pull qwen3:4b`) | +| `npm install --force` | ✅ 1142 패키지 (rollup win32 옵셔널 dep 무시) | +| `@electron/rebuild@3 --version=33.4.11` | ✅ native 모듈 재빌드 완료 | +| desktop `tsc --noEmit` | ✅ | +| web `tsc --noEmit` | ✅ | +| web `next build` | ✅ (15 라우트, 5.8s compile) | +| api-client `vitest` | ✅ (19 passed, 283ms) | +| git working tree | ✅ clean (`package-lock.json` 포함 변경 없음) | + +**남은 사용자 액션** +- OAuth Provider (Google/GitHub) 연결 — Supabase 대시보드 → Auth → Providers +- 외부 API 키 — ANTHROPIC / OPENAI / GOOGLE_CLOUD_STT / RESEND / STRIPE (아래 Edge Function Secrets 섹션) +- (선택) `brew install ollama` + `ollama pull qwen3:4b` +- (필요 시) `npm run dev`로 Electron 앱 수동 검증 — 첫 실행 시 Accessibility/마이크/Apple Events 권한 다이얼로그 승인 + +## Supabase 프로젝트 연결 (2026-04-11) + +**프로젝트**: `yunchan8804-blip's Project` (ref: `llnocwyqvhgwpdjcqqyw`) +**URL**: `https://llnocwyqvhgwpdjcqqyw.supabase.co` +**CLI**: `supabase 2.84.2` (brew install supabase/tap/supabase) + +| 단계 | 결과 | +|---|---| +| `supabase link --project-ref llnocwyqvhgwpdjcqqyw` | ✅ | +| `config.toml` db.major_version 15→17 | ✅ (원격 매치) | +| `supabase db push --include-all` | ✅ 8개 마이그레이션 전부 적용 | +| `supabase functions deploy` | ✅ 10개 Edge Functions 배포 | +| `supabase secrets list` | SUPABASE_* 자동 주입 4개만 존재 | + +**배포된 Edge Functions** (10개) +`embed-chunks`, `llm-proxy`, `search-knowledge`, `send-push`, `stripe-checkout`, `stripe-portal`, `stripe-webhook`, `stt-proxy`, `team-accept`, `team-invite` + +**로컬 env 파일** (git 정책으로 Claude가 직접 쓰지 못함 — 사용자가 수동 생성) +- `apps/web/.env.local` — NEXT_PUBLIC_SUPABASE_URL + ANON_KEY + SITE_URL + SERVICE_ROLE_KEY +- `server/supabase/.env.local` — REF/URL/KEY/DB_PASSWORD/DATABASE_URL 참조용 + +## Edge Function Secrets — 필요한 외부 키 + +지금 배포된 함수가 실제로 동작하려면 아래 키를 `supabase secrets set ...`로 주입해야 함. 키가 없으면 해당 함수는 400/500 반환. + +| 키 | 쓰는 곳 | 필수? | +|---|---|---| +| `ANTHROPIC_API_KEY` | llm-proxy (채팅/액션/문서생성) | **필수** — 없으면 웹 /chat, /actions, meetings 문서 생성 불가 | +| `OPENAI_API_KEY` | embed-chunks, search-knowledge | **필수** — knowledge 시맨틱 검색에 필수 | +| `RESEND_API_KEY` | team-invite (이메일 발송) | 팀 초대 기능 쓸 때 | +| `RESEND_FROM` | team-invite 보낸이 | 기본값: `D3RO Voice ` | +| `SITE_URL` | team-invite 이메일 내 링크 | 기본값: `https://d3ro.dev` | +| `STRIPE_SECRET_KEY` | stripe-checkout/portal | 결제 기능 쓸 때 | +| `STRIPE_PRICE_PRO` / `STRIPE_PRICE_TEAM` | stripe-checkout | 각 요금제 Price ID | +| `STRIPE_WEBHOOK_SECRET` | stripe-webhook | 웹훅 서명 검증 | +| `GOOGLE_CLOUD_STT_KEY` | stt-proxy | 현재 스캐폴딩 상태 (index.ts 주석처리) | + +주입 예: +```bash +cd server +SUPABASE_ACCESS_TOKEN= supabase secrets set \ + ANTHROPIC_API_KEY=sk-ant-... \ + OPENAI_API_KEY=sk-proj-... \ + RESEND_API_KEY=re_... +``` + ## 현재 단계 -**V1 완료** → **V2 1차 전 페이즈 + 2차/3차 고도화 완료** +**V1 완료** → **V2 1차 전 페이즈 + 2차/3차/4차/5차 고도화 완료** → **Mac 부트스트랩 + Supabase 배포 완료** V2 1차: - Phase V2-1 ✅ (Monorepo 전환 a/b/c/d + minor 정리) -- Phase V2-2 🟡 로컬 완료 (Supabase), 사용자 배포 대기 +- Phase V2-2 ✅ 로컬 + 원격 배포 완료 (Supabase llnocwyqvhgwpdjcqqyw) - Phase V2-3 ✅ (Web App MVP — Next.js 15, 12 라우트) - Phase V2-4 ✅ (데스크톱 Supabase push 동기화) - Phase V2-5 🟡 로컬 완료 (Mac 빌드), 사용자 검증 대기 diff --git a/server/supabase/config.toml b/server/supabase/config.toml index 74ef152..994a533 100644 --- a/server/supabase/config.toml +++ b/server/supabase/config.toml @@ -13,7 +13,7 @@ max_rows = 1000 [db] port = 54322 shadow_port = 54320 -major_version = 15 +major_version = 17 [db.pooler] enabled = false