186ae546f2
feat(deepfield): 쇼케이스 카드·그리드 (시드 제너러티브 타일 + 호버 시차)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-13 00:29:12 +09:00
eb1ecf0021
feat(deepfield): HeroField WebGL 파티클 필드 (full/lite/static + 커서 자기장)
2026-06-13 00:19:16 +09:00
4b85c52cfe
refactor(deepfield): ScrollReveal variant별 복원 클래스 명시
2026-06-13 00:14:27 +09:00
4223004c24
feat(deepfield): ScrollReveal 스크롤 연출 컴포넌트
2026-06-13 00:06:09 +09:00
bd13641f5e
feat(deepfield): 렌더 모드 판정(TDD) + useFieldMode 훅
2026-06-13 00:05:17 +09:00
5cfa124d38
feat(deepfield): three.js + 다크 토큰 + 쇼케이스 8슬롯 데이터
2026-06-13 00:03:43 +09:00
64259a85b5
docs(plan): Deep Field 랜딩 구현 계획 — WebGL 히어로·쇼케이스·다크 재조립 9태스크
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 23:47:58 +09:00
70068ff3d7
docs(spec): Deep Field 랜딩 경험 — 다크 캔버스 + WebGL 쇼케이스 설계
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 23:42:55 +09:00
055469a2d5
fix(outsourcing): 의뢰 폼 [다음] 무반응 — goNext 스테일 클로저 제거
...
useCallback deps([step])에 stepValid가 읽는 state가 없어 마운트 시점
빈 상태 기준으로 검증되던 회귀(b4f57c8 ) 수정. 일반 함수로 전환.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 07:33:10 +09:00
76fb722a27
fix(docs): CLAUDE.md 사실 정정
...
- Next.js 버전 15 → 16 (package.json ^16.2.6 기준)
- GET /api/packs/sign-link → POST (실제 route.ts export async function POST)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-12 05:56:38 +09:00
7f5c7fcb20
chore: music 구매 고아 경로 차단(→/products) + CLAUDE.md 현행화
2026-06-12 05:54:18 +09:00
dbd4bbf21b
feat(mypage): 내 의뢰 타임라인 + 추적 링크
2026-06-12 05:47:12 +09:00
5e90295d26
fix(admin): 추적링크 복사 상태 리셋 + 견적 뱃지 색 정리
2026-06-12 05:43:00 +09:00
32b07e31fa
feat(admin): 의뢰 관리 8종 상태 머신 + 견적 연결·추적 링크 표시
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-12 05:38:40 +09:00
d62653e834
feat(quote): 거절 액션 + 의뢰 상태 동기화 + 관리자 알림
2026-06-12 05:31:25 +09:00
5ceae7e90b
fix(admin): 견적 재발송 방어 + title 타입 검증
...
- POST /api/admin/quotes: title을 typeof + trim() 검증으로 falsy 문자열 방어
- POST /api/admin/quotes/[id]/send: sent/accepted/rejected 상태면 200 조기 반환(alreadySent: true)으로 중복 발송 차단
- 견적 편집 UI: isSentStatus 플래그로 발송 버튼 비활성화·라벨 "발송됨" 표시, alreadySent 응답 시 안내 alert 처리
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-12 05:28:22 +09:00
70abad31b7
feat(admin): 의뢰→견적 연결 생성 + 견적 발송(메일·상태 동기화)
2026-06-12 05:23:01 +09:00
f5cfb8bd6f
feat(portal): /track/[token] 비회원 의뢰 추적 페이지
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-12 05:13:58 +09:00
b4f57c85ec
refactor(outsourcing): 입력 스타일 상수화 + goNext 방어적 재검증
...
1. 반복되는 INPUT_STYLE 객체를 파일 상단 상수로 추출하여 5곳에서 재사용
- textarea (단계③)
- input[name] (단계④)
- input[email] (단계④)
- input[phone] (단계④)
- button.prev (네비게이션)
2. goNext 함수 첫 줄에 방어적 재검증 추가
- if (!stepValid(step)) return; 추가
- step dependency 복원 (useCallback 의존성 배열)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-12 05:10:03 +09:00
429780d65d
feat(outsourcing): 4단계 의뢰 폼 + 접수 완료 추적 안내
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-12 05:00:46 +09:00
8e820760e2
feat(contact): 구조화 필드 + 추적 토큰 + 고객 접수 확인 메일
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-12 01:32:31 +09:00
146836f56b
fix(portal): 토큰 DEFAULT·UNIQUE 인덱스 보장 + 메일 제목 이스케이프 제거
...
- contact_requests.public_token: 인라인 UNIQUE 제거, 백필 UPDATE 직후 SET DEFAULT + CREATE UNIQUE INDEX IF NOT EXISTS 패턴으로 교체 (라이브 DB 멱등성 보장)
- quotes.public_token: ADD COLUMN IF NOT EXISTS + SET DEFAULT + 백필 UPDATE + CREATE UNIQUE INDEX IF NOT EXISTS 4줄 구조로 교체 (인라인 UNIQUE NO-OP 문제 해소)
- sendQuoteSentEmail / sendQuoteDecisionEmail subject에서 escapeHtml() 제거 — 메일 제목은 평문, HTML 본문 이스케이프는 유지
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-12 01:29:36 +09:00
f7d26c4c3f
feat(portal): 의뢰 상태 머신(TDD) + 의뢰/견적 메일
2026-06-12 01:21:30 +09:00
5077f6ad17
feat(db): 고객 포털 — contact_requests 상태머신·토큰 + quotes FK
2026-06-12 01:18:51 +09:00
5751cddcea
docs(plan): 리뉴얼 Phase 3 구현 계획 — 외주 고객 포털 + 레거시 정리
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-12 01:16:46 +09:00
a3933c1081
feat(home): 소프트웨어 진열 섹션 products 동적 연동
...
getListedProducts(createAdminClient()) try/catch로 상위 3개 카드 렌더,
0개이면 기존 출시 준비 중 폴백 유지. force-dynamic으로 항상 최신 목록 노출.
2026-06-12 00:26:03 +09:00
d2a20c5cb7
feat(admin): 제품 관리 — CRUD + 파일 업로드·제품 배정
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-12 00:20:48 +09:00
e713ebceee
docs(plan): Phase 2 재개 체크포인트 — P2-8까지 완료, P2-9 미커밋 중단
2026-06-11 13:21:01 +09:00
dc5e9d431c
fix(admin): 주문 취소에도 confirm 확인 추가
2026-06-11 09:17:57 +09:00
7b02e28f6c
feat(admin): 주문 관리 페이지 — 입금 확인 원클릭 + 다운로드 활성화 메일
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 09:13:34 +09:00
8dafb98f47
fix(products): 모달 401 세션만료 처리 + callback open redirect 방어 + 초기 포커스
...
- BankTransferModal: POST /api/orders 401 응답 시 setAuthState('guest')로 전환 (에러 텍스트 대신 로그인 유도 UI 복귀)
- BankTransferModal: 모달 열릴 때 closeBtnRef.current?.focus() 호출 (접근성 초기 포커스)
- auth/callback: next 파라미터를 safeNext 패턴으로 검증 — startsWith('/') && !startsWith('//') && !startsWith('/\') 미충족 시 /mypage 폴백
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 09:11:05 +09:00
199dae0ee5
feat(products): 동적 카탈로그·상세 페이지 + 계좌이체 구매 모달
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 09:07:00 +09:00
f151af89f3
feat(downloads): 다운로드 검증을 orders 단일 소스로 교체 + 내 제품 제품별 그룹핑
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-11 08:47:32 +09:00
3fa865a6e7
fix(orders): user 기준 rate limit + 상품 조회 예외 처리
...
- checkRateLimit('orders:{user.id}', 60_000, 5) 인증 직후 적용 → 429 반환
- getProductById try/catch 추가 → DB 장애 시 500 '상품 조회에 실패했습니다'
- lib/order-emails.ts sendOrderPaidEmail HTML 이스케이프 대상 없음 (해당 없음)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 08:41:42 +09:00
1d5e7254ed
feat(orders): 계좌이체 주문 생성 API + 접수/입금확인 메일
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 08:36:22 +09:00
692fb504d9
feat(products): orders 기반 제품/파일 조회 헬퍼
2026-06-11 08:32:44 +09:00
e86ca27831
feat(db): 음악 팩 구매 이력 contact_requests → orders 멱등 이관
2026-06-11 08:28:34 +09:00
5d90ac310e
feat(db): products 카탈로그 확장 + 음악 제품 시드 + pack_files.product_id 백필
2026-06-11 08:28:31 +09:00
cf89e8cbdb
feat(products): vitest 도입 + 제품 접근 확장 로직 (music tier 하위 호환)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 08:24:33 +09:00
fe055fd0d0
docs(plan): 리뉴얼 Phase 2 구현 계획 — orders 단일 소스 제품 판매 시스템
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 08:21:39 +09:00
gahusb
0580fe8f5a
Merge pull request #1 from gahusb/feature/renewal-phase1
...
리뉴얼 Phase 1: 외주+소프트웨어 2축 풀 리디자인 + 레거시 서비스 숨김
2026-06-11 03:13:35 +09:00
a25b645933
fix(renewal): mypage 숨김 링크 교체 + /products 스텁 + sitemap 정리
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 03:04:06 +09:00
c447294c84
fix(quote): 보라 잔재·navy 리터럴을 jsm 토큰으로 정리
2026-06-11 02:49:19 +09:00
c2d7455f65
refactor(design): 노출 페이지 잔여 글래스·다크 스타일 정리
...
- layout.tsx: GlassFilter 렌더·import 제거 (LiquidGlass.tsx 파일은 숨김 페이지용으로 유지)
- payment/success,fail: #04102b 다크 헤더 → jsm-navy 토큰, h2 색상 jsm-ink 토큰으로 교체
- legal/terms,privacy,refund: h1 text-[#04102b] → jsm-ink CSS 변수
- portfolio/[token]: bg-slate-950 + 다크 radial-gradient → jsm-bg/surface/navy 라이트 테마
- quote/[token]: #0a0f1e/#0f172a 전체 다크 테마 → jsm-* 라이트 토큰 기반으로 전면 교체 (print CSS·수락/거절 로직 무수정)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 02:44:36 +09:00
4bd5400406
feat(mypage): 4탭 재구성 + 전문 톤 리디자인 (데이터·다운로드 로직 무수정)
...
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-11 02:31:40 +09:00
76994c28f1
fix(login): 포커스 링·type=button·disabled 대비 접근성 보완
...
- 이메일/비밀번호 input에 focus-visible:ring-2 추가
- Google 로그인 버튼에 type=\"button\" 명시
- disabled 상태 배경 jsm-line → jsm-ink-faint로 변경 (대비 개선)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-11 02:18:37 +09:00
cd1f67d076
feat(login): 로그인 페이지 전문 톤 리디자인 (인증 로직 무수정)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 02:14:43 +09:00
e0b6120bb6
fix(outsourcing): 착수금 표기를 기존 공표 조건(30%)으로 정정
2026-06-11 02:12:29 +09:00
a11006fab5
feat(outsourcing): 외주 의뢰 페이지 신설 + work 라우트 리다이렉트
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 02:04:38 +09:00
b846a713c1
fix(seo): jsonLd Service URL을 /outsourcing으로 정렬
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 01:56:58 +09:00