Commit Graph

331 Commits

Author SHA1 Message Date
f693c4c5b4 fix(phase1): ad-channels API 입력 견고성 — JSON 파싱 try/catch + 문자열 타입 가드
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 15:22:17 +09:00
3e031a1c80 feat(phase1): ad_channels 테이블 + admin CRUD API
- Migration: ad_channels table (uuid, name, url, status, memo)
- Routes: GET/POST /api/admin/ad-channels (list/create)
- Routes: PATCH/DELETE /api/admin/ad-channels/[id] (update/delete)
- Auth: admin_token verification via verifyAdminTokenNode
- RLS: service_role only, no additional policies

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 15:19:09 +09:00
90be0d6316 feat(phase1): admin 견적 리스트 발주 뱃지 + 진행 상태 라벨 확장
- 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>
2026-07-02 15:16:49 +09:00
976511df44 feat(phase1): mypage 발주·진행 섹션 — projects API 배선 + 견적코드 연결
견적 수락 시 발주서로 전환되는 프로젝트를 마이페이지에 표면화.
GET /api/projects로 quotes+milestones를 조회해 총액·마일스톤 타임라인을 표시하고,
POST /api/projects/link로 공개 견적 코드를 계정에 연결하는 폼을 추가했다.
기존 requests 탭의 의뢰 카드 리스트는 그대로 유지(탭 key 호환), 라벨만 발주·진행으로 변경.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 15:11:58 +09:00
3db3d91a40 feat(phase1): /showcase 제작 사례 허브 + TopNav 제작 사례 + robots 죽은 경로 정리
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 15:05:31 +09:00
e5ff5ec84f feat(phase1): showcase 데모 메타 단일 소스 + 무결성 테스트
- /showcase 제작 사례 허브가 소비할 데모 8종 메타 모듈화
- slug/title/description/tags 필수 필드 검증 테스트 3건
- Task 2(showcase 라우트)가 SHOWCASE_SAMPLES import 가능

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 15:01:43 +09:00
6234f4277a docs(phase1): 외주 코어 구현 플랜 (8 Task)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AAtcmKKtqDUe4NyVgy1aLQ
2026-07-02 15:00:13 +09:00
559134100d docs(phase1): 외주 코어 설계 — 발주서 통합·제작 사례 허브·광고 관리 (WS1~5)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AAtcmKKtqDUe4NyVgy1aLQ
2026-07-02 14:55:57 +09:00
1b75b27188 chore(phase0): DB 마이그레이션(DROP 3테이블+packages 행) + CLAUDE.md 정합화
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 14:27:50 +09:00
7366c18692 chore(phase0): 고아 API 제거 — track/[token](페이지 직접조회로 대체됨)·saju/lotto
- app/api/track/[token]: 페이지에서 Supabase 직접 조회로 대체됨
- app/api/saju/lotto: 프론트 fetch 0회, 외부 saju-engine 전용

참조: Task 6 (Phase 0 cleanup)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 14:25:05 +09:00
8c5858b350 chore(phase0): deepfield 파티클 잔재 3파일 + three/@types/three 의존성 제거
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 14:22:01 +09:00
592b3fcf4e chore(phase0): redirect에 가린 죽은 페이지 4종 + 전이 고아(ContactForm·freelance-portfolio) 제거
- /work → /outsourcing 리다이렉트에 가려진 app/work/page.tsx 제거
- /work/freelance → /outsourcing 리다이렉트에 가려진 freelance/ 디렉토리 제거
- /work/website → /portfolio 리다이렉트에 가려진 app/work/website/page.tsx 제거
- /music/packs → /products 리다이렉트에 가려진 app/music/packs/ 디렉토리 제거
- 유일 소비처(freelance/)가 삭제된 ContactForm.tsx 제거
- 유일 소비처(/work, /work/freelance)가 삭제된 freelance-portfolio.ts 제거

