From ffca07d12099be10bb806eff3b2ba62acbd6e728 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A4=EC=B0=AC?= Date: Mon, 13 Apr 2026 01:28:55 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20=EC=84=B8=EC=85=98=20=ED=95=B8?= =?UTF-8?q?=EB=93=9C=EC=98=A4=ED=94=84=20=E2=80=94=20V2-7=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- memory/handoff-archive/2026-04-13-0930.md | 90 ++++++++++++++++ memory/handoff-latest.md | 125 +++++++++++----------- 2 files changed, 151 insertions(+), 64 deletions(-) create mode 100644 memory/handoff-archive/2026-04-13-0930.md diff --git a/memory/handoff-archive/2026-04-13-0930.md b/memory/handoff-archive/2026-04-13-0930.md new file mode 100644 index 0000000..9048281 --- /dev/null +++ b/memory/handoff-archive/2026-04-13-0930.md @@ -0,0 +1,90 @@ +# Session Handoff — 2026-04-13 09:30 (Phase V2-6 Admin CRM 고도화 완료) + +> From: macOS (yunchan-ui-MacBookPro) +> Last commit: `8467ecb` — chore: project_status 갱신 — Phase V2-6 Admin CRM 고도화 완료 +> Branch: `main` +> Remote: `https://gitlab.twentyoz.kr:8443/d3r0/voice.git` +> Working tree: clean (pushed 대기) + +## 이번 세션에서 한 일 (3 커밋) + +### Phase V2-6: Admin CRM 고도화 (34파일, +3,142줄) +1. **DB 마이그레이션** — audit_log(diff 포함), admin_note, super_admin role, RLS 확장, SQL RPC 3종 +2. **Edge Functions 4개** — admin-users, admin-subscriptions, admin-payments, admin-audit-log + 공유 유틸 2개 +3. **Swagger UI** — 독립 정적 페이지 + OpenAPI 3.0 spec +4. **Admin CRUD 페이지** — 구독 생성/수정/삭제, role 변경, 감사로그 목록/상세 +5. **recharts 차트 3종** — FeatureUsage StackedBar, DAU Line, TopUsers HorizontalBar +6. **결제 이력** — DB + Payple API 병행 조회 (PaymentHistory 컴포넌트) +7. **권한 체계** — super_admin만 위험 작업, admin은 조회 전용 + +### 배포 완료 +- DB migration `20260413000004_admin_enhancement.sql` → Supabase 리모트 적용 ✅ +- Edge Functions 4개 배포 ACTIVE ✅ + +## 현재 배포 상태 + +| 게이트 | 결과 | +|---|---| +| desktop `tsc --noEmit` | ✅ | +| admin `tsc --noEmit` | ✅ | +| DB migration | ✅ 적용 | +| Edge Functions 8개 (기존 4 + 신규 4) | ✅ ACTIVE | +| git commit | ✅ (8467ecb) | + +## 서비스 현황 + +| 서비스 | 포트 | 상태 | +|--------|------|------| +| Electron + Vite | :5173 | 실행 중 | +| Web (Next.js) | :3000 | 실행 중 | +| Admin CRM (Next.js) | :3001 | 실행 중 | +| Ollama | :11434 | gemma4:e4b + qwen3:4b | +| Supabase | remote | Edge Functions 배포 | + +## 다음 세션 우선순위 + +### A) 브라우저 테스트 (V2-6 확인) +- http://localhost:3001 접속 → 전체 기능 시각 확인 +- super_admin 설정: `UPDATE auth.users SET raw_app_meta_data = raw_app_meta_data || '{"role":"super_admin"}' WHERE id = '...'` +- 구독 생성/수정/삭제 → 감사로그 기록 확인 +- 차트 렌더링 확인 (데이터 있으면) +- Swagger UI 동작 확인 + +### B) SSE 스트리밍 E2E 테스트 +- Voice Conversation에서 Premium 모델 → 토큰 단위 실시간 표시 +- TTS 파이프라인 연결 + +### C) Payple 라이브 전환 +- 테스트 키 → 라이브 키 교체 +- Webhook URL 등록 + +### D) 랜딩 페이지 업데이트 +- 결제 섹션 Payple로 업데이트 +- 가격 정책 반영 + +### E) 코드 정리 백로그 +- `supabase-server.ts` / `supabase-browser.ts` 공통 패키지 추출 +- Database 타입에 RPC 함수 타입 추가 + +## 다음 세션 시작 시 확인 + +```bash +git pull origin main # HEAD = 8467ecb +pgrep -lf "Electron\.app|next dev" +lsof -i :5173 -sTCP:LISTEN +lsof -i :3000 -sTCP:LISTEN +lsof -i :3001 -sTCP:LISTEN +``` + +## Admin CRM 접속 방법 +1. `http://localhost:3001` → Google OAuth 로그인 +2. super_admin 설정: `UPDATE auth.users SET raw_app_meta_data = raw_app_meta_data || '{"role":"super_admin"}' WHERE id = '...'` +3. JWT 갱신을 위해 로그아웃 → 재로그인 필요 + +## 의존성 / 도구 + +- Node 22.22.2 / Python 3.13.13 / Supabase CLI 2.84.2 +- Ollama 0.20.5 (gemma4:e4b 기본) +- Electron 33.4.11 / Next.js 15.5.14 +- recharts 2.15+ (apps/admin) +- SoX 14.4.2 / faster-whisper base (CPU int8) diff --git a/memory/handoff-latest.md b/memory/handoff-latest.md index 9048281..f60a67f 100644 --- a/memory/handoff-latest.md +++ b/memory/handoff-latest.md @@ -1,25 +1,36 @@ -# Session Handoff — 2026-04-13 09:30 (Phase V2-6 Admin CRM 고도화 완료) +# Session Handoff — 2026-04-13 (V2-7 완료) > From: macOS (yunchan-ui-MacBookPro) -> Last commit: `8467ecb` — chore: project_status 갱신 — Phase V2-6 Admin CRM 고도화 완료 +> Last commit: `8af75a0` — feat: V2-7 Admin 콘솔 리디자인 + 3단계 권한 + SaaS 전환 + 코드 정리 > Branch: `main` > Remote: `https://gitlab.twentyoz.kr:8443/d3r0/voice.git` -> Working tree: clean (pushed 대기) -## 이번 세션에서 한 일 (3 커밋) +## 이번 세션에서 한 일 (50 files, +2168/-933) -### Phase V2-6: Admin CRM 고도화 (34파일, +3,142줄) -1. **DB 마이그레이션** — audit_log(diff 포함), admin_note, super_admin role, RLS 확장, SQL RPC 3종 -2. **Edge Functions 4개** — admin-users, admin-subscriptions, admin-payments, admin-audit-log + 공유 유틸 2개 -3. **Swagger UI** — 독립 정적 페이지 + OpenAPI 3.0 spec -4. **Admin CRUD 페이지** — 구독 생성/수정/삭제, role 변경, 감사로그 목록/상세 -5. **recharts 차트 3종** — FeatureUsage StackedBar, DAU Line, TopUsers HorizontalBar -6. **결제 이력** — DB + Payple API 병행 조회 (PaymentHistory 컴포넌트) -7. **권한 체계** — super_admin만 위험 작업, admin은 조회 전용 +### 1. Admin CRM 콘솔 리디자인 +- 전체 페이지 D3RO Console 스타일 적용 (Overview, Users, Subscriptions, Audit Log + 모든 상세) +- `console-theme.ts` 디자인 토큰 (C 색상, FONT, panelSx, tableSx, filterBtnSx, statusBadgeSx) +- `globals.css` — 스캔라인, 그리드 패턴, 글로우, 커스텀 스크롤바 +- JetBrains Mono, 검정 배경, 라운드 패널, 오렌지 액센트 -### 배포 완료 -- DB migration `20260413000004_admin_enhancement.sql` → Supabase 리모트 적용 ✅ -- Edge Functions 4개 배포 ACTIVE ✅ +### 2. 3단계 권한 체계 +- DB: `profiles_role_check`에 `manager` 추가, RLS 7개 재작성 +- Edge Functions 4개: `requireManager`/`requireAdmin` 3단계 분기 + 배포 +- Frontend: `admin-guard.ts` 3단계 가드, RoleChangeDialog admin 제한 +- super_admin 설정: `yunchan8804@gmail.com` = super_admin + +### 3. 랜딩 페이지 SaaS 전환 +- Pricing: 1회 결제 → 월간($9.9/$19.9) / 연간($99/$199) 토글 +- 10개 언어 i18n 동기화 (pricing, FAQ, CTA) +- 다운로드 URL: placeholder (#) — 추후 교체 + +### 4. SSE 스트리밍 Premium LLM 연결 +- VoiceConversationService: `_createChatStream()` — Premium/Local 라우팅 + fallback + +### 5. 코드 정리 +- Supabase 클라이언트 공통화 → packages/api-client (browser + server 팩토리) +- RPC 함수 타입 9개 추가 (types.ts Functions 섹션) +- callAdminApi 401 버그 수정 (getUser() 선행 토큰 갱신) ## 현재 배포 상태 @@ -27,9 +38,35 @@ |---|---| | desktop `tsc --noEmit` | ✅ | | admin `tsc --noEmit` | ✅ | -| DB migration | ✅ 적용 | -| Edge Functions 8개 (기존 4 + 신규 4) | ✅ ACTIVE | -| git commit | ✅ (8467ecb) | +| DB migration (20260413000005) | ✅ 적용 | +| Edge Functions 4개 | ✅ 재배포 | +| git commit | ✅ (8af75a0) | + +## 알려진 이슈 +- `apps/web` teams/[id]/page.tsx: SelectQueryError 타입 에러 (기존 이슈, 이번 작업 무관) +- Stripe 레거시 컴포넌트 잔존 (apps/web/src/components/billing/checkout-button.tsx, portal-button.tsx) + +## 다음 세션 우선순위 + +### A) Payple 라이브 전환 +- Payple 가입 → 라이브 키 교체 (.env) +- Webhook URL 등록 +- 라이브 환경 결제 테스트 + +### B) 다운로드 URL 확정 +- GitHub/GitLab Releases 또는 자체 CDN +- 랜딩 페이지 Hero/Pricing/CTA 버튼 연결 +- Auto-update 설정 + +### C) Web teams 타입 에러 수정 +- teams/[id]/page.tsx SelectQueryError — team_members↔profiles 관계 설정 + +### D) Stripe 레거시 코드 제거 +- checkout-button.tsx, portal-button.tsx 삭제 + +### E) E2E 테스트 +- SSE 스트리밍 실제 동작 확인 (Supabase 로그인 → Premium LLM → 토큰 표시 → TTS) +- Admin CRM 3단계 권한 브라우저 테스트 ## 서비스 현황 @@ -37,54 +74,14 @@ |--------|------|------| | Electron + Vite | :5173 | 실행 중 | | Web (Next.js) | :3000 | 실행 중 | -| Admin CRM (Next.js) | :3001 | 실행 중 | -| Ollama | :11434 | gemma4:e4b + qwen3:4b | +| Admin CRM | :3001 | 실행 중 | +| Landing (Vite) | :5174 | 실행 중 | +| Ollama | :11434 | gemma4:e4b | | Supabase | remote | Edge Functions 배포 | -## 다음 세션 우선순위 - -### A) 브라우저 테스트 (V2-6 확인) -- http://localhost:3001 접속 → 전체 기능 시각 확인 -- super_admin 설정: `UPDATE auth.users SET raw_app_meta_data = raw_app_meta_data || '{"role":"super_admin"}' WHERE id = '...'` -- 구독 생성/수정/삭제 → 감사로그 기록 확인 -- 차트 렌더링 확인 (데이터 있으면) -- Swagger UI 동작 확인 - -### B) SSE 스트리밍 E2E 테스트 -- Voice Conversation에서 Premium 모델 → 토큰 단위 실시간 표시 -- TTS 파이프라인 연결 - -### C) Payple 라이브 전환 -- 테스트 키 → 라이브 키 교체 -- Webhook URL 등록 - -### D) 랜딩 페이지 업데이트 -- 결제 섹션 Payple로 업데이트 -- 가격 정책 반영 - -### E) 코드 정리 백로그 -- `supabase-server.ts` / `supabase-browser.ts` 공통 패키지 추출 -- Database 타입에 RPC 함수 타입 추가 - -## 다음 세션 시작 시 확인 - -```bash -git pull origin main # HEAD = 8467ecb -pgrep -lf "Electron\.app|next dev" -lsof -i :5173 -sTCP:LISTEN -lsof -i :3000 -sTCP:LISTEN -lsof -i :3001 -sTCP:LISTEN -``` - -## Admin CRM 접속 방법 -1. `http://localhost:3001` → Google OAuth 로그인 -2. super_admin 설정: `UPDATE auth.users SET raw_app_meta_data = raw_app_meta_data || '{"role":"super_admin"}' WHERE id = '...'` -3. JWT 갱신을 위해 로그아웃 → 재로그인 필요 - -## 의존성 / 도구 +## 의존성 - Node 22.22.2 / Python 3.13.13 / Supabase CLI 2.84.2 -- Ollama 0.20.5 (gemma4:e4b 기본) -- Electron 33.4.11 / Next.js 15.5.14 -- recharts 2.15+ (apps/admin) +- Ollama 0.20.5 / Electron 33.4.11 / Next.js 15.5.14 +- @supabase/ssr 0.10.0 / recharts 2.15+ - SoX 14.4.2 / faster-whisper base (CPU int8)