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
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
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
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
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
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
be3cc3752e
feat(home): 외주+소프트웨어 2축 메인 페이지 풀 리디자인 + 메타데이터 교체
2026-06-11 01:53:08 +09:00
89dc5364d1
fix(nav): 모바일 드로어 접근성 (aria-expanded·Esc·dialog role) + hover 클래스화
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 01:48:24 +09:00
6d6d6f353a
feat(nav): 외주·소프트웨어 2축 네비게이션 + 푸터 리뉴얼
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 01:42:37 +09:00
b13ddd3841
feat(visibility): 사주·음악·설문·패키지 라우트 숨김 가드 적용
2026-06-11 01:35:46 +09:00
f6df890297
feat(visibility): service_settings 기반 서비스 숨김 가드 + 레거시 서비스 시드
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 01:24:07 +09:00
776985eca8
fix(design): 미정의 --font-pretendard 변수 간접참조 제거
...
var(--font-pretendard, ...) 패턴은 --font-pretendard가 어디에도
정의되지 않아 항상 fallback으로 동작합니다. npm CSS import 방식에서
next/font 제거 후 변수 주입이 안되므로 직접 'Pretendard Variable'로
단순화하여 의도 명확화합니다. 모든 fallback stack은 유지됩니다.
변경 위치:
- @theme inline (font-sans, font-mono)
- body (전역 폰트)
- .font-mono 유틸리티
- .kx-section, .kx-display, .kx-label (Kinetic Ether)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-11 01:22:13 +09:00
e14e527e28
feat(design): JSM 전문 토큰 체계 + Pretendard 도입, kx 토큰 재매핑
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 01:15:11 +09:00
1b4e6803a2
fix(db): contact_requests.phone 컬럼 보장 + project_milestones anon 전체 CRUD 정책 제거
...
- contact route가 phone을 INSERT하나 schema에 컬럼 부재 → 문의 DB 저장이
조용히 실패(이메일은 정상)할 수 있어 ADD COLUMN IF NOT EXISTS로 보장
- 003_fix_quotes_rls의 'Admin manage milestones'(anon FOR ALL USING true) 제거:
비로그인 누구나 고객 마일스톤 CRUD 가능한 보안 구멍. 실제 접근은 전부
service_role 서버 API라 제거해도 무영향
- schema.sql에 phone 동기화, contact route의 불필요한 created_at 명시 제거
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-01 15:13:59 +09:00
a9d6091d1a
feat(music): 음악 팩을 'AI 음악 생성 개발 가이드 패키지' 단품으로 디벨롭 (구독 폐기)
...
- TIERS desc·productName을 '개발 가이드' 정체성으로 재서술 (가격·1회 결제 유지)
- music/packs/layout 메타 + layout.tsx JSON-LD Offer를 가이드 패키지로 갱신
- 구독 인프라(products.ts monthly·subscriptions·cron)는 보존
- 기존 1회 구매자 0명 — 별도 처리 없음(종결 기록)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 16:08:36 +09:00
4eee1b5c31
feat(ia): SaaS 제품 카탈로그(/packages) + 네비를 SaaS·음악·외주 3축으로 재편
...
- lib/saas-catalog.ts: 확장 가능한 SaaS 제품 데이터 모델(배열에 추가 시 자동 노출)
- app/packages: 카탈로그 페이지 — available 카드 그리드 / coming_soon / 빈 상태 예고+출시 알림 수집(ContactModal 재사용)
- TopNav·Footer: SaaS 제품(/packages)·AI 음악(/music)·커스텀 외주(/work) 3축
- 홈 Hero·라벨 카피를 새 정체성으로 정렬, 'Custom Build/사업부' 잔재 정리
- sitemap에 /packages 등록, STRATEGY.md에 크몽·숨고 미사용+인스타 유입 정책 명시
- 음악은 카탈로그에 넣지 않고 단품 라인(/music) 유지
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 16:08:28 +09:00
ec8c4345b8
chore(blog): /work/blog 라우트·참조·메타 완전 제거 (2026-05-29 재정의)
...
- app/work/blog/, lib/blog-tools/ 폴더 삭제
- 홈·work 허브 카드/카피, footer 링크에서 블로그 자동화 제거
- layout.tsx keywords·description·JSON-LD Offer 제거
- refund 약관 상품 목록 정리, sitemap /services/blog 엔트리 제거
- next.config: /services/blog·/work/blog → /work 301 리다이렉트
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 15:51:40 +09:00