- 다크/gradient/violet/purple/blur/이모지 전부 제거, --jsm 토큰 기반 라이트 UI로 재구성
(폼 필드 bg-white+jsm-line 보더+jsm-accent 포커스, navy 없이 flat 카드)
- 스토리 우선 흐름 신설: 이야기 textarea → "가사 만들기"(POST /api/studio/story) →
제목/가사/스타일 편집 가능 미리보기 → "음악 만들기"(POST /api/studio/generate, custom 모드)
- 401/429/503 각각 로그인 CTA·제한 안내·서비스 준비중 메시지로 분기 처리
- 기존 simple/custom 직접 입력 모드는 "직접 입력" 탭으로 보존, taskId 폴링 로직 그대로 유지
- 생성 완료 시 오디오 플레이어 노출 + 로그인 사용자는 POST /api/studio/tracks로 best-effort
자동 저장(세션 내 생성 트랙만 대상, 실패해도 재생에는 영향 없음)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
app/music/page.tsx·app/music/samples/page.tsx 순수 시각 변경(className/style만).
다크 히어로(bg-black/gradient)와 샘플 카드의 violet 그라데이션·블러 글래스
CTA 밴드를 --jsm-navy/accent/accent-soft/surface-alt/line/ink 토큰으로 치환해
사주·showcase 재스킨과 동일한 navy 밴드 무테두리 flat + 흰 CTA 관용구로 정렬.
영상 이모지는 인라인 SVG 아이콘으로 교체. 데이터·구조는 변경 없음.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- lib/music/story-prompt.ts: MusicStory 스키마 + Gemini 응답 파싱/검증(타로 prompt.ts 방어 패턴 포팅)
- app/api/studio/story/route.ts: 로그인 인증 후 Gemini 모델 폴백(2.5-pro→2.5-flash→2.0-flash)으로 가사 JSON 생성. 일일 사용량은 미집계(생성 확정 전 초안 단계)
- app/api/studio/callback/route.ts: Suno webhook 수신용 최소 200 응답 엔드포인트
- app/api/studio/generate/route.ts: 인증(401) + 일일 제한(429, MUSIC_DAILY_LIMIT) 추가, Suno 생성 성공 시에만 recordUsage('music') 기록
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
app/work/saju/page.tsx 순수 시각 변경(className/style만). 히어로·MY RECORDS·
바로시작 CTA·PRICING 비교표·FAQ 전 구간의 #04102b/violet/gradient 하드코드를
--jsm-navy/ink/accent/accent-soft/line/surface-alt 토큰으로 치환하고
repeating-linear-gradient 텍스처와 다크 카드 테두리(#1a3a7a)를 제거해
result 페이지(Phase 2.5)와 동일한 navy 밴드 무테두리 flat 관용구로 정렬.
데이터 조회·상태·JSX 구조는 변경 없음.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- SajuIcon 컴포넌트 및 12개 stroke 기반 SVG 아이콘 정의
- SECTION_ICON_ORDER 배열로 섹션 순서 관리(기질·오행·지지·신살·재물·직업·애정·건강·대운·세운·황금기·종합)
- LottoIcon 추가 export
- currentColor 사용으로 색상 커스터마이징 가능
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- TopNav LINKS에 /work/saju, /tarot 추가 (5링크, 모바일 드로어 자동 반영)
- CLAUDE.md: 핵심 IA에 사주/타로 공개 라우트 추가, 숨김 서비스 표에서
/work/saju* 제거(공개 전환), 사주 시스템 안내문 갱신, 파일 구조에
tarot/·api/tarot/·lib/tarot/·lib/ai-usage.ts 반영
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
saju_records와 GET /api/tarot/readings를 병합 조회해 마이페이지 5번째
탭으로 노출한다. 사주는 결과 페이지로 바로 돌아갈 수 있는 링크를,
타로는 뽑은 카드·요약·조언/주의 접이식을 제공한다.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- page.tsx: hasPaid를 orders 'saju_detail' paid 조회 대신 로그인 여부(!!user)로 산출
- SajuAISection: 미로그인 시 "개편 준비 중" 안내를 /login?next= 유도 CTA로 교체
- analyze fetch가 429(일일 무료 횟수 초과)를 받으면 전용 에러 메시지 표시(재시도 버튼 숨김)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
lib/tarot/prompt.ts에 TarotInterpretation 스키마·시스템 프롬프트·JSON
파싱/검증 유틸을 추가하고, app/api/tarot/interpret/route.ts에서 사주
analyze와 동일한 Gemini 모델 폴백(getGenerativeModel systemInstruction +
generationConfig) 패턴을 재사용해 인증(401)→일일제한(429)→입력검증(400)
→API키(503)→호출 순서로 처리한다. GEMINI_API_KEY 미설정 시 예시 데이터
대신 503을 반환해 실데이터 오염을 막고, 스키마 검증 실패 시 사유를
주입해 1회 reroll한다.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
web-ui(src/pages/tarot/data/cards.js)의 메이저 22장·마이너 56장 데이터와
buildMinor/buildMinorDetails 생성 로직을 lib/tarot/cards.ts로 값 변경 없이
포팅. TarotCard/Spread 타입 부여, SPREADS는 three_card만 유지.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- DELETE: app/admin/packs 페이지 디렉토리 전체 제거
- MODIFY: AdminSidebar.tsx에서 '팩 자료' 네비게이션 항목 제거
- VERIFY: /api/admin/packs API 엔드포인트는 유지 (products·mypage 공유)
- VERIFY: npm test (4 passed) + npm run build (success, no errors)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- status 타입에 'in_progress' | 'completed' | 'delivered' 추가
- STATUS 맵 확장: 3개 신규 상태 추가 및 accepted 라벨 변경
* accepted: '수락 · 발주' (기존 녹색)
* in_progress: '진행중 · 발주' (파란색)
* completed: '완료 · 발주' (에메랄드)
* delivered: '납품 완료 · 발주' (틸)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
견적 수락 시 발주서로 전환되는 프로젝트를 마이페이지에 표면화.
GET /api/projects로 quotes+milestones를 조회해 총액·마일스톤 타임라인을 표시하고,
POST /api/projects/link로 공개 견적 코드를 계정에 연결하는 폼을 추가했다.
기존 requests 탭의 의뢰 카드 리스트는 그대로 유지(탭 key 호환), 라벨만 발주·진행으로 변경.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>