Phase 10~11 전체 구현: 킬러 피처 5종 + 수익화 시스템
Phase 10 킬러 피처: - MemoService: 태그 CRUD + 마크다운 내보내기 (memo_tags DB) - VoiceCommandService: 키워드→명령어 매칭, 프리셋 4종 - ScreenContextService: PowerShell 활성 윈도우 + Ctrl+C 선택 텍스트 - ChainService: LLM 명령어 순차 실행 파이프라인 - CaptionService: 6초 청크 연속 전사 + 시스템 오디오 루프백 VoiceModeService 파이프라인 통합: - 녹음 시작 → 컨텍스트 캡처 → STT → 키워드 매칭 → LLM(체인/컨텍스트 주입) → 삽입 시스템 오디오 캡처: - setDisplayMediaRequestHandler + audio: 'loopback' (IPC 브릿지) - electron-audio-loopback 패키지 contextIsolation 호환 불가 → 직접 구현 Phase 11 수익화: - LicenseService: Free/Pro/Pro+ 3티어, LemonSqueezy API - Feature Gate: requireFeature/checkFeature/consumeFeature - 일일 쿼터: Free dictation 20/일, LLM 10/일 (SQLite daily_usage) - LicenseModal, ProBadge, UpgradePromptModal UI 디자인 보강: - d3roTypo(13종), d3roShadow(10종), d3roRadius(7종) 토큰 시스템 - ScreenPanel, ButtonGroup DS 컴포넌트 신규 - PhosphorText 4→13종 변형, MetalDial conic-gradient 광택 - 공유 컴포넌트: EmptyStateCard, SearchInput, PageHeader, HistoryEntryCard 기타: - 자막 핫키 SSOT 전체 연동 (Config→Hotkey→VoiceMode→Caption→Settings) - StatusBar 자막 LED + 효과음, 자막 로딩 UI - LLM 상태 이벤트 전파 수정 (폴링 제거 → onStatusChanged) - 커맨드 팝업 "선택 해제" 항목 추가
This commit is contained in:
parent
36d77ca224
commit
a31f96bbb8
97 changed files with 11853 additions and 1143 deletions
55
CLAUDE.md
55
CLAUDE.md
|
|
@ -77,9 +77,9 @@ npm run typecheck # tsc --noEmit
|
|||
6. **녹음 UI**: 9개 웨이브 바, cos 분포 가중치, 100ms 애니메이션
|
||||
|
||||
## 현재 상태
|
||||
Phase: 9 완료 + 폴리싱 완료 (Phase 1~9 전부 완료)
|
||||
마지막 작업: Ollama 설치 안내 UI + Settings 속도 개선 + 커맨드 선택 팝업 + 실시간 UI 갱신
|
||||
다음 작업: **Phase 10 킬러 피처** (실시간 자막, 스크린 컨텍스트, 음성 메모장, 멀티 LLM 체인, 음성 단축키)
|
||||
Phase: 11 완료 (Phase 1~11 전체 완료)
|
||||
마지막 작업: LicenseService + Feature Gate + LicenseModal + ProBadge + UpgradePrompt + 일일 쿼터 + LemonSqueezy API
|
||||
다음 작업: Phase 12 랜딩 페이지 & 마케팅 또는 빌드/배포 안정화
|
||||
차단 이슈: @nut-tree-fork/nut-js 포크 사용
|
||||
|
||||
### DS 컴포넌트 현황 (src/renderer/components/ds/)
|
||||
|
|
@ -88,8 +88,48 @@ Phase: 9 완료 + 폴리싱 완료 (Phase 1~9 전부 완료)
|
|||
- Led.tsx: LED 인디케이터 (amber/green/red/orange, pulse) ✅
|
||||
- PhysicalButton.tsx: 물리 버튼 (돌출 그림자, 눌림 피드백) ✅
|
||||
- MetalCard.tsx: 메탈 카드 컨테이너 ✅
|
||||
- PhosphorText.tsx: 인광 텍스트 (hero/value/label/dim) ✅
|
||||
- MetalDial.tsx: 메탈 다이얼 (동심원 텍스처, 드래그 회전, 금속 광택) ✅
|
||||
- PhosphorText.tsx: 인광 텍스트 (13종 변형: hero/title/value/heading/body/compact/small/meta/label/dim/engrave/micro/nano) ✅
|
||||
- MetalDial.tsx: 메탈 다이얼 (동심원 텍스처, 드래그 회전, conic-gradient 금속 광택) ✅
|
||||
- ScreenPanel.tsx: 글래스 스크린 패널 (CRT 없는 인셋 베젤 + 반사) ✅
|
||||
- ButtonGroup.tsx: 인셋 버튼 클러스터 (레퍼런스 .button-group) ✅
|
||||
|
||||
### 디자인 토큰 현황 (theme.ts)
|
||||
- d3roTypo: 13단계 타이포 (hero 42px ~ nano 7px, size/weight/spacing/line)
|
||||
- d3roShadow: 10종 그림자 (chassis/card/inset/button/dialog/tooltip 등)
|
||||
- d3roRadius: 7종 반경 (outer 24px ~ pill 999px)
|
||||
|
||||
### Phase 11 구현 내용 (수익화 기반)
|
||||
- **LicenseService**: Free/Pro/Pro+ 3단계 티어, electron-store 대신 별도 JSON 파일, 오프라인 우선 설계
|
||||
- **Feature Gating**: Feature enum (16개 기능), 티어별 접근 매핑, 쿼터 한도 (Free: 받아쓰기 20회/일, LLM 10회/일)
|
||||
- **daily_usage DB 테이블**: 날짜+기능별 사용량 추적 (drizzle-orm, UPSERT)
|
||||
- **LemonSqueezy 연동**: 키 활성화/검증 API, variant_name→tier 매핑, 오프라인 유예 30일
|
||||
- **IPC**: LICENSE 네임스페이스 9개 채널 (getInfo, activate, deactivate, checkFeature, getUsage, getAllUsage, getTierComparison, upgradePrompt, tierChanged)
|
||||
- **Preload**: license API 네임스페이스 추가 (9개 메서드 + 2개 이벤트 리스너)
|
||||
- **ErrorCode**: 850-862 범위 라이센스 에러 (LicenseKeyInvalid, QuotaExceeded, TierRequired 등)
|
||||
- **UpgradePromptModal**: 쿼터 소진/잠긴 기능 접근 시 업그레이드 유도 모달 (혜택 목록, 쿼터 바)
|
||||
- **SettingsModal License 탭**: 티어 표시, 키 입력/활성화, 사용량 바, 티어 비교표
|
||||
- **DashboardPage 사용량**: Free 티어에서 오늘 사용량 바 (받아쓰기/LLM) 표시
|
||||
- **ProBadge + useProFeature**: 잠긴 기능 오버레이 래퍼 컴포넌트 + 훅
|
||||
- **VoiceModeService gating**: startSession에서 DICTATION 쿼터 체크/소비
|
||||
- **LocalLLMService gating**: processText에서 LLM_PROCESS 쿼터 체크/소비 (차단 시 원본 텍스트 폴백)
|
||||
- **i18n**: license.* 네임스페이스 40+ 키 추가 (ko/en)
|
||||
|
||||
### Phase 10 구현 내용 (서비스 레이어 + UI 통합)
|
||||
- **MemoService**: memo_tags DB 테이블 + 태그 CRUD + 마크다운 내보내기
|
||||
- **VoiceCommandService**: 키워드→명령어 매칭 엔진, 프리셋 키워드 4종 (번역/요약/다듬기/설명)
|
||||
- **ScreenContextService**: 활성 윈도우 감지(PowerShell) + 선택 텍스트 캡처(Ctrl+C)
|
||||
- **ChainService**: LLM 명령어 순차 실행 파이프라인, 단계별 진행 이벤트
|
||||
- **CaptionService**: 3초 청크 연속 전사, caption-overlay 팝업(Vanilla JS)
|
||||
- **VoiceModeService 통합**: 파이프라인 훅 3개 (컨텍스트 캡처→키워드 매칭→체인/컨텍스트 주입)
|
||||
- **공유 컴포넌트**: EmptyStateCard, SearchInput, PageHeader, HistoryEntryCard
|
||||
- **공유 유틸**: formatters.ts (formatDuration, getDateKey, formatNumber 등)
|
||||
- **IPC**: 5개 새 네임스페이스 (MEMO, VOICE_COMMAND, CONTEXT, CHAIN, CAPTION)
|
||||
- **Preload**: 5개 API 네임스페이스 추가 (memo, voiceCommand, context, chain, caption)
|
||||
- **HistoryPage 태그 통합**: HistoryEntryCard에 태그 표시/추가/삭제, 태그 필터 바, 마크다운 내보내기
|
||||
- **CommandsPage 키워드/체인**: VoiceCommandService 키워드 편집 섹션 + ChainService 체인 CRUD/실행 UI
|
||||
- **DashboardPage 자막 토글**: 실시간 자막 시작/종료 버튼, CaptionState LED 표시
|
||||
- **SettingsModal 설정 추가**: 음성 명령어 on/off, 스크린 컨텍스트 on/off 토글 (LLM 탭)
|
||||
- **i18n**: memo/voiceCommand/chain/context/dashboard.caption 번역 키 추가 (ko/en)
|
||||
|
||||
### Phase 9 구현 내용
|
||||
- **Settings About 탭**: 앱/Electron 버전, 기술 스택, 프로젝트 링크, 정밀기기 디자인
|
||||
|
|
@ -213,6 +253,9 @@ Phase: 9 완료 + 폴리싱 완료 (Phase 1~9 전부 완료)
|
|||
- Phase 8: UI 디자인 재설계 + SSOT + DS 컴포넌트 정비
|
||||
- Phase 9: 품질 보강 + UX 개선 (온보딩, 마이크 테스트, WAV 저장, 커맨드 팝업, Ollama 안내)
|
||||
- Phase 10: 킬러 피처 — Speakly를 넘어서 (실시간 자막, 스크린 컨텍스트, 음성 메모장, 멀티 LLM 체인, 음성 단축키)
|
||||
- Phase 11: 수익화 기반 — LicenseService + Feature Gating + Freemium UI
|
||||
- Phase 12: Pro 피처 — 파일 전사, 회의록 자동 요약, 딕테이션 템플릿
|
||||
- Phase 13: Pro+ 프리미엄 — 음성 대화 모드, 로컬 RAG, OS 자동화
|
||||
|
||||
## 설계 문서 (구현 시 반드시 참조)
|
||||
@docs/design/00-master-architecture.md
|
||||
|
|
@ -233,6 +276,8 @@ Phase: 9 완료 + 폴리싱 완료 (Phase 1~9 전부 완료)
|
|||
@docs/phases/phase-8.md
|
||||
@docs/phases/phase-9.md
|
||||
@docs/phases/phase-10-killer-features.md
|
||||
@docs/phases/phase-11-monetization.md
|
||||
@docs/phases/phase-12-pro-features.md
|
||||
|
||||
## RE 노하우 (패턴 적용 근거)
|
||||
@docs/re-findings/speakly-architecture.md
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue