feat: V2-7 Admin 콘솔 리디자인 + 3단계 권한 + SaaS 전환 + 코드 정리

- Admin CRM: D3RO Console 스타일 전체 적용 (panelSx/tableSx/filterBtnSx)
- 3단계 권한: manager/admin/super_admin (DB + Edge Functions + Frontend)
- 랜딩 페이지: 1회 결제 → 월간/연간 구독 SaaS 모델 (10개 언어)
- SSE 스트리밍: VoiceConversation Premium LLM 라우팅 + fallback
- Supabase 클라이언트: packages/api-client 공통 추출 (browser+server)
- RPC 함수 타입: 9개 정의 (admin_usage_by_feature 등)
- callAdminApi 401 버그 수정 (getUser() 선행 토큰 갱신)
This commit is contained in:
윤찬 2026-04-13 01:28:10 +09:00
parent d0e854c255
commit 8af75a0a1e
50 changed files with 2185 additions and 950 deletions

View file

@ -1,8 +1,60 @@
# D3RO-VOICE 프로젝트 현황
> 마지막 갱신: 2026-04-13 09:30 (Phase V2-6 Admin CRM 고도화)
> 마지막 갱신: 2026-04-13 (Admin 콘솔 리디자인 + 랜딩 SaaS 전환)
> 규칙 13: 작업 완료 즉시 이 파일 갱신 의무
## Admin 콘솔 리디자인 + 랜딩 SaaS 전환 (2026-04-13) ✅
### Admin CRM 콘솔 스타일 리디자인
- 전체 페이지 D3RO Console 스타일 적용 (Overview, Users, Subscriptions, Audit Log + 모든 상세)
- `console-theme.ts` 디자인 토큰 시스템 (C 색상, FONT, panelSx, tableSx, filterBtnSx, statusBadgeSx)
- `globals.css` — 스캔라인 애니메이션, 그리드 패턴, 글로우 효과, 커스텀 스크롤바
- JetBrains Mono 폰트, 검정 배경, 라운드 패널, 오렌지 액센트
- MetalCard/PhosphorText → Box + sx 전환 (MUI는 유지, d3ro DS 컴포넌트 미사용)
### SSE 스트리밍 Premium LLM 연결
- VoiceConversationService에 Premium/Local LLM 라우팅 추가
- `_createChatStream()`: configGet('llmBackend') 기반 분기, Premium 실패 시 Local fallback
- PremiumLLMService.chatStream() → Anthropic SSE → 토큰 단위 yield → TTS 파이프라인
### 코드 정리
- **Supabase 클라이언트 공통화**: packages/api-client에 supabase-browser.ts, supabase-server.ts 추출
- Browser: 싱글톤 캐싱 + isSupabaseConfigured() 완전 공유
- Server: CookieStore 인터페이스 팩토리 패턴 (next/headers 의존성 분리)
- apps/web, apps/admin → 3줄 re-export 래퍼로 축소
- **RPC 함수 타입 9개 추가**: packages/api-client/src/types.ts Functions 섹션
- generate_invite_token, user_team_ids, user_admin_team_ids, match_knowledge_chunks
- consume_quota, increment_daily_usage, admin_usage_by_feature, admin_top_users, admin_dau
### 랜딩 페이지 SaaS 구독 모델 전환
- Pricing: 1회 결제 → 월간($9.9/$19.9) / 연간($99/$199) 토글
- 10개 언어 i18n 전체 동기화 (pricing, FAQ, CTA)
- FAQ: 구독 관련 답변 업데이트
- CTA: "구독 없음" → "프리미엄 기능, 당신의 조건으로"
- 다운로드 URL: placeholder (#) — 추후 실제 URL 제공 시 교체
---
## V2-6.1: 3단계 권한 체계 (2026-04-12) ✅
### 변경 내역
- **DB**: `profiles_role_check``manager` 추가, RLS 정책 7개 재작성 (manager 읽기, admin 쓰기, manager 구독 UPDATE)
- **Edge Functions 4개**: `requireManager`/`requireAdmin` 3단계 분기 적용 + 배포 완료
- **Frontend**: `admin-guard.ts` 3단계 가드, UI 컴포넌트 권한별 표시 분기
- **토큰 갱신 버그 수정**: `callAdminApi`에서 `getSession()``getUser()` 선행 호출
### 권한 체계
| 기능 | manager | admin | super_admin |
|------|---------|-------|-------------|
| 조회 전체 | ✅ | ✅ | ✅ |
| 구독 수정 + 메모 | ✅ | ✅ | ✅ |
| 구독 생성 (VIP) | ❌ | ✅ | ✅ |
| 구독 삭제 | ❌ | ✅ | ✅ |
| role 변경 (user↔manager) | ❌ | ✅ | ✅ |
| role 변경 (→admin/super_admin) | ❌ | ❌ | ✅ |
---
## Phase V2-6: Admin CRM 고도화 (2026-04-13 09:30) ✅
### DB 마이그레이션 (`20260413000004_admin_enhancement.sql`)