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
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
281edd9a52
fix(visibility): 기존 시드 행도 숨김 갱신되도록 DO UPDATE + 재사용 경고 JSDoc
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-11 01:29:23 +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
a496c2244b
docs(plan): 리뉴얼 Phase 1 구현 계획 — 디자인 토큰·숨김 가드·메인/외주/로그인/마이페이지
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 01:06:48 +09:00
d46acc43e3
docs(spec): 사이트 리뉴얼 설계 — 외주+소프트웨어 판매 2축 재구성
...
- 계좌이체 중심 결제, 기존 서비스 숨김(admin 토글), 고객 포털, 풀 리디자인
- orders 단일 소스 구매 식별, pack 인프라 범용 제품 시스템 확장
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-11 00:59:36 +09:00
3e0d8bcf88
docs(plan): Phase 6 ① 완료 + 재개 체크포인트(③ DNS 전환 직전) 기록
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 03:16:21 +09:00
0aa4da7143
docs(plan): Phase 5 완료 — 앱 NAS 배포(Gitea registry) + app.jaengseung-made.com 검증
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 17:20:22 +09:00
38fe9dec3f
fix(docker): 빌드타임 더미 RESEND_API_KEY로 standalone 빌드 통과
...
- /api/survey 등 모듈 레벨 new Resend(process.env.RESEND_API_KEY)가
.env 없는 docker 빌드에서 throw → 빌드타임 더미로 통과(런타임은 env_file 실제값)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 16:58:28 +09:00
e56a2af9e8
docs(readme): 현재 정체성(SaaS+커스텀 외주)·기술스택·self-host 배포 반영
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 16:25:38 +09:00
58290041e1
docs(plan): Phase 4 완료(OAuth E2E 검증) + Phase 6 supa 노출·OAuth 부분 완료
...
- 로컬 통합테스트: supa 도메인 apikey 200, Google OAuth 로그인→mypage 데이터 확인
- supa 노출: Cloudflare DNS + DSM 역방향 프록시(443→8100) + Let's Encrypt
- OAuth: GOTRUE_GOOGLE 활성화, authorize 302 확인
- 남은 컷오버는 Phase 5(앱 배포) 후
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 16:20:44 +09:00
5d4599642a
feat(deploy): Next standalone 출력 + Dockerfile (NAS self-host Phase 3)
...
- next.config: output 'standalone' + outputFileTracingRoot(workspace 중첩 방지)
- Dockerfile(멀티스테이지, NEXT_PUBLIC_* build-arg) + .dockerignore
- maxDuration은 Vercel 운영 보호 위해 유지(self-host에선 무시됨)
- 로컬 빌드 검증: .next/standalone/server.js 루트 생성 확인
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 14:50:08 +09:00
f9d3664608
docs(plan): Phase 2 완료 — 무손실 데이터 이전(PG17 전환·쟁승만·RLS 검증)
...
- 멀티앱 공유 DB 발견 → 쟁승 10테이블+auth+storage만 이전
- 클라우드 PG17.6 ↔ NAS PG17 통일, 행수 12개 일치, project_milestones anon 없음 확인
- storage 0(실파일 스킵), subscriptions 클라우드 미존재(후속)
- Phase 3: maxDuration 제거 안 함(Vercel 전용 메타, self-host 무시)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 14:50:08 +09:00
866853e594
docs(plan): Phase 1 완료 — NAS self-host Supabase 스택 기동(11개 healthy)
...
- /volume1/docker/jsm, KONG 8100/8543, pooler 5432 충돌 해결(522 주석)
- 레거시 JWT_SECRET 호환 확정 → 앱 무수정 연결 가능
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 13:42:32 +09:00
0cad590ddb
docs(plan): Phase 0 완료 — 리소스 실측·443 노출방식·gitea 기존운영 반영
...
- RAM 14GB여유/디스크 1.8TB ✅ , CPU 2코어 부하가 유일 리스크(Phase 6 관찰)
- 443 이미 외부 HTTPS 200 → 기존 nginx vhost 추가로 확정(Cloudflare Tunnel 불필요)
- 포트 8000/3000 점유 → host 비노출 정책, gitea 기존 운영으로 Phase 5 단순화
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-02 11:15:02 +09:00
8b03a7024e
docs(plan): NAS 풀 self-host 전환 단계별 마이그레이션 계획 (Phase 0-7)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-02 09:50:14 +09:00
ee5dbb2927
docs(spec): 배포를 기존 deployer와 분리된 별도 방식으로 정정 (검토 반영)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-02 09:47:21 +09:00
4cbc50dc70
docs(spec): NAS 풀 self-host 전환 설계 (Vercel/Supabase/GitHub → NAS/self-host Supabase/Gitea)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-02 09:45:04 +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
3dc6a28979
chore(db): quotes RLS 활성화 + 미사용 PostGIS 제거 (Supabase linter 'RLS Disabled' 해소)
...
- quotes: service_role(서버 admin client) 전용 접근이므로 RLS ENABLE해도 무영향
+ authenticated 본인 견적 SELECT 정책 복원(002 의도)
- spatial_ref_sys: extension 소유라 RLS 불가 → 미사용 PostGIS extension 제거로 해소
(geometry/geography 의존 0건 확인)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 16:47:45 +09:00
6d16e17969
Merge: SaaS 전환 마이그레이션 P1·P2·P4 + P3 골격
...
- 블로그 자동화 완전 제거
- SaaS 제품 카탈로그(/packages) + 네비 3축(SaaS·음악·외주) 재편
- 음악을 'AI 음악 생성 개발 가이드 패키지' 단품으로 디벨롭
- 계획 문서 진행 상태 반영
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 16:11:44 +09:00
4cbc563411
docs(plan): SaaS 전환 마이그레이션 P1·P2·P4 완료 + P3 골격 구현 상태 반영
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-05-31 16:09:43 +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
87aa498500
feat(admin): AdminSidebar에 "설문 응답" 메뉴 추가
...
NAV_ITEMS 배열 끝에 /admin/survey 항목 (체크리스트 아이콘).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 05:40:08 +09:00
7f196f1c19
feat(admin): /admin/survey 대시보드 — 목록 + 통계 + CSV + 상세 modal
...
- 필터: 전체/오늘/이번 주
- 통계: Q2/Q4/Q5 분포 + 만족도 평균 + 이메일률 + 완료 시간 중간값
- 응답 테이블 (시각/나이상황/Q4/Q5/Q6 미리보기/이메일/상세)
- 상세 modal: 7 질문 + 메타 14 필드 모두 표시
- CSV 다운로드 (BOM UTF-8, Excel 호환)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 05:38:59 +09:00
fa9b05c7e8
feat(api): /api/admin/survey GET — 목록 + 통계 + CSV export
...
- ?range=all|today|week 필터
- ?format=csv → BOM 포함 UTF-8 CSV 다운로드 (Excel 호환)
- 통계: 각 질문별 카운트 분포 + 만족도 평균 + 이메일률 + 완료시간 중간값
- admin HMAC cookie 인증 (verifyAdminTokenNode)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 05:36:40 +09:00
ac9b70fb5e
feat(shell): DashboardShell STANDALONE_PATHS에 /gyeol 추가
...
CONTOUR 설문 페이지는 자체 시각 정체성 — TopNav/푸터/카카오 모두 숨김.
풀스크린 설문 UI 집중도 보장.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 05:34:53 +09:00
41f6b347a9
feat(api): /api/survey POST — DB 저장 + Resend 확인 메일
...
- Rate limit: IP당 1분 5회 (기존 contact 패턴)
- 필수 validation: age_range, status, awareness_freq
- 입력 정제(sanitizeStr) + 이메일 형식 검증
- supabase INSERT (service role, RLS 우회)
- 이메일 입력 시: Resend 즉시 확인 메일 + email_confirmation_sent 마킹
- 메일 실패는 응답 저장 성공에 영향 X
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 05:33:50 +09:00
262d6c3ed1
feat(gyeol): /gyeol 단일 페이지 통합 — 9 step state, localStorage 복구
...
- layout: radial 그라데이션 배경 + metadata (robots noindex)
- page: step state + Q1~Q7 컴포넌트 조합
- 진입 시 localStorage 복구 + step 변경 시 저장 + 제출 시 clear
- 최종 제출: completion_seconds, user_agent, referrer, utm_* 자동 수집
- 에러 토스트 표시
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-16 05:31:54 +09:00