feat(desktop): SaaS [4] 온보딩 — Cloud Sync 티저 step + AppConfig 타입 정리 (빅뱅 Phase 2)

AppConfig 정식화:
- packages/core types.ts: onboardingCompleted: boolean 추가
- ConfigService CONFIG_DEFAULTS 동기화
- 타입 캐스팅 3곳 제거 (AppLayout/OnboardingModal/SettingsModal)

OnboardingModal 6 step 확장:
- 기존: 환영 → 마이크 → 핫키 → Ollama → 완료
- 신규: 환영 → 마이크 → 핫키 → Ollama → Cloud Sync(선택) → 완료
- saasMode === true 일 때만 Cloud Sync step 노출
- Step 내용: tagline + 3 benefit (sync/premium LLM/team share)
  + "설정에서 언제든지 로그인" 안내
- 온보딩 scope 안에서는 로그인 버튼 미노출 — 부담 제로 유지
  (Settings의 CloudSyncSection이 유일한 OAuth 진입점)

i18n:
- ko/en에 onboarding.cloud.* 6개 키 추가
- 나머지 10개 locale은 추후 일괄 (Phase 2 scope 밖)

의도적 제외:
- Supabase profiles.onboarded_at — OAuth provider 설정 전까진 의미 없음
- OAuth 후 환영 페이지 — Phase 4 티어 enforcement와 함께
- STT 모델 선택 — sidecar가 자동 다운로드
This commit is contained in:
윤찬 2026-04-11 10:16:06 +09:00
parent 1a01cea33c
commit f1321df83c
8 changed files with 130 additions and 13 deletions

View file

@ -208,6 +208,37 @@ OAuth provider도 아직 Supabase에 설정 안 된 상태. 강제 게이트는
- `~/Library/Application Support/d3ro-voice/users/${uuid}/d3ro.db` 파일 생성 확인
- 기존 `d3ro-voice.db`가 있는 환경에서 archive rename 동작 확인
### SaaS [4] 회원가입 / 온보딩 (Phase 2, 2026-04-11)
> 기존 `OnboardingModal`을 로컬 모드 entry point에 맞게 정리 + Cloud Sync 티저 step 추가.
- **AppConfig 타입 정식화**
- `packages/core/src/types.ts` `AppConfig``onboardingCompleted: boolean` 추가
- `ConfigService.CONFIG_DEFAULTS``onboardingCompleted: false` 추가
- 타입 캐스팅(`as keyof AppConfig`, `as never`) 3곳 제거:
- `AppLayout.tsx` 첫 실행 감지: `cfg.onboardingCompleted` 직접 접근
- `OnboardingModal.tsx` handleFinish: `key: 'onboardingCompleted'` 리터럴
- `SettingsModal.tsx` "온보딩 다시 보기" 버튼: 동일
- **온보딩 Step 확장 (5 → 6 step)**
- 기존 flow: 환영 → 마이크 → 핫키 → Ollama → 완료
- 새 flow: 환영 → 마이크 → 핫키 → Ollama → **Cloud Sync(선택)** → 완료
- Cloud Sync step은 `saasMode === true`일 때만 노출:
- `getState()`로 saasMode 조회
- Ollama "다음" → `nextAfterOllama()`: saasMode면 step 4, 아니면 step 5로 분기
- Cloud Sync step 내용: tagline + 3개 benefit (동기화/Premium LLM/팀공유) + "설정에서 언제든지 로그인" 안내. **로그인 버튼 없음 — onboarding scope 밖** (Settings의 CloudSyncSection이 유일한 OAuth 진입점).
- **i18n ko/en 키 추가** (`packages/i18n/src/locales/`):
- `onboarding.cloud.title` / `tagline` / `benefit1~3` / `signInLater`
- 나머지 10개 locale은 fallback (Phase 2 scope 밖, 추후 일괄)
- **검증**
- desktop `tsc --noEmit`
- desktop `npm run build` ✅ (renderer 2,129kB, +3kB)
- 수동 검증 대기: Settings → About → "온보딩 다시 보기" 눌러서 신규 시퀀스 확인
- **Phase 2에서 의도적으로 뺀 것** (추후 사이클)
- Supabase `profiles.onboarded_at` 컬럼 — OAuth provider(Google) 설정 전까진 의미 없음
- OAuth 로그인 후 "환영" 페이지 — provider 연결 후 Phase 4와 함께
- STT 모델 선택 step — faster-whisper sidecar가 첫 사용 시 자동 다운로드하므로 불필요
- 온보딩 키의 나머지 10개 locale 번역
### SaaS [3.5] 로컬 모드 = entry point (Phase 1.5, 2026-04-11)
> 비즈니스 모델: 무료 로컬 모드 = onboarding funnel 입구 (킬러 피처),