chore: 빅뱅 사이클 1차 wrap-up — 핸드오프 + Phase 5 체크리스트
빅뱅 Phase 1~6 완료 (Phase 5는 OAuth provider 연결 대기): - Phase 1: 사용자별 SQLite 격리 (816f527) - Phase 1.5: 로컬 모드 entry point (1a01cea) - Phase 2: 온보딩 + Cloud Sync 티저 (f1321df) - Phase 4: 티어 enforcement 로컬 해방 (46b77f1) - Phase 3: 로컬 우선 sync + login_required UI (ceadf1b) [재정의] - Phase 5: 3 클라이언트 일원화 검증 → OAuth provider 대기 - Phase 6: wrap-up (이 커밋) handoff-latest 새로 작성, 이전 스냅샷은 archive로 이동. project_status에 Phase 5 OAuth 연결 가이드 + 검증 체크리스트 기록.
This commit is contained in:
parent
ceadf1b6f3
commit
817b4a2580
3 changed files with 289 additions and 97 deletions
136
memory/handoff-archive/2026-04-11-0940-prior-bigbang.md
Normal file
136
memory/handoff-archive/2026-04-11-0940-prior-bigbang.md
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
# Session Handoff — 2026-04-11 09:40 (Mac, Big Bang 사이클 직전)
|
||||
|
||||
> From: macOS (yunchan-ui-MacBookPro)
|
||||
> Last commit: `dd1c305` — feat(desktop): SaaS [1+2] 빌드 타임 env + OAuth 강제 로그인 게이트
|
||||
> Branch: `main`
|
||||
> Remote: `https://gitlab.twentyoz.kr:8443/d3r0/voice.git`
|
||||
|
||||
## ✅ 이번 세션에서 한 일 (1M 컨텍스트, 데스크톱 Mac 안정화 + SaaS 1차)
|
||||
|
||||
### 환경
|
||||
- Mac 부트스트랩: Node 22 (brew), sox 14, supabase CLI 2.84
|
||||
- `npm install --force` (rollup win32 옵셔널 dep 충돌 우회)
|
||||
- `@electron/rebuild@3 --version=33.4.11` 완료
|
||||
- Sanity build: desktop/web typecheck, web `next build`, api-client vitest 19 passed
|
||||
|
||||
### Supabase 배포
|
||||
- 프로젝트: `yunchan8804-blip's Project` (`llnocwyqvhgwpdjcqqyw`)
|
||||
- `supabase link` + `db push` (8개 마이그레이션)
|
||||
- `supabase functions deploy` (10개 Edge Functions)
|
||||
- `apps/web/.env.local` + `server/supabase/.env.local` 작성
|
||||
|
||||
### V2-6차 [W][A~D] — 웹 고도화
|
||||
- W. fix: AppRouterCacheProvider Emotion key `'d3ro-mui'` → `'mui'` (숫자 3 → SSR 500)
|
||||
- A. Dark/Light/Theme 토글 (`theme-mode-context.tsx`, 12개 locale `theme.*`)
|
||||
- B. DocumentEditor Mermaid + Markdown 렌더 (`markdown-preview.tsx`)
|
||||
- C. 회의 오디오 재생 (`meeting-audio-player.tsx`, Storage signed URL 1h)
|
||||
- D. Dashboard 14일 추이 차트 (recharts)
|
||||
|
||||
### V2-6차 [E~L] — 데스크톱 Mac 안정화
|
||||
- E. macOS 단축키 표기 ⌘⇧⌃⌥ (`format-hotkey.ts` + 호출 위치 4개)
|
||||
- F. Sidecar `apps/desktop/sidecar/.venv/` 생성 + paths.ts venv 우선
|
||||
- G. HotkeyRecordModal 칩 'WIN' → ⌘ 표기 (getKeyName 플랫폼 분기)
|
||||
- H. `bootstrap.ts` `hideRecordingTip` import 누락 → ReferenceError 픽스
|
||||
- I. macOS 시스템 beep 차단 — Electron `globalShortcut` 통합 (HotkeyService)
|
||||
- J. Sidecar 동적 포트 (`_findFreePort`, orphan EADDRINUSE 회피)
|
||||
- K. macOS Cmd+V paste — `TextInsertService` `LeftSuper`/`LeftControl` 분기
|
||||
- L. qwen3 reasoning 39초 — `/no_think` 토큰 + `stripReasoningBlocks` + 빈 응답 fallback
|
||||
|
||||
### SaaS [1+2] — 데스크톱 fat client → 진짜 SaaS 클라이언트 변환
|
||||
- [1] **빌드 타임 Supabase env 주입**
|
||||
- `electron.vite.config.ts`: `loadEnv('D3RO_')` + main `define`
|
||||
- `apps/desktop/.env.local`: `D3RO_SUPABASE_URL/ANON_KEY`
|
||||
- `ConfigService`: `BUILD_TIME_*` 상수, `configGet/Set`이 빌드 타임 우선 + 변경 차단
|
||||
- [2] **OAuth 첫 실행 강제 게이트**
|
||||
- `CloudSyncState.saasMode: boolean` 추가
|
||||
- `LoginScreen.tsx` 신규 (Google/GitHub만)
|
||||
- `App.tsx` `AuthGate` 상태머신
|
||||
- `CloudSyncSection` saasMode일 때 URL/Key 입력 필드 숨김
|
||||
|
||||
### 미완 / 확실히 알려진 이슈
|
||||
- Ollama `qwen3:4b`가 4B reasoning 모델이라 CPU에서 느림 → 사용자가 더 빠른 모델로 교체 권장 (`gemma3:1b` 또는 `qwen2.5:3b`)
|
||||
- Accessibility 권한 첫 실행 시 macOS 권한 다이얼로그가 떠야 함 (안 뜨면 시스템 설정 → 손쉬운 사용에 Electron 추가)
|
||||
- 데스크톱 SQLite는 여전히 단일 파일 (`userData/d3ro-voice/d3ro.db`) — 한 PC에 여러 사용자가 OAuth 로그인 시 데이터 섞일 위험 ← **빅뱅 핵심 작업**
|
||||
|
||||
## 🚧 다음 세션: 빅뱅 사이클 (Desktop SaaS Client 완성)
|
||||
|
||||
자세한 단계별 계획은 아래 "다음 세션 시작 프롬프트" 참조.
|
||||
|
||||
요약 목표:
|
||||
1. **사용자별 SQLite 격리** — `userData/users/${userId}/d3ro.db`
|
||||
2. **회원가입/온보딩 흐름** — OAuth 첫 가입 시 환영 + 마이그레이션
|
||||
3. **cloud-first 정책** — Supabase source of truth, local read-through cache
|
||||
4. **멀티 디바이스 sync 강화**
|
||||
5. **티어 enforcement** — 데스크톱에서도 free quota 차단
|
||||
6. **데스크톱 ↔ 웹 ↔ 모바일 데이터 일원화 검증**
|
||||
|
||||
## 🔑 다음 세션 시작 시 즉시 할 일
|
||||
|
||||
```bash
|
||||
# 1. git pull
|
||||
git pull origin main # 마지막 커밋 dd1c305 또는 그 이후 확인
|
||||
|
||||
# 2. 환경 검증 (이미 mac에 다 있음)
|
||||
node --version # v22.x
|
||||
which sox supabase # /opt/homebrew/bin/...
|
||||
ls apps/desktop/sidecar/.venv/bin/python3 # exists
|
||||
ls apps/desktop/.env.local # gitignored, exists
|
||||
|
||||
# 3. 워크스페이스 재설치 필요 시
|
||||
npm install --force
|
||||
|
||||
# 4. 데스크톱 dev 띄워서 LoginScreen 보이는지 확인
|
||||
npm run dev
|
||||
# → 첫 화면이 LoginScreen이어야 함 (Google/GitHub 버튼)
|
||||
```
|
||||
|
||||
## ⚠ 환경 / 주의사항
|
||||
|
||||
- **gitlab 푸시는 사용자 명시 후에만**: 이번 세션에선 push 안 했음. 다음 세션에서 빅뱅 작업 끝나면 사용자 확인 후 `git push origin main`
|
||||
- **Ollama 모델**: `qwen3:4b` 설치됨, 느리면 `ollama pull gemma3:1b` 권장
|
||||
- **Accessibility 권한**: 데스크톱 핫키 동작에 필수 — macOS 시스템 설정에서 수동 허용
|
||||
- **Supabase 외부 키**: ANTHROPIC/OPENAI/RESEND/STRIPE는 아직 안 주입됨 → web의 `/chat`, `/knowledge`, `/billing`은 키 채워지기 전엔 동작 안 함 (사용자가 키 줄 때 `supabase secrets set`)
|
||||
- **데스크톱 .env.local**: gitignored, 이번 세션에서 작성. 만약 다음 세션이 다른 PC에서 시작하면 `apps/desktop/env.example`을 보고 직접 작성 필요
|
||||
- **DB 마이그레이션**: 빅뱅 [1] 사용자별 SQLite 격리 시 기존 단일 DB의 데이터를 첫 로그인 사용자에게 귀속시키는 마이그레이션 필요. 데이터 손실 주의
|
||||
|
||||
## 📦 의존성 / 도구
|
||||
- Node 22.22.2 (brew)
|
||||
- Python 3.13 (Framework) + venv at `apps/desktop/sidecar/.venv`
|
||||
- Supabase CLI 2.84.2
|
||||
- Ollama (사용자가 별도 설치, qwen3:4b 모델)
|
||||
- @electron/rebuild@3 33.4.11
|
||||
- Electron 33.4.11
|
||||
|
||||
## 🧪 마지막 검증
|
||||
| 게이트 | 상태 |
|
||||
|---|---|
|
||||
| desktop tsc | ✅ |
|
||||
| desktop build (electron-vite) | ✅ |
|
||||
| desktop dev (실제 실행) | ✅ Main window shown |
|
||||
| Hotkey ⌘⇧1 + globalShortcut | ✅ accelerator=Shift+Cmd+1 등록 |
|
||||
| Sidecar venv spawn | ✅ 한국어 96% 1.5초 오디오 → 426ms 전사 |
|
||||
| Cmd+V paste | ✅ (사용자 확인 "되긴한다") |
|
||||
| LLM refine | ⚠ qwen3:4b reasoning 끄기 후 첫 시도 미확인 — 사용자 검증 필요 |
|
||||
| LoginScreen | ⚠ 이번 세션 마지막에 빌드만, 사용자 시각 확인 미수행 |
|
||||
|
||||
## 📊 누적 통계 (이번 세션 포함)
|
||||
- 신규 커밋: 13개 (V2-6차 [A~L] + SaaS [1+2])
|
||||
- 신규 파일:
|
||||
- apps/web: theme-mode-context, markdown-preview, meeting-audio-player, meetings-trend-chart
|
||||
- apps/desktop: format-hotkey, LoginScreen, sidecar/.venv, .env.local, env.example
|
||||
- 수정: ConfigService(빌드 타임), CloudSyncService(saasMode), CloudSyncSection, App.tsx, HotkeyService(globalShortcut), LocalSTTService(_findFreePort), LocalLLMService(/no_think + stripReasoning), TextInsertService(Cmd+V), bootstrap(hideRecordingTip), ...
|
||||
|
||||
## 🔗 참고
|
||||
- `memory/project_status.md` — 전체 현황 + V2-6차 [A~L] + SaaS [1+2]
|
||||
- `docs/v2/00-v2-master-plan.md` — V2 마스터 플랜
|
||||
- `docs/v2/phase-V2-4.md` — 데스크톱 동기화 설계
|
||||
- `apps/desktop/.env.local` — 빌드 타임 Supabase env (gitignored)
|
||||
- `apps/desktop/env.example` — 템플릿
|
||||
- `memory/handoff-archive/2026-04-10-2300-windows-to-mac.md` — 이전 핸드오프
|
||||
|
||||
---
|
||||
|
||||
# 🎯 다음 세션 시작 프롬프트 (사용자가 그대로 복사해서 붙여넣기)
|
||||
|
||||
다음 세션에서 그대로 붙여넣을 프롬프트는 별도 파일에:
|
||||
**`memory/big-bang-prompt.md`**
|
||||
Loading…
Add table
Add a link
Reference in a new issue