samples/** 8종과 layout.tsx는 유지됨.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 14:15:30 +09:00
1e926fcb19 chore(phase0): PortOne 잔재 제거 — 계좌이체 단일 소스 확정, saju 결제 CTA 제거
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 14:12:38 +09:00
8e1cf9b4e1 chore(phase0): packages·subscription 제거 — 페이지/API/cron/vercel.json + 파급(stats·members·saju) 수정
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 14:07:56 +09:00
88fe56163d chore(phase0): eBay 세트 제거 — 문진·문서 admin/API/lib/CONTENT + cheerio
Delete:
- app/api/questionnaire/ (submit/route.ts)
- app/admin/questionnaire/ (page.tsx)
- app/api/admin/questionnaire/ (route.ts + [id]/route.ts)
- app/admin/documents/ (page.tsx)
- app/api/admin/documents/ ([filename]/route.ts)
- lib/ebay-tools/ (crawler.ts·pricing.ts·ai-analyzer.ts·types.ts)
- CONTENT/ebay-tool-{questionnaire,proposal}.html
- CONTENT/ARCHITECTURE_EBAY_PARTS_TOOL.md

Modify:
- app/admin/components/AdminSidebar.tsx: Remove NAV_ITEMS for /admin/documents & /admin/questionnaire
- package.json: Remove cheerio dependency

Verify: npm test (4 files, 20 tests PASS), npm run build OK

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 14:02:47 +09:00
0c6ebb2eaa docs(phase0): 정리·삭제 구현 플랜 (7 Task)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AAtcmKKtqDUe4NyVgy1aLQ
2026-07-02 14:00:40 +09:00
9241eac4e1 docs(refactor): SaaS 운영 리팩토링 로드맵 + Phase 0 정리·삭제 설계
비전 재정의(외주 메인 + 사주·타로·음악 별도 서비스) 기반 Phase 0~3 로드맵.
Phase 0: eBay 세트·packages/subscription·PortOne 잔재·죽은 페이지·고아 코드 삭제 설계.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AAtcmKKtqDUe4NyVgy1aLQ
2026-07-02 13:47:29 +09:00
gahusb
65f0a6bb41 Merge PR #2: 라이트 고craft 재설계 (홈·외주·제품 3면)
Deep Field 다크 → 라이트 단일 시스템 재설계. 검증 통과(test 20/20, build 86/86).
2026-06-30 16:15:35 +09:00
7e1105f574 fix(redesign): ScrollReveal reduced-motion 시 transition까지 생략(정적 표시)
기존엔 스크롤 스태거만 건너뛰고 700ms 전환은 남았음 → instant 분기로 완전 정지.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2N6SziVSPfavx1j5rAs52
2026-06-30 14:53:23 +09:00
f4fd0f60c9 chore(redesign): 재설계가 죽인 다크/스크롤큐 CSS 제거 + 연결선 gradient 제거
globals.css: --jsm-dark-* 토큰, --jsm-accent-bright, .jsm-dark-form,
.df-scroll-dot/@keyframes df-scroll-cue 제거 (전부 소비처 0).
홈 PROCESS 연결선 linear-gradient → solid 인셋 라인.

유지: --kx-*/.kx-*(/, packages·work·music 사용), .gradient-text(/portfolio/[token] 사용)
— 숨김·레거시 라우트라 이번 범위 밖.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2N6SziVSPfavx1j5rAs52
2026-06-30 14:52:22 +09:00
37465701af feat(redesign): 제품 페이지 craft 정렬(공통 언어)
max-w-5xl→6xl, 타입 스케일·여백 리듬·카드 스펙(rounded-2xl/hover)을
홈·외주와 통일. surface↔surface-alt 교차 4섹션.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2N6SziVSPfavx1j5rAs52
2026-06-30 14:49:10 +09:00
c3be57ea1f feat(redesign): 외주 페이지 + 의뢰폼 라이트 전환
페이지: 다크 캔버스/HeroField/스크림 제거, surface↔surface-alt 교차 8섹션.
HERO 비대칭 2단(우 FeedMock 목업). 앵커(#showcase/#portfolio/#process/#contact) 유지.
폼: --jsm-dark-* 전량 라이트 치환, jsm-dark-form 제거. 흰 카드 위 surface-alt 입력으로 가독성 확보.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2N6SziVSPfavx1j5rAs52
2026-06-30 14:48:00 +09:00
897e37f14e feat(redesign): 홈 라이트 재구성 + 2축 복원 + 히어로 제품 목업
다크 캔버스/HeroField/스크림 폐기. surface↔surface-alt 교차 7섹션.
히어로 비대칭 2단(좌 텍스트 / 우 MockWindow=DashboardMock).
누락됐던 "2축 소개"(외주/완성SW) 섹션 복원. CTA 평면 navy(radial 제거).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2N6SziVSPfavx1j5rAs52
2026-06-30 14:44:15 +09:00
7c6238508b feat(redesign): TopNav 다크 라우트 분기 제거 → 단일 라이트 네비
DARK_ROUTES/isDark 및 다크 팔레트 삼항 전량 제거.
전 라우트 동일 라이트 셸 (스크롤 시 surface+line+shadow).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2N6SziVSPfavx1j5rAs52
2026-06-30 14:41:40 +09:00
989cc25465 feat(redesign): 쇼케이스 그래디언트 타일 → 라이트 MockWindow 카드
lib/showcase.ts를 mock 키 기반으로 교체(보라 4슬롯 제거, 목업 6종 다양화).
ShowcaseCard 캔버스/시드/그래디언트 제거 → surface-alt 스테이지 + 흰 MockWindow.
키 목록을 JSX-free keys.ts로 분리해 vitest 가드레일 테스트 추가.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2N6SziVSPfavx1j5rAs52
2026-06-30 14:40:56 +09:00
c1afb58bcd feat(redesign): MockWindow 라이트 목업 시스템(프레임+6스크린+레지스트리)
파티클 대체 craft 핵심. 실데이터 0, --jsm-* 라이트 토큰만.
dashboard/feed/match/commerce/site/booking 6종 + 레지스트리.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2N6SziVSPfavx1j5rAs52
2026-06-30 14:38:07 +09:00
b2bd7b1b31 docs(redesign): 라이트 재설계 구현 계획 (7 Task)
MockWindow 목업 시스템 → 쇼케이스 전환 → TopNav 단일화 →
홈/외주/제품 3면 라이트 재작성 → 죽은 CSS 제거·검증.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2N6SziVSPfavx1j5rAs52
2026-06-30 14:35:40 +09:00
e5b907dc38 docs(redesign): 라이트 고craft 재설계 설계 문서 확정
홈·외주·제품 3면을 라이트 --jsm-* 단일 시스템으로 통일.
Deep Field 다크/파티클 폐기, 히어로에 코드 UI 목업(MockWindow) 도입,
가짜 그래디언트 쇼케이스 → 실화면 느낌 목업 그리드, 죽은 CSS 정리.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2N6SziVSPfavx1j5rAs52
2026-06-30 14:32:18 +09:00
d10fe981f0 fix(deepfield): 히어로 텍스트 대비 복구 — 좌측 앵커 스크림 + 파티클 블룸 완화
세로 중앙이 투명한 스크림 위에 헤드라인이 놓여(items-center) 글자 뒤
받침이 없었고, AdditiveBlending 파티클 3000개가 텍스트 뒤를 밝게 씻어내
흰 글씨가 안 보이던 문제 수정.

- page.tsx: 스크림을 좌측 앵커 다크(좌→우 0.94→0) + 상하 비네트 2겹으로 교체
- HeroField: StaticField radial 광원 밝기 완화(0.45→0.30, 0.16→0.10) + 우측 이동
- HeroField: 파티클 수 3000→1600(lite 800→500), 셰이더 알파 0.45+0.25→0.28+0.18

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YQNcycdLJVtoSKN1tHZU6Q
2026-06-26 18:21:39 +09:00
b705f35c2d feat(outsourcing): Deep Field 재스킨 + 쇼케이스 풀 그리드 + 운영 실증 카피
- 라이트 → 다크 캔버스 전환 (메인과 동일 비주얼 언어: 다크 루트 div + -mt-16 hero + border-t 섹션 리듬 + 모노 라벨 헤더)
- Hero 축약 ~60vh + HeroField 배경
- #showcase 섹션 ShowcaseGrid variant="full"(8슬롯), #portfolio 하위호환 앵커 유지
- 구 SAMPLES(/work/website/samples) 노출 링크 제거 — 쇼케이스가 대체
- 운영 실사례/제공분야/프로세스/FAQ 다크 카드 + ScrollReveal 스태거
- OutsourcingRequestForm 다크 스킨(스타일 값만, 로직 diff 0) + placeholder dark-soft
- "7년차"·"대기업" 잔존 카피 전부 운영 실증 톤으로 교체 (metadata 포함)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 01:10:54 +09:00
4cd4a50869 feat(home): Deep Field 다크 캔버스 재조립 + 운영 실증 카피
- HERO/SHOWCASE/PROCESS/PROOF/SOFTWARE+CTA 5섹션 다크(--jsm-dark-bg) 재구성
- HeroField WebGL 배경 + -mt-16/pt-16로 상단 라이트 띠 제거 (PublicShell 무수정)
- "생각을 동작하는 소프트웨어로." 거대 타이포(clamp, -0.04em)
- 경력·소속 표현 전면 제거 → "24시간 돌아가는 실서비스 직접 설계·운영" 신뢰 축
- CountUp 카운트업 스탯 + 스크롤 큐 keyframes(motion-safe 가드)
- layout metadata·jsonLd 카피 동일 톤 교체 (jobTitle "소프트웨어 엔지니어")

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 00:57:38 +09:00
01c31e3e5d feat(nav): 다크 라우트 인지형 네비게이션 2026-06-13 00:40:20 +09:00
e22622d36d fix(deepfield): home 그리드 지그재그 3-wide 배치(빈 칸 제거) + 데드 CSS 정리
- ShowcaseGrid: index 0·3·4 → feature/col-span-2, 1·2·5 → standard
  wide 3장+standard 3장 = 9셀(3×3) 완전 충전, Row 2 col3 빈 칸 제거
- ShowcaseCard: ring-1(인라인 boxShadow에 덮이는 데드 클래스) 제거
  transition-[...]에서 미사용 border-color 제거

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 00:36:37 +09:00
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