d3ro-voice/memory/handoff-latest.md

3.9 KiB

Session Handoff — 2026-04-12 22:00 (Phase 3.3 SaaS 인프라 완결)

From: macOS (yunchan-ui-MacBookPro) Last commit: 3ef971e — chore: project_status 갱신 — Admin CRM 독립 프로젝트 완료 Branch: main Remote: https://gitlab.twentyoz.kr:8443/d3r0/voice.git Working tree: clean (pushed)

이번 세션에서 한 일 (12 커밋)

Phase 3.2-B 배포 + 버그 수정

  • Payple Edge Functions 3개 (payple-checkout/webhook/manage) 배포 ACTIVE
  • DB migration 20260412000002_payple_billing.sql 적용
  • Electron OPEN_BILLING: dev/prod URL 분기 (app.isPackaged)
  • CloudSyncService: stored token 없을 때 auth-changed null emit 누락 수정

라이선스 UI 빅뱅

  • LicenseTab/LicenseModal: LemonSqueezy 키 입력 제거 → Payple 구독 UI
  • useLicenseState 훅: 공용 상태 관리 추출
  • PREMIUM_MODEL_LIMITS: 3곳 중복 → @d3ro/core/constants 단일 소스
  • i18n: LS 키 18개 삭제, 구독 키 13개 추가 (12 locale)

마스터플랜 4개 작업

  1. LemonSqueezy 코드 제거 — LicenseService ~150줄 삭제
  2. Payple 정기 갱신 크론payple-renew Edge Function + GitHub Actions (매일 01:00 UTC)
  3. 관리자 CRMapps/admin 독립 Next.js 앱 (포트 3001)
  4. SSE 스트리밍sse-parser.ts + invokeFunctionStream() + chatStream() 업그레이드

Admin CRM 독립화 + 버그 수정

  • apps/admin 독립 프로젝트로 분리 (apps/web에서 제거)
  • RLS 재귀 참조 수정 → app_metadata 기반
  • OAuth 콜백 쿠키 설정 수정
  • middleware 추가 (Supabase 세션 갱신)

현재 배포 상태

게이트 결과
desktop tsc --noEmit
web tsc --noEmit
admin tsc --noEmit
Payple Edge Functions 4개 ACTIVE
DB migrations 4개 적용
git push

서비스 현황

서비스 포트 상태
Electron + Vite :5173 실행 중
Web (Next.js) :3000 실행 중
Admin CRM (Next.js) :3001 실행 중
Ollama :11434 gemma4:e4b + qwen3:4b
Supabase remote Edge Functions 배포

다음 세션 우선순위

A) Admin CRM 기능 강화

  • 유저 role 변경 기능 (admin → user / user → admin)
  • 구독 수동 변경 (tier 변경, 기간 연장)
  • 사용량 차트 (recharts)
  • 결제 이력 조회

B) SSE 스트리밍 E2E 테스트

  • Voice Conversation에서 Premium 모델 선택 → 토큰 단위 실시간 표시 확인
  • TTS 파이프라인과 연결 확인

C) Payple 라이브 전환 준비

  • 테스트 키 → 라이브 키 교체
  • Webhook URL 등록 (Payple 관리자)
  • PAYPLE_SITE_URL 프로덕션 값 설정

D) 랜딩 페이지 (site/) 업데이트

  • 결제 섹션 Payple로 업데이트
  • 가격 정책 반영

E) 코드 정리 백로그

  • supabase-server.ts / supabase-browser.ts 공통 패키지 추출
  • LicenseService의 오프라인 유예/재검증 로직 (LS 제거 후 불필요할 수 있음)
  • ActivateLicenseParams/Result 타입 정리

다음 세션 시작 시 확인

git pull origin main       # HEAD = 3ef971e
pgrep -lf "Electron\.app|next dev"
lsof -i :5173 -sTCP:LISTEN
lsof -i :3000 -sTCP:LISTEN
lsof -i :3001 -sTCP:LISTEN
# 죽어있으면
nohup npm run dev > /tmp/d3ro-desktop.log 2>&1 & disown
nohup npm --workspace=@d3ro/web run dev > /tmp/d3ro-web.log 2>&1 & disown
nohup npm --workspace=@d3ro/admin run dev > /tmp/d3ro-admin.log 2>&1 & disown

Admin CRM 접속 방법

  1. http://localhost:3001 → Google OAuth 로그인
  2. admin 권한 필요: UPDATE auth.users SET raw_app_meta_data = raw_app_meta_data || '{"role":"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
  • SoX 14.4.2 / faster-whisper base (CPU int8)