fathersproj
개발 진행상황
완료31/70 (44%)
phasePhase 1
배포production
commit
Phase 1 — Foundation & MVP Skeleton현재
0/120%
Phase 2 — Core Commerce
0/140%
Phase 3 — Multi-Marketplace + Scale
0/130%
WBS업데이트: 2018-10-20 01:46:40 UTC
Bootstrapped (Done)
- Next.js(App Router) + Payload(ecommerce) 템플릿 부트스트랩
- 로컬 DB: SQLite(file)로 전환해서 개발 서버 안정화
- Stripe 결제 모듈 optional 처리(Phase 1 placeholder) + Toss env placeholder 추가
- Vercel Postgres 어댑터 추가(POSTGRES_URL 있으면 자동 사용)
- 진행상황 페이지 `/progress` 추가 (WBS/목표 문서 실시간 표시)
- MVP 검수 허브 `/mvp` 추가 (핵심 화면 목록/조건 명시)
- Ops 콘솔 `/ops` 스켈레톤 + Preview 더미 모드 기본 ON
- Ops 하위 페이지 확장: `/ops/orders`, `/ops/inventory`, `/ops/fulfillment`, `/ops/cs`, `/ops/settings`
- Ops “매출/금액” 신호 추가: 채널 주문 금액(원) + 우선순위 정렬 반영
- Ops “매출/정산” 페이지(`/ops/revenue`) + CSV(`GET /api/ops/revenue-report`) (prod 배포 완료)
- 더미 데이터 fallback: `/shop`, `/products/demo` (DB가 비어도 확인 가능, prod 배포 완료)
- 서체 교체: IBM Plex Sans KR + JetBrains Mono (storefront/ops, prod 배포 완료)
- 디스플레이 서체 추가: Nanum Myeongjo (storefront/ops, prod 배포 완료)
- 사진 placeholder 준비: Unsplash allowlist + `getLightingPlaceholderMedia()` (prod 배포 완료)
- 홈 Hero 상향(highImpact) + hero 이미지(placeholder) 연결 (prod 배포 완료)
- 데모 상품 확장(사진 포함) + PLP/PDP 이미지 fallback(깨짐 방지) (prod 배포 완료)
- 상점 정렬/재고 표기 한글화 + 로그인 비밀번호 재설정 링크 수정 (prod 배포 완료)
- 설치 가능 여부 30초 진단(`/install-check`) + 더미 추천/추적 이벤트 (prod 배포 완료)
- Vercel + managed Postgres TLS 이슈 대응: `POSTGRES_SSL=true` 지원
- 공식문서 기반 준비 문서화: 마켓플레이스/소셜로그인/카카오비즈니스 (docs/)
- Ops 부트스트랩/시드 엔드포인트 추가: `/api/ops/bootstrap-admin`, `/api/ops/seed-lighting`
- Production 더미 데이터 시드 완료(조명 도메인): 상품/채널주문/자사몰주문/배송/CS/재고 (검증: `2026-02-08T15:11:08Z` / `POST /api/ops/seed-lighting` 200)
- Storefront 헤더 투명/글래스 강화 + Hero 대비(화이트 텍스트) 연결 (검증: `pnpm build` PASS)
- 로그인 딥링크(redirect) 보존 개선: `/orders`, `/account/addresses` (검증: `pnpm typecheck` PASS)
- 정책 페이지 템플릿 구축: `/policies/shipping`, `/policies/terms`, `/policies/privacy` (검증: `pnpm build` PASS)
- 에이전트 리포트 최신화(Claude Code): Ops 플로우(1~2), 소셜 로그인 계획 (생성: `2026-02-09`)
- GA4 계측 준비(측정 ID는 환경변수로 주입)
- 소셜 로그인 “세션 생성(로그인 완료)”까지 연결(Kakao/Naver/Google, Provider 키는 환경변수로 주입)
- 보안 헤더(기본) 적용: `next.config.js`
- 홈 카피/섹션을 “구매 불안 제거(배송/설치/반품)” 중심으로 전환(내부 문서 링크 노출 제거)
- Ops 운영 준비도 검사에서 “약한 시크릿”은 production에서 fail 처리(Go-live 가드)
Phase 1 — Foundation & MVP Skeleton
- P1-001 Project kickoff + scope boundary
- P1-002 Domain model + event/state definitions (products→orders→fulfillment)
- P1-003 Architecture decision + repo setup
- P1-004 GCP baseline infrastructure (dev/stage/prod)
- P1-005 CI/CD pipeline
- P1-006 Auth & account framework (customer + admin)
- P1-007 CMS selection + integration spike
- P1-008 UI/UX system + page skeletons
- P1-009 Product catalog MVP (read-only)
- P1-010 Observability baseline
- P1-011 Security + compliance baseline (KR context)
- P1-012 Phase 1 gate (MVP skeleton ready)
Phase 2 — Core Commerce
- P2-001 Product management (admin) + inventory primitives
- P2-002 Cart + pricing engine
- P2-003 Address + region classification (routing key)
- P2-004 Order service (create/order states)
- P2-005 TossPayments integration (web checkout)
- P2-006 TossPayments webhook + reconciliation
- P2-007 Refund/cancel flows
- P2-008 Fulfillment: inhouse pick/pack/ship MVP
- P2-009 Fulfillment: 3PL integration MVP
- P2-010 Unified fulfillment orchestration (inhouse ↔ 3PL)
- P2-011 Notifications (transactional)
- P2-012 Admin console MVP (ops-ready)
- P2-013 QA test plan + automated tests
- P2-014 Phase 2 gate (sell & ship on own site)
Phase 3 — Multi-Marketplace + Scale
- P3-001 Marketplace access readiness
- P3-002 Canonical SKU mapping + listing model
- P3-003 Inventory synchronization service
- P3-004 Naver SmartStore integration
- P3-005 Coupang integration
- P3-006 Toss Shopping integration
- P3-007 Order ingestion pipeline + deduplication
- P3-008 Returns/RMA workflow (cross-channel)
- P3-009 Financial reconciliation (payments + channels)
- P3-010 Performance + scalability hardening
- P3-011 Security hardening
- P3-012 Operational excellence (runbooks + on-call readiness)
- P3-013 Phase 3 gate (multi-channel live)
현재 목표업데이트: 2018-10-20 01:46:40 UTC
# fathersproj — Status
## Current goal (Phase 1)
- Stand up a working baseline that never breaks (staging-first), with: **auth + CMS + catalog + order skeleton + payment placeholder**, plus SEO basics.
## What’s done (2026-02-04)
- Bootstrapped codebase using **Payload 3 ecommerce template** (Next.js App Router).
- Dependency install stabilized (pnpm install completed).
- Switched local DB adapter to **SQLite (file-based)** to remove MongoDB local dependency.
- Config: `src/payload.config.ts`
- Env: `.env` uses `DATABASE_URL=file:./.db/payload.db`
- Dev server starts successfully.
- Stripe adapter/client made **conditional** so the app boots even without payment keys (Phase 1 payment placeholder).
## What’s done (2026-02-07)
- Deployed production: `https://fathersweb.vercel.app`
- Added MVP review hub: `/mvp` (핵심 화면을 “더미 데이터로도” 바로 확인)
- Added Ops console skeleton: `/ops`
- Preview 환경은 더미 모드 기본 ON (`VERCEL_ENV=preview` 또는 `OPS_DEMO_MODE=true`)
- Expanded Ops console pages (MVP 검수용)
- `/ops/orders`, `/ops/inventory`, `/ops/fulfillment`, `/ops/cs`, `/ops/settings`
- Added revenue/amount signals to Ops dashboard
- 채널 주문 금액(원) 표시 + 작업 큐 정렬에 금액 가중치 추가
- Ensured “DB 비어있음/초기화 실패”에도 MVP 화면이 깨지지 않게 fallback 적용
- `/shop` (PLP): DB가 비어있어도 데모 상품 표시
- `/products/demo` (PDP): 데모 상품 항상 확인 가능
- Fixed Payload init error on managed Postgres (e.g. Supabase) with self-signed TLS chain
- Symptom: `SELF_SIGNED_CERT_IN_CHAIN` → Payload init 실패 → `/api/*`, `/admin` 500
- Resolution: `POSTGRES_SSL=true` 시 connection string에 `sslmode=require&uselibpqcompat=true` 주입
- Vercel env: `POSTGRES_SSL=true` (production/preview) 반영
- Added Ops bootstrap + lighting seed endpoints (Payload custom endpoints)
- `POST /api/ops/bootstrap-admin` (admin or `READINESS_API_KEY`)
- `POST /api/ops/seed-lighting` (admin or `READINESS_API_KEY`)
- Bootstrapped production admin account for Ops
- `2mooroolt@gmail.com` / `OPS_ADMIN_PASSWORD` (환경변수로 설정, 커밋 금지)
- Seeded production dummy data for lighting domain
- Products/Categories + Channel Orders + Direct Orders + Shipments + CS queues + SKU mappings + Inventory sync logs
## What’s done (2026-02-08)
- Added Ops revenue/settlement page: `/ops/revenue`
- 기간 탭(today/week/month) + 채널(KRW) / 자사몰(USD) 분리 표기
- Primary CTA: 정산 CSV 내려받기
- Added Ops CSV endpoint (Payload custom endpoint)
- `GET /api/ops/revenue-report?range=today|week|month`
- 인증: admin 또는 `READINESS_API_KEY`
- Switched fonts (storefront + ops)
- `IBM Plex Sans KR` + `JetBrains Mono` (CSS var 호환 유지)
- Display: `Nanum Myeongjo` 추가
- Prepared placeholder photography
- Next remotePatterns: Unsplash 허용
- Placeholder media util: `src/demo/lightingMedia.ts`
- Improved home fallback VP/USP copy
- 적용 조건: DB에 `pages/home`가 없을 때만 fallback으로 노출
- Storefront polish (visual + dummy)
- Home hero: `highImpact` + hero 이미지(placeholder) 연결
- Demo products: 12개(사진 포함)으로 확장
- PLP/PDP: 갤러리/메타 이미지가 없어도 placeholder로 UI가 “절대 안 깨지게” 보강
- 정렬/재고 표기 한글화 + 로그인 비밀번호 재설정 링크 수정
- Storefront dummy 강화(추가)
- Demo products: 37개로 확장 + 카피(조건 먼저) 확장
- PLP 데모 모드에서도 `q` 검색이 실제로 필터링되도록 보강
- 카테고리 사이드바: DB 실패/빈 상태에서도 탐색 가능한 “검색 칩” 폴백 제공
- PDP: description이 없을 때 `meta.description`을 요약 문구로 폴백
- Git push + Vercel production deploy 완료
- commit: `62df36f` (main)
- alias: `https://fathersweb.vercel.app`
- GitHub Actions 워크플로는 템플릿으로 보관
- 이유: OAuth 토큰에 `workflow` scope가 없으면 `.github/workflows/*` 푸시가 거부됨
- 위치: `docs/workflows/` (추후 실제 CI 적용 시 `.github/workflows/`로 이동)
## What’s done (2026-02-09)
- Storefront 헤더 UX 개선(투명/글래스 + 스크롤 상태)
- 홈(Hero) 대비를 위해 헤더 텍스트 컬러가 자동 전환되도록 연결
- 파일: `src/components/Header/index.client.tsx`, `src/heros/HighImpact/index.tsx`
- Home “구매 불안 제거” 섹션 카피 전환(고객 관점)
- `/progress` 링크(내부 문서) 노출 제거 → 정책/조건 우선 안내로 변경
- 파일: `src/components/home/HomeSections.tsx`, `src/endpoints/seed/home-static.ts`
- 로그인 딥링크(redirect) 보존 개선
- `/orders`, `/account/addresses` → 로그인 후 원래 페이지로 복귀
- 파일: `src/app/(app)/(account)/orders/page.tsx`, `src/app/(app)/(account)/account/addresses/page.tsx`
- Ops 로그인 딥링크(redirect) 보존 개선
- `/ops/*` 진입 시 “항상 /ops로만” 가던 redirect를 제거하고, 각 페이지가 자기 경로로 복귀하도록 정리
- 파일: `src/app/(ops)/layout.tsx`, `src/app/(ops)/ops/*/page.tsx`
- GA4 계측 준비(페이지뷰 + 주요 이벤트)
- GA4 스크립트/페이지뷰: `src/components/analytics/*`
- 이벤트 포워딩: `src/utilities/track.ts`
- 적용: `src/app/(app)/layout.tsx`, `src/app/(ops)/layout.tsx`
- 소셜 로그인 “세션 생성”까지 연결(Kakao/Naver/Google)
- 엔드포인트: `src/integrations/social/endpoints/index.ts`
- 토큰/프로필/업서트/세션: `src/integrations/social/{tokenExchange,profileFetch,userUpsert,session}.ts`
- 보안 헤더 기본 적용(프레이밍/스니핑/리퍼러/퍼미션)
- 파일: `next.config.js`
- 정책 페이지 템플릿 구축(실판매 준비용)
- `/policies/shipping`, `/policies/terms`, `/policies/privacy`
- 공통 셸: `src/components/policies/PolicyShell.tsx`
- 에이전트 리포트 최신화(Claude Code)
- `docs/agent-reports/claude-ops-flow-review-2026-02-09.md`
- `docs/agent-reports/claude-social-login-plan-2026-02-09.md`
- 프로토타입(정적 HTML) 헤더 투명도 강화 + Next에서 접근 가능하게 노출
- 원본: `html-prototypes/*`
- 노출: `public/prototypes/*` → `/prototypes/index.html` 등
- MVP 허브(`/mvp`)에 링크 추가: `src/app/(app)/mvp/page.tsx`
- 운영 준비도 검사(readiness)에서 “약한 시크릿(예: 1234)”은 production에서 fail 처리
- 파일: `src/ops/endpoints/readiness.ts` (`isWeakReadinessKey`, `isWeakOpsAdminPassword`)
- 문서 추가(운영자가 바로 붙일 수 있게 준비)
- GA4: `docs/ANALYTICS_GA4_SETUP.md`
- 소셜 로그인: `docs/SOCIAL_LOGIN_SETUP.md`
- Ops 매출/금액 집계 기준을 `channel-orders.orderedAt`로 전환(없으면 `createdAt` 폴백)
- 목적: “적재 시각(createdAt) 때문에 과거 주문이 오늘 매출로 잡히는 문제” 방지
- 파일: `src/marketplace/collections/ChannelOrders.ts`, `src/app/(ops)/ops/revenue/page.tsx`, `src/ops/endpoints/revenueReport.ts`
- Ops “총 주문금액” 지표 추가(채널 + 자사몰 합산)
- `/ops`: 오늘 총 주문금액 + 총 미처리 금액 + 채널/자사몰 분리 금액
- `/ops/orders`: 오늘 총 주문금액 + 총 미처리 금액
- `/ops/revenue`: 기간 내 총 주문금액(기존 통합 매출 카드 라벨 정리)
- commit: `68129b9` (main)
- `/progress`에서 Phase 진행률 카드 노출(Phase 1~3)
- 근거: `WBS_PHASES.md` 체크박스(`[x]`) 기준으로 % 계산
- “현재 Phase” 표기: `PROJECT_STATUS.md`의 `## Current goal (Phase N)`에서 파싱
- 파일: `src/app/(app)/progress/page.tsx`
## Current state (as of 2026-02-09)
- Production checks
- `/` 200
- `/mvp` 200
- `/shop` 200
- `/products/demo` 200
- `/login` 200
- `/account` 200
- `/api/users/me` 200
- `/admin` 200
- `/ops` 307 → `/login?redirect=%2Fops` (미로그인)
- `/ops` 200 (관리자 로그인 후)
- `/ops/orders` 307 → `/login?redirect=%2Fops%2Forders` (미로그인)
- `/ops/inventory` 307 → `/login?redirect=%2Fops%2Finventory` (미로그인)
- `/ops/fulfillment` 307 → `/login?redirect=%2Fops%2Ffulfillment` (미로그인)
- `/ops/cs` 307 → `/login?redirect=%2Fops%2Fcs` (미로그인)
- `/ops/settings` 307 → `/login?redirect=%2Fops%2Fsettings` (미로그인)
- `/ops/revenue` 307 → `/login?redirect=%2Fops%2Frevenue` (미로그인)
- `/ops/revenue` 200 (관리자 로그인 후)
- `/api/ops/revenue-report?range=today` 200 (admin 또는 `READINESS_API_KEY`)
- Preview
- Vercel Preview protection enabled → 브라우저에서는 정상 확인 가능, `curl`은 401 응답
## How to run (local)
```bash
cd fathersweb
pnpm install
pnpm dev
# default: http://localhost:3000 (or set PORT=3005)
```
## Important notes / next decisions
- Production DB target: **Postgres (Supabase 등)** 권장. (로컬은 SQLite 유지 가능)
- Payments: template includes Stripe; fathersproj needs **TossPayments** → replace payment flow and webhook handlers.
- Fulfillment: implement **routing engine** (INHOUSE ↔ 3PL by region) and start with CSV exporter.
- Vercel + Postgres: managed DB에서 TLS chain 이슈가 있으면 `POSTGRES_SSL=true`를 기본값으로 둔다.
## Next steps (execution order)
1. Confirm baseline pages + admin login works end-to-end on local.
2. Add feature-flag framework + environment split (dev/staging/prod).
3. Replace Stripe checkout with TossPayments (Phase 1: placeholder, Phase 2: full).
4. Define canonical domain model (SKU/Order/PaymentAttempt/Fulfillment) and lock state machines.
<!-- trigger 2026-02-05T07:03:55Z -->
이 페이지는 배포될 때마다 자동 업데이트 됩니다. (Vercel Preview/Production 모두 동일)