docs: V2 멀티플랫폼 마스터 플랜 + 로드맵
Mac+Web+iOS+Android 동시 진출 전략. 하이브리드 AI(로컬+클라우드), Supabase, Monorepo, 프리미엄 구독. Phase V2-1~V2-8 세부 로드맵.
This commit is contained in:
parent
3045fbf612
commit
a18ecdeb3c
1 changed files with 250 additions and 0 deletions
250
docs/v2/00-v2-master-plan.md
Normal file
250
docs/v2/00-v2-master-plan.md
Normal file
|
|
@ -0,0 +1,250 @@
|
||||||
|
# D3RO-VOICE V2 — 멀티플랫폼 마스터 플랜
|
||||||
|
|
||||||
|
> Windows Electron → Mac + Web + iOS + Android 확장
|
||||||
|
> 완전 로컬 → 하이브리드 (로컬 + 클라우드) 전환
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 전략 결정 요약
|
||||||
|
|
||||||
|
| 항목 | 결정 |
|
||||||
|
|------|------|
|
||||||
|
| **타겟 플랫폼** | 전부 동시 — Mac + Web + iOS + Android |
|
||||||
|
| **타겟 사용자** | 개인 → 팀 확장 (Notion/Slack 성장 모델) |
|
||||||
|
| **AI 인프라** | 하이브리드 — 데스크톱=로컬(Ollama+Whisper), 모바일/웹=클라우드 |
|
||||||
|
| **클라우드 STT** | Google Cloud Speech-to-Text |
|
||||||
|
| **클라우드 LLM** | Anthropic Claude API |
|
||||||
|
| **데이터 동기화** | 클라우드 — Supabase (PostgreSQL + Realtime) |
|
||||||
|
| **인증** | Supabase Auth (OAuth: Google/GitHub/Apple + Email) |
|
||||||
|
| **파일 저장소** | AWS S3 / Cloudflare R2 |
|
||||||
|
| **모바일** | React Native (Expo) |
|
||||||
|
| **웹** | Next.js |
|
||||||
|
| **수익 모델** | 프리미엄 구독 — Free / Pro / Team |
|
||||||
|
| **디자인 시스템** | D3RO 인스트루먼트 미학 유지 |
|
||||||
|
| **코드 재사용** | V1 비즈니스 로직 최대 재사용 (packages/core) |
|
||||||
|
| **CI/CD** | 내부 GitLab CI/CD |
|
||||||
|
| **타임라인** | AI 바이브코딩 기반 — 빠른 개발 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Monorepo 구조
|
||||||
|
|
||||||
|
```
|
||||||
|
d3ro-voice-v2/
|
||||||
|
├── packages/
|
||||||
|
│ ├── core/ ← 공유 비즈니스 로직 (타입, 유틸, 서비스 인터페이스)
|
||||||
|
│ ├── ui/ ← 공유 DS 컴포넌트 (MetalCard, PhosphorText 등)
|
||||||
|
│ ├── api-client/ ← Supabase + AI API 래퍼
|
||||||
|
│ └── i18n/ ← 공유 i18n (12개 locale)
|
||||||
|
├── apps/
|
||||||
|
│ ├── desktop/ ← Electron (기존 V1 진화)
|
||||||
|
│ ├── web/ ← Next.js
|
||||||
|
│ └── mobile/ ← React Native (Expo)
|
||||||
|
├── server/
|
||||||
|
│ ├── supabase/ ← Supabase 마이그레이션/함수
|
||||||
|
│ └── edge-functions/ ← STT/LLM 프록시, 웹훅
|
||||||
|
├── infra/
|
||||||
|
│ ├── .gitlab-ci.yml ← GitLab CI/CD
|
||||||
|
│ └── docker/ ← 개발용 Docker (Supabase local)
|
||||||
|
├── turbo.json ← Turborepo 설정
|
||||||
|
├── pnpm-workspace.yaml
|
||||||
|
└── package.json
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 프리미엄 구독 티어
|
||||||
|
|
||||||
|
| 티어 | 가격 | 전사 | LLM | 동기화 | 팀 |
|
||||||
|
|------|------|------|-----|--------|-----|
|
||||||
|
| **Free** | $0 | 월 5시간 | 월 50회 | 1기기 | - |
|
||||||
|
| **Pro** | $10/월 | 무제한 | 무제한 | 5기기 | - |
|
||||||
|
| **Team** | $20/인/월 | 무제한 | 무제한 | 무제한 | 협업+관리자 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 핵심 아키텍처
|
||||||
|
|
||||||
|
### 4.1 하이브리드 AI 파이프라인
|
||||||
|
|
||||||
|
```
|
||||||
|
[데스크톱]
|
||||||
|
마이크 → SoX → faster-whisper (로컬) → Ollama (로컬) → 로컬 DB
|
||||||
|
↓ 동기화
|
||||||
|
Supabase DB
|
||||||
|
|
||||||
|
[모바일/웹]
|
||||||
|
마이크 → WebRTC → Google Cloud STT (클라우드) → Claude API (클라우드)
|
||||||
|
↓
|
||||||
|
Supabase DB
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.2 데이터 동기화
|
||||||
|
|
||||||
|
```
|
||||||
|
Supabase PostgreSQL (SSOT)
|
||||||
|
├── auth.users
|
||||||
|
├── public.meetings (회의 세션)
|
||||||
|
├── public.meeting_memos (메모)
|
||||||
|
├── public.meeting_documents (생성 문서)
|
||||||
|
├── public.transcripts (전사 세그먼트)
|
||||||
|
├── public.teams / team_members
|
||||||
|
└── public.subscriptions
|
||||||
|
|
||||||
|
Row Level Security (RLS)
|
||||||
|
- 개인: user_id = auth.uid()
|
||||||
|
- 팀: team_id IN (user's teams)
|
||||||
|
|
||||||
|
Realtime 구독
|
||||||
|
- 회의 진행 중 실시간 전사 동기화
|
||||||
|
- 팀원 간 문서 편집 동기화
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.3 파일 저장소
|
||||||
|
|
||||||
|
```
|
||||||
|
Cloudflare R2 / AWS S3
|
||||||
|
├── audio/{user_id}/{session_id}.wav (녹음 원본)
|
||||||
|
├── exports/{user_id}/{doc_id}.pdf (내보내기)
|
||||||
|
└── avatars/{user_id}.jpg
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Phase 로드맵 (AI 바이브코딩 기준)
|
||||||
|
|
||||||
|
### Phase V2-1: Monorepo + Core 추출 (2~3일)
|
||||||
|
- Turborepo + pnpm 세팅
|
||||||
|
- V1에서 packages/core 추출 (타입, 유틸, 서비스 인터페이스)
|
||||||
|
- packages/ui 추출 (DS 컴포넌트)
|
||||||
|
- packages/i18n 추출
|
||||||
|
- apps/desktop이 packages/* import하여 기존대로 동작 확인
|
||||||
|
|
||||||
|
### Phase V2-2: Supabase 인프라 (2~3일)
|
||||||
|
- Supabase 프로젝트 생성
|
||||||
|
- DB 스키마 마이그레이션 (SQLite → PostgreSQL)
|
||||||
|
- Auth 설정 (Google/GitHub/Apple OAuth)
|
||||||
|
- RLS 정책
|
||||||
|
- Edge Functions: STT 프록시, LLM 프록시
|
||||||
|
|
||||||
|
### Phase V2-3: Web App MVP (3~5일)
|
||||||
|
- Next.js 앱 생성
|
||||||
|
- Supabase 연동 (Auth + DB + Realtime)
|
||||||
|
- 녹음 (Web Audio API) → Google Cloud STT → Claude → DB
|
||||||
|
- 회의록 생성/편집 UI (packages/ui 재사용)
|
||||||
|
- 결제 연동 (Stripe)
|
||||||
|
|
||||||
|
### Phase V2-4: 데스크톱 동기화 (2~3일)
|
||||||
|
- apps/desktop에 Supabase 클라이언트 추가
|
||||||
|
- 로컬 SQLite ↔ Supabase PostgreSQL 양방향 동기화
|
||||||
|
- 오프라인 지원 (로컬 우선, 온라인 시 동기화)
|
||||||
|
|
||||||
|
### Phase V2-5: Mac 빌드 (1~2일)
|
||||||
|
- electron-builder macOS 타겟
|
||||||
|
- SoX macOS 바이너리 번들
|
||||||
|
- sidecar macOS PyInstaller 빌드
|
||||||
|
- Code signing + Notarization
|
||||||
|
|
||||||
|
### Phase V2-6: Mobile App MVP (3~5일)
|
||||||
|
- React Native (Expo) 프로젝트 생성
|
||||||
|
- Supabase Auth 연동
|
||||||
|
- 녹음 (expo-av) → Google Cloud STT → Claude → DB
|
||||||
|
- 회의록 뷰어/편집
|
||||||
|
- 푸시 알림 (회의록 완료)
|
||||||
|
|
||||||
|
### Phase V2-7: 팀 기능 (3~5일)
|
||||||
|
- 팀 생성/초대/관리
|
||||||
|
- 회의록 팀 공유 + RLS
|
||||||
|
- 코멘트 시스템
|
||||||
|
- 팀 대시보드 (통계)
|
||||||
|
|
||||||
|
### Phase V2-8: 결제 + 출시 (2~3일)
|
||||||
|
- Stripe 결제 연동 (Free/Pro/Team)
|
||||||
|
- 사용량 추적 (전사 시간, LLM 호출)
|
||||||
|
- 앱스토어 출시 (iOS/Android)
|
||||||
|
- 랜딩 페이지 업데이트
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 기술 상세
|
||||||
|
|
||||||
|
### packages/core 추출 대상 (V1에서)
|
||||||
|
|
||||||
|
```
|
||||||
|
types.ts → packages/core/src/types/
|
||||||
|
errors.ts → packages/core/src/errors.ts
|
||||||
|
ipc-channels.ts → packages/core/src/channels.ts (→ API 엔드포인트 매핑)
|
||||||
|
meeting-markdown.ts → packages/core/src/utils/markdown.ts
|
||||||
|
markdown-to-docx.ts → packages/core/src/utils/docx.ts
|
||||||
|
i18n/*.json → packages/i18n/locales/
|
||||||
|
```
|
||||||
|
|
||||||
|
### packages/ui 추출 대상
|
||||||
|
|
||||||
|
```
|
||||||
|
components/ds/ → packages/ui/src/
|
||||||
|
MetalCard, PhosphorText, Led, PhysicalButton, ScreenPanel,
|
||||||
|
CrtDisplay, InstrumentPanel, MetalDial, ButtonGroup
|
||||||
|
theme.ts → packages/ui/src/theme.ts
|
||||||
|
```
|
||||||
|
|
||||||
|
### 서비스 추상화 패턴
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// packages/core/src/services/ai-service.ts
|
||||||
|
interface AIService {
|
||||||
|
transcribe(audio: Blob, options: STTOptions): Promise<TranscriptResult>
|
||||||
|
generate(prompt: string, options: LLMOptions): Promise<GenerateResult>
|
||||||
|
chatStream(messages: Message[], options: ChatOptions): AsyncGenerator<string>
|
||||||
|
}
|
||||||
|
|
||||||
|
// apps/desktop → LocalAIService (Ollama + faster-whisper)
|
||||||
|
// apps/web/mobile → CloudAIService (Google STT + Claude API)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. GitLab CI/CD
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
stages:
|
||||||
|
- lint
|
||||||
|
- test
|
||||||
|
- build
|
||||||
|
- deploy
|
||||||
|
|
||||||
|
# Monorepo 캐싱
|
||||||
|
variables:
|
||||||
|
TURBO_TEAM: d3ro
|
||||||
|
TURBO_REMOTE_CACHE: true
|
||||||
|
|
||||||
|
lint:
|
||||||
|
script: pnpm turbo lint
|
||||||
|
|
||||||
|
test:
|
||||||
|
script: pnpm turbo test
|
||||||
|
|
||||||
|
build:desktop:
|
||||||
|
script: pnpm turbo build --filter=@d3ro/desktop
|
||||||
|
artifacts: [dist/]
|
||||||
|
|
||||||
|
build:web:
|
||||||
|
script: pnpm turbo build --filter=@d3ro/web
|
||||||
|
artifacts: [.next/]
|
||||||
|
|
||||||
|
deploy:web:
|
||||||
|
script: vercel deploy --prod
|
||||||
|
only: [main]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 리스크 & 완화
|
||||||
|
|
||||||
|
| 리스크 | 영향 | 완화 |
|
||||||
|
|--------|------|------|
|
||||||
|
| Supabase 무료 티어 한계 | DB 500MB, Auth 50K MAU | Pro 업그레이드 ($25/월) |
|
||||||
|
| Google STT 비용 | $0.006/15초 | 사용량 제한 + 프리미엄 모델 |
|
||||||
|
| Claude API 비용 | $3/1M input tokens | 요약용 Haiku 사용, 캐싱 |
|
||||||
|
| React Native 성능 | 긴 전사 목록 렌더링 | FlatList + 가상화 |
|
||||||
|
| 오프라인→온라인 동기화 충돌 | 데이터 일관성 | CRDT 또는 last-write-wins |
|
||||||
Loading…
Add table
Add a link
Reference in a new issue