마지막 업데이트: 2026-07-21 테스트:
npm test통과 기준 유지 · 캐시 버전: v9 프로덕션: https://axis-app-beta.vercel.app이 문서는 개발 단일 참조점이다. 제품 방향·진행 현황·아키텍처·남은 작업을 모두 담는다. 작업 규칙은 CLAUDE.md, 공개 소개는 README.md.
한 줄 정의(비전): 사기 전에 결정해주고, 산 뒤 최적 타이밍까지 알려주는 도구. = 결정(Decide) → 추적(Track) → 알림(Alert)
단순 비교/결정만으로는 ChatGPT를 못 이긴다. 해자는 라이브 가격 + 가격 알림 + 검증 스펙 — 챗봇이 구조적으로 못 하는 것들. 단, 이 해자(가격·알림)는 현재 미작동(seed 데이터)이고 그 경제성이 미검증이다 → 아래 실행 범위로 좁혀 먼저 검증한다.
이전 "글로벌+한국 동시 / 4개 카테고리 / 푸시·구독 로드맵"은 1인 운영에 범위 과잉. 검증 통과 전까지 다음으로 좁힌다. (이전 방향 전문은 git 이력의 DIRECTION.md 참고.)
- 시장: 한국 단독 먼저. US/JP 코드 자산은 유지하되 콘텐츠·운영은 KR 집중. 1개 시장 검증 전 다국가 운영 금지.
- 카테고리: 노트북 먼저. 폰/태블릿/이어폰 데이터셋은 유지하되, 출시·SEO·콘텐츠는 노트북 집중.
- 수익: Phase 1 제휴(쿠팡 파트너스) 단독. 푸시·구독은 검증 후로 보류. 제휴 링크는 광고가 아니라 유틸 → 절대 숨기지 않음.
- 데이터: seed → 실가격은 "쿠팡 현재가 + 선택 SKU 자체 일별 적재"로 PoC. 외부 가격이력 API(Keepa 등) 결제 금지. "역대최저·급락" 알림은 자체 이력이 수개월 쌓인 뒤에만 약속.
- 검증 우선: 추가 기능 빌드(푸시·구독·다국가·신규 카테고리)는 §6의 30일 검증 통과 전까지 중단.
검증 게이트 (절대 규율): 스펙 비교는 primary 스펙이 출처 등급 2티어 이상일 때만
verified·색인. 출처 티어: 1 제조사 공식 / 2 검증 자료 / 3 AI 추정. 모든 결과에 출처·수집일 표기.
사용자 쿼리 ("에어팟 프로 vs 버즈")
↓
[1] 캐시 확인 (Supabase comparison_cache, v9|query|locale|country)
↓ 미스
[2] expandComparisonOptions() — 브랜드명 → 최신 모델 확장
[3] detectCategory() — 카테고리 분류
[4] resolveComparableSource() — product-aliases → registry → URL 확인
[5] extractProductSpecs() — 공식 페이지 HTML 스크래핑 (병렬, apple|samsung|generic 파서)
+ 데이터셋 fallback (enrichWithDatasetFallback, merge 방식)
[6] runAiDecision() — Groq API. 스키마 필드 전체 채우기, 스크래핑 값은 context로 복사
[7] buildFinalComparison() — AI 행 기반 + 스크래핑 값 오버레이 + source URL(검증 배지)
[8] gradeVerification() — verified / partial / unverified
[9] setCachedComparison() — 캐시 저장
| 등급 | 조건 | SEO |
|---|---|---|
verified |
모든 primary 필드에 공식 source URL | ✅ 인덱싱 |
partial |
일부 primary 필드만 sourced | 조건부 |
unverified |
AI 단독 (source 없음) | ❌ noindex |
[결정] 분류기 → 스키마 → 검증 스펙 → AI 결정 → 검증 배지
lib/category, lib/specs/*, lib/ai/*, lib/decision-engine
[가격] Product → PriceProvider(region별) → Quote/History → 차트·최저가
lib/pricing/* (amazon / coupang / seed)
[추적] 계정 → Watch(관심상품·목표가) → 가격 점검 크론 → 알림(이메일→푸시)
Supabase(watches) + cron + lib/watch · lib/push
수동 검증 데이터셋 (lib/specs/dataset/), 2020+ 모델, 인지도 있는 제품 기준:
| 카테고리 | 파일 | 개수 |
|---|---|---|
| 스마트폰 | smartphones.ts |
55 |
| 이어폰 | earphones.ts |
18 |
| 노트북 | laptops.ts |
28 |
| 태블릿 | tablets.ts |
23 |
| 합계 | 124 |
추가로 다나와 자동 수집 데이터(dataset/kr/)가 수동 데이터 뒤에 병합됨 (ID 중복 시 수동 우선).
VerifiedProduct:canonicalName(한국어) +nameEn+nameJa.localizeDisplayName()— 제품 해석 후 로케일 표시명 반환. 카탈로그에 없는 제품은 EN/JA에서koToEnTechName()로 폴백 (아이폰17 → iPhone 17).- 이 정규화로 "영어 설정 + 한글 입력 → 영어 제품명 + Amazon US 검색어"가 일관되게 동작.
- smartphone: model_name, display_inch, chipset, storage_gb, camera_mp, battery, weight_g
- laptop: model_name, cpu, gpu, ram_gb, storage_gb, display_inch, resolution, battery_wh, weight_g, os, refresh_hz, brightness_nits
- earphones: model_name, driver, anc, battery_hr, battery_total_hr, charging_type, water_resist, weight_g
scripts/collect-specs/
├── index.ts 메인 러너
├── sources/{danawa,gsmarena,kakaku}.ts KR/US/JP 소스
└── models/*.json 수집 대상 목록
npm run collect:kr # 다나와 (KR, KRW 가격)
npm run collect:us # GSMArena (US, tier 2)
npm run collect:jp # 価格.com (JP, JPY 가격)수집 후: 결과 파일 검토 → dataset/index.ts import → npm test 무결성 검사.
- 브랜드 리네임 (nudge/Optio → Axis), 멤버십/플랜 제거
- 3단계 제품 발견 파이프라인 + 제품 레지스트리/앨리어스
- AI 연동 (Groq Llama 3.1, 프로바이더 추상화)
- 가격 추적(lib/watch, lib/pricing) · 푸시 알림(service worker, VAPID) — 코드 완료
- SEO 비교 페이지(/compare/[slug]), Cron 가격 체크, 비교 결과 캐시, 검색 누락 로깅
- 스펙 정확도 수정: 아이폰16 프로 주사율(60→120Hz),
enrichWithDatasetFallbackmerge 방식 - 한/미/일 전체 점검: US/JP 데이터셋 fallback, ja 라벨 중앙화(JA_FIELD_LABELS), danawa URL 공식소스 유출 차단
- 제품명 로케일 정규화 + 데이터셋 124개 확장(수동), 태블릿 카테고리 신설
- UI: 결과 카드 화이트 리디자인, fit score 바, 어필리에이트 "공식" 제거 + 다이렉트 링크
| 항목 | 내용 |
|---|---|
CRON_SECRET 교체 |
현재 기본값 → openssl rand -base64 32 → Vercel Production |
| VAPID 키 생성·등록 | 로컬 3종 SET. WatchButton은 PriceComparison remount로 노출 경로 복구됨 |
| Supabase 마이그레이션 | 0014_price_history.sql 로컬 적용 완료. 프로덕션은 Vercel 배포 후 npx supabase db push |
| 네이버 쇼핑 API 키 설정 | https://developers.naver.com/apps/ → 앱 등록 → 쇼핑 체크 → NAVER_CLIENT_ID / NAVER_CLIENT_SECRET → AXIS_PRICE_SOURCE=naver |
| Coupang API (대기) | 누적 15만원 매출 달성 후 파트너스 포털 최종승인 → COUPANG_ACCESS_KEY / COUPANG_SECRET_KEY → AXIS_PRICE_SOURCE=coupang 으로 전환 |
BRAVE_SEARCH_API_KEY의도적 미설정 → 웹 검색 폴백은 검증 보류RESEND_API_KEY로컬 SET. 프로덕션 패리티·실발송 QA는 별도 확인VAPID_*로컬 SET. 푸시 실동작 QA는 별도 확인
- Sony 한국 URL(
sony.co.kr) 실제 동작 여부 - LG gram 14/16/17형 containment match 오매핑 가능성
WatchButton UI 미노출→ 원인: ResultsView에서 PriceComparison orphan. remount 완료. VAPID 가설 폐기- Sony 한국 URL(
sony.co.kr) 실제 동작 여부 - LG gram 14/16/17형 containment match 오매핑 가능성
추가 기능 빌드 전에 핵심 가정부터 싸게 검증한다. 통과 시에만 빌드 재개.
핵심 가정 (먼저 검증):
- A 실가격·이력을 싸게 확보 가능 — 쿠팡 현재가 + 노트북 28 SKU 자체 일별 적재 PoC
→ [준비 완료]
naver-provider.ts+coupang-provider.ts+price-snapshot크론 구현 완료 (2026-06-11). ① 네이버 쇼핑 API 즉시 발급 후AXIS_PRICE_SOURCE=naver로 활성화 (가격=전국최저가, 구매링크=쿠팡 제휴). ② Coupang 누적 15만원 매출 달성 → 최종승인 →AXIS_PRICE_SOURCE=coupang으로 전환 (env 변경만으로 완료). - B SEO/커뮤니티로 유입 가능 — 노트북 추천/비교 콘텐츠 15~20편 색인
- C 방문자가 제휴 클릭·구매 — 쿠팡 링크 클릭률 >8%, 전환 추적
- D 알림이 재방문을 만든다 — 실알림 켜고 M2 재방문 >30%
- E 검증 배지가 선택에 영향 — 배지 유무 A/B
kill-switch: A·B·C 모두 통과 → 노트북·KR·제휴로 추진. A 실패 → Track/Alert 폐기· 결정 전용 PIVOT 검토. B 또는 C 실패 → 사업 재고(STOP).
보류 (검증 전 빌드 금지): P3-푸시앱 · P3-구독 · US/JP 운영 · 신규 카테고리(모니터 등) · 외부 가격이력 API 결제.
상세 실험·지표·성공/실패 기준은 사업성 검증 보고서 및 메모리 (
project_business_validation) 참조. P3-SEO(정적 비교·제품 페이지 색인)는 가정 B 검증 수단으로 흡수.
npm run dev # 개발 서버 (webpack)
npm run dev:turbo # 개발 서버 (turbopack)
npm test # 테스트
npm run test:watch # 테스트 watch
npm run build # 빌드
npx tsc --noEmit # 타입 체크
vercel env pull .env.local # 환경변수 로컬 동기화
vercel env ls # 환경변수 상태 확인
supabase db push # 마이그레이션 적용
npx web-push generate-vapid-keys # VAPID 키 생성
openssl rand -base64 32 # CRON_SECRET 생성| 변수 | 상태 | 설명 |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
설정됨 | Supabase URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY |
설정됨 | Supabase anon 키 |
SUPABASE_SERVICE_ROLE_KEY |
설정됨 | Supabase 서비스 키 |
GROQ_API_KEY |
설정됨 | AI 결정 엔진 |
CRON_SECRET |
✅ 교체 완료 | 2026-06-11 새 키로 교체 |
NEXT_PUBLIC_VAPID_PUBLIC_KEY |
✅ 로컬 SET | 푸시 알림 |
VAPID_PRIVATE_KEY |
✅ 로컬 SET | 푸시 알림 |
VAPID_SUBJECT |
✅ 로컬 SET | 푸시 알림 |
AXIS_PRICE_SOURCE |
✅ naver | 네이버 쇼핑 최저가 활성화 |
NAVER_CLIENT_ID |
✅ 설정됨 | 네이버 쇼핑 API |
NAVER_CLIENT_SECRET |
✅ 설정됨 | 네이버 쇼핑 API |
BRAVE_SEARCH_API_KEY |
❌ 미설정(보류) | 웹 검색 폴백 |
RESEND_API_KEY |
✅ 로컬 SET / 프로덕션 패리티 미확인 | 이메일 알림 (D단계) |
NEXT_PUBLIC_SITE_URL |
public=https://axis-app-beta.vercel.app · layout local=http://localhost:3000 |
|
COUPANG_ACCESS_KEY |
❌ 대기 중 | 쿠팡 파트너스 API (최종승인 후 발급 — 15만원 매출 필요) |
COUPANG_SECRET_KEY |
❌ 대기 중 | 쿠팡 파트너스 API |