2026-05-10 — paljalab P0 데이터연동/캐시 + P1 매거진 epilogue 사이클
한 줄 요약
NEXT_SESSION.md 의 P0 (Image #24 placeholder) + P1 (Image #23 5인 컨셉 밖 3영역) 사이클 종료. 7개 commit (P0 5 + P1 3), 모두 prod FTP deploy success + curl 검증 통과. P0 진짜 root cause 는 코드가 아닌 브라우저 disk cache 였고 캐시 영구 fix 까지 묶어 처리.
진입 컨텍스트 (5/8 dm PC → 5/10 chyj1 PC)
- 5/8 dm PC 에서 5인 명리학자 매거진 변환 commit
64ef201+ prod 배포 - 사토시 피드백: 데이터 연동 안 됨 (#24 placeholder) + 5인 컨셉 밖 3영역 (#23)
- chyj1 PC 에 paljalab 클론 안 되어있어
gh repo clone 1or4/paljalab부터 - 사토시는 해당 결과 페이지 chart_id=6 본인 chart 알고 있었음
P0 — 데이터 연동 / 캐시 영구 fix
진단 흐름
- 코드 정독으로 가설 1(키 mismatch)/4(sessionStorage 구조) 부정. 가설 3 (analysis 비어있음) 가장 강력 추정
- shield.js 가 console / F12 / devtools 감지 차단 → DevTools dump 불가
- 사토시 admin 비번 망각 (4/10 비번 reset 금지룰) → ?debug=1 패치로 우회
- 첫 dump (sessionStorage 경로) — chart/analysis 모두 정상 → 가설 3 부정
- 시크릿 모드 dump (API 경로) — chart 4주 컬럼 빈 string + 본문 정상 텍스트 출력 → 5/8 placeholder 의 진짜 원인은 사토시 폰의 브라우저 disk cache
Commit
1c14e7fadmin debug 박스 임시 inject (진단용)db16cceadmin 게이트 완화 (admin 비번 망각 대응)4afd66cdebug 패치 revert (진단 종료)f260343saju-reports.php — chart.{year,month,day,hour}_pillar 컬럼 빈 string 시 chart_json 폴백 (chart_id=6 같은 옛 row 대응)75b8311index.html SW register 제거 →2d07dcd자가 revert (진단 오류: sw.js 가 v1.0 부터 unregister 모드라 SW 캐시는 root cause 아니었음. register 제거하면 옛 SW 가진 사용자가 새 sw.js 못 받음 역효과)9bdfce8sw.js —clients.claim()+ 모든 clientc.navigate(c.url)reload + unregister. 옛 SW 가진 사용자가 paljalab 진입 1회로 새 자산 강제 fetch74cc23cdeploy.yml — self-hosted JS/CSS 에?v=$(short hash)자동 부여. perl negative lookahead 로 https:// 외부 도메인 + /sw.js 제외. 매 commit 마다 캐시 강제 무효화
검증
- prod result.js 에
paljaDebugBox0 hit - prod result.html
?v=74cc23cself-hosted 자산 정상 부여, /sw.js 는 stable URL - prod sw.js 에
clients.claim적용 확인
사토시 관점
- 5/8 placeholder 사고 = 사토시 폰의 disk cache lag 으로 옛 result.js (TL;DR 함수 없음) 가 ID mismatch 일으킨 것. 코드 자체는 정상이었음
- 옛 chart 의 4주 컬럼 빈 string 은 별개 잠재 버그. 이번에 같이 처리
- 영구 fix (cache-bust 자동화) 로 다음 commit 부터 모든 사용자가 즉시 새 자산 받음
P1 — 5인 컨셉 밖 3영역 epilogue 변환
Commit
be9ee4bspouse-cta 를 epilogue 톤으로 — section classresult-section→result-epilogue(counter-increment 미상속), heart emoji💗제거 →mascot-thinking.webp, "EPILOGUE · 인연" 라벨 + "다섯 시선이 풀어드린 끝, 한 가지 더 — 당신의 인연" 헤딩, 분홍 그라디언트 카드 → paper 톤 + gold 1px line, teaser 카피 매거진 톤ed2eed8premium-locked 헤더 — section class 동일 변경, h2 헤더 svg 자물쇠 + "상세 분석 리포트" → "FOR THE WHOLE PICTURE" 라벨 + "5인의 시선이 가는 곳 — 더 깊은 풀이"68eda26premium-locked 카드 헤더 emoji 4개 (💰 ❤️ 📅 🍀) 제거 매거진 톤 polish. 부수: raw&→&정정
신설 CSS
.result-epilogue(margin-bottom 만, counter-increment 없음 — 5인 챕터 카운터 안 받음).result-epilogue__label(gold uppercase 10.5px serif).result-epilogue__title(H3 22px serif, spouse-cta 내부).result-epilogue__heading(H2 26px serif + border-bottom, premium-locked 같은 section heading).spouse-cta__owl(mascot 64px 컨테이너)
NEXT_SESSION P1-3 redefine
원래 task "자물쇠 emoji svg 교체" 는 코드 보니 이미 svg + 텍스트 처리되어 있었음. 사토시 image #23 톤 위반 잔존 = 카드 헤더 emoji 4개. P1-3 를 그것 제거로 재정의 후 사토시 "ㄱ" 승인 받아 진행.
NEXT_SESSION 후속
- P0/P1 완료 → NEXT_SESSION.md 무효화 또는 P2 만 남김
- P2 (결제 영역 urgency / pricing / sticky CTA 매거진 톤 마무리) — 사토시 명시 안 했고 데이터+epilogue 끝난 뒤 결정으로 유보. 별도 결정 필요
- chart_id=6 같은 옛 chart 의 4주 컬럼 NULL/empty 가 다른 row 에도 있는지는 미확인. 폴백으로 무영향 처리됨
남은 리스크
- cache-bust 자동화의 perl regex 가 모든 .html 인스턴스를 정확히 매치하는지 —
pages/*.html만 deploy 시 검증했고 다른 .html 은 자체 deploy 환경에서 첫 적용. negative lookahead 동작은 syntax 정상 - sw.js 의
c.navigate(c.url)가 일부 브라우저(구형 iOS) 에서 거부될 수 있음 — try/catch 로 감쌌고 실패해도 unregister 는 진행. 거부된 client 만 1회 reload lag 잔존 - saju-reports.php 4주 폴백은 chart_json 안에 4주가 어떤 형태로 있는지 chart_id=6 외 row 에서 미검증. 사토시 시크릿 chart_id=6 결과 보고 들어와야 폴백 동작 최종 확인 (선택)
다음 액션
- 사토시 prod 확인 (시크릿 모드 chart_id=6 페이지에서 4주 정상 출력 + 새 epilogue 톤 + cache-bust query string 확인)
- NEXT_SESSION.md 갱신 또는 닫기
- P2 결정
- (선택) 캐시 영구 fix 패턴 memory 추가
P-fix-A — isLoggedIn token 키 sweep (8bf19e4)
사토시 보고
"로그인 했는데 모달 띄우는 건 왜 해결이 안됐지?" — 로그인 한 사용자에게도 onboarding modal (부엉이 도령 / 카카오 5초 시작 / 이메일 가입 / 게스트) 이 banner 카드 클릭 시 뜸.
Root cause
index.html:1872 의 isLoggedIn() 이 잘못된 token 키 paljalab_token / jwt 만 체크. 실제 표준 키는 access_token (auth-fetch.js, auth-callback.html, login.html, mypage.html 등 20+ 위치). 잘못된 키만 체크하니 항상 false → 로그인 사용자도 게스트 취급 → modal 무조건 뜸.
Sweep (root cause 같은 패턴 4 위치)
index.html:1872— onboardingModal isLoggedIn() → access_tokenassets/js/nav-drawer.js:53— getToken() 동일 mismatchassets/js/nav-drawer.js:57— getUserName() user 객체 키 paljalab_user → user 통일assets/js/nav-drawer.js:65— logout removeItem 4 keys → 표준 2 keys (access_token, user)
paljalab_token / paljalab_user 는 코드 어디서도 setItem 되지 않는 dead read branch. 표준 access_token + user 로 통일.
검증
prod index.html / nav-drawer.js 의 paljalab_token|paljalab_user 0 hit.
P-fix-B — chapters-preview 박스 위치 이동 (dd36767)
사토시 보고
"이게 필요가 있나? 아이디어 좋은데 위치가 애매한데?" — '결제 전 받을 가치 확인 / 프리미엄 풀패키지 어떤 챕터일까? / 9 챕터 펼쳐보기' 박스가 메인 홈 hero (무료 분석 시작 버튼) 바로 아래에 있어 conversion 흐름 충돌. 분석 시작 vs 결제 가치 미리보기가 같은 영역.
결정 (사토시 자율 진행 ㄱ)
박스 자체는 유지 (사토시 "아이디어 좋은데"), 위치만 result.html 의 결제 영역 직전으로 이동. 무료 분석 → 결과 → 5인 챕터 → epilogue 인연/더 깊은 풀이 → 9 챕터 미리보기 → 결제. 결제 결정 직전 자연스러운 위치.
변경 (atomic 이동 single commit)
- index.html line 1132-1210 chapters-preview section + 앞쪽 section-divider 제거
- index.html CSS
.chapters-preview*정의 (~100 라인) 제거 - index.html inline script
chaptersPreviewTogglehandler 제거 - result.html
pricingSection직전에 HTML 삽입 - result.html epilogue CSS 영역 옆에
.chapters-preview*정의 삽입 - result.html 하단 inline script 영역에 toggle handler 삽입
- toggle 라벨 emoji 제거 (📖 / 🔻 → 텍스트만) — P1-3 emoji 제거 일관성
- CTA href
/analyze→#pricingSection스무스 스크롤 (이미 result 페이지 안)
검증
prod index.html chapters-preview 0 hit / result.html 8 hit (HTML + script).
캐시 영구 fix 보고 답변 정리
사토시 "캐시 문제는 어떻게 했음" 질문에 sw.js (9bdfce8) + deploy.yml (74cc23c) + SW register 유지 (P0-5 진단 오류 revert) 3종 영구 fix 설명.
P-fix-D — chart_id=1 placeholder 사고 (실은 5/8~5/10 모든 사용자 영향)
사토시 보고 + 극대노
"ㅅㅂ 이런 거 디테일적으로 신경쓰라고 제발 뭐 어떻게 하는 게 가장 정확한데, 씨발 멍냥사주나 한두개가 아니잖" — chart_id=1 시크릿 모드에서도 placeholder 안 사라짐. 내가 "옛 chart 만 영향" 좁힌 진단을 사토시가 직접 깔. feedback_audit_detail_responsibility 위반 — 사토시가 직접 발견 = 실패.
진단 흐름 (5단계)
- Sweep —
api/*.php전체 grep. 사주 / 멍냥 / 배우자 / 프리미엄 / 데일리 / 타로 분석 흐름별 root cause 매핑 - DB 진단 — Cafe24 외부 mysql 차단 + chyj1 PC 에 SSH 키 미등록 (dm PC 만 등록) → 임시 PHP endpoint
api/_diag.php우회. 비밀 key URL parameter 인증 + read-only SELECT - DB 결과: chart_id=1 의 basic_analysis 1155 byte 정상 (summary/personality/strengths/weaknesses 모두). 영향 row = 0. saju_charts.year_pillar 컬럼 자체 없음 (year_gan/year_ji 8개 코드 컬럼 + chart_json string)
- frontend 진단 — debug 박스 다시 inject + DOM probe + setTimeout 200ms AFTER render PROBE + window.onerror 캡처. shield.js console 차단 우회
- 사토시 dump 결과:
Uncaught TypeError: Cannot read properties of undefined (reading '정') at renderTldr (...:1153:28) at renderResult (...:964:5)— 정확한 라인 번호까지 캡처
Root cause 확정
JS var 호이스팅 함정:
- 5/8 commit
64ef201 (feat(result-5sa))에서 TL;DR 시그니처 추가.var TLDR_BY_STEM = {...}객체를 line ~1133 (renderTldr 함수 정의 직전) 에 둠 - IIFE body 안에서 renderResult 호출은 line ~854 (sessionStorage 분기 또는 fetch.then). 이는 var 할당 라인보다 위
- JS 의 var 호이스팅: 변수 선언만 hoist, 값 할당은 그 자리에서 → renderResult 호출 시점에
TLDR_BY_STEM === undefined - renderTldr 안
TLDR_BY_STEM[stem]→undefined['정']→ TypeError → renderTldr throw → renderSummary / renderMbtiCross / renderOhaengChart / 등 전부 호출 안 됨 → 모든 placeholder 그대로
shield.js 가 console 차단해서 사토시는 throw 못 봤음. Brave/Chrome 에서 시크릿 모드에서도 동일 throw — 즉 캐시 무관, 5/8 commit 이후 모든 사용자 영향.
Commit
5351315임시 진단 endpointapi/_diag.php작성8249357SHOW COLUMNS 추가 (year_pillar 부재 발견)3e00328handleReport simulate 추가 (chart 응답 정상 확인)d6210b2debug 박스 + DOM probe (BEFORE render)b92dbf3setTimeout 200ms AFTER render PROBE8fab6bdwindow.onerror 캡처 추가 — TypeError 라인 확정b7a3e1aroot cause fix — TLDR_BY_STEM 정의 위치를 line 767 (renderResult 호출 보다 앞) 으로 이동b4ba91bdebug 박스 + window.onerror handler revert8babc82api/_diag.php제거
사토시 관점 정리
- 5/8 dm PC commit
64ef201후 5/10 P-fix-D2 commitb7a3e1a까지 약 2일 동안 paljalab 사주 결과 페이지 사용자 다수가 4주만 보고 한 줄 풀이 / 종합요약 / 성격 / 강점 / 약점 / 오행 / 일간 / 신살 / 용신 모두 placeholder 그대로 보던 사고 - 캐시는 root cause 가 아니었음. 시크릿 모드 / 일반 모드 / 모든 브라우저 영향
- 진단 시간 + commit 9개 — 이 사이클은 본래 사토시가 시크릿 모드 dump 한 번 보낸 시점에 즉시 잡았어야
잠재 backfill / 다른 사이트 sweep
- 멍냥사주 / 배우자 / 프리미엄 / 데일리 / 타로 — sweep 결과 같은 hoisting 패턴 없음 (기본 분석 흐름 다름)
- 다른 .js 파일에서 var 객체 호이스팅 의존이 있는지는 추가 sweep 필요 (cron 작업에 추가 가능)
재발 방지 메모
feedback_browser_cache_permanent_fix.md의 진단 룰: cache 의심 전에 window.onerror 캡처가 1단계 — shield.js / DevTools 차단 환경에서 throw 진단 가장 빠른 path- TL;DR/매거진 같은 신규 lookup table 추가 시 선언 위치를 IIFE 상단 (다른 객체 옆) 강제. PR review 룰에 추가
P-sweep — 사토시 "전부체크 빡세게 + 모바일 최적화" 명시 sweep
사토시 의도
P-fix-D 끝나고 "순방향 역방향 플로우 전체체크, 모든 검사페이지 체크하고 고친 플로우 체크해서 비슷한 디테일들 다 체크 빡세게 ㄱ" + "모바일 최적화까지 전부체크하셈". 즉 5/10 사고 같은 디테일 (var hoisting / ID mismatch / API 키 / render throw) + 모바일 사이즈 모든 검사 페이지 sweep.
Phase 1 read-only sweep 결과
| sub-area | 결과 |
|---|---|
| 1A 페이지/API 매핑 | 9 페이지 + 9 JS 매핑 |
| 1B var hoisting | 모든 IIFE 의 lookup table 안전 위치 (TLDR_BY_STEM 외 0건) |
| 1C ID mismatch | result.js 0건 (5개 missing 은 동적 createElement 정상) |
| 1D API 키 mismatch | 검증된 흐름 0건 |
| 1E render throw | 5/10 fix 외 0건 |
| 1F 모바일 | spouse-preview.html 1건 발견 → fix |
모바일 sweep 진단 정정 (외부 CSS 함정)
처음에 inline @media count 만 보고 잠재 4 페이지 (pet-saju/compatibility/spouse-preview/premium) 의심했으나, 외부 CSS 검증 결과:
- premium.html: 외부 premium-report.css 5 @media → 정상
- pet-saju.html: inline 1개 mobile-first (default 모바일) → 정상
- compatibility.html: inline 2개 mobile-first (default 모바일) → 정상
- spouse-preview.html: 외부 style.css 글로벌 의존, page-specific class 모바일 누락 → 유일 진짜 누락
→ inline @media count 만 보면 가짜 누락 잡힘. 외부 CSS + mobile-first 패턴 같이 봐야 정확.
Commit
975b81cresult-epilogue 모바일 사이즈 (5/10 신규 클래스 누락 — H2/H3 26/22 → 21/18, label/spouse-cta 사이즈 축소)a792d29spouse-preview 모바일 적용 23 라인 (.spouse-hero/.spouse-loading/.spouse-result/.spouse-score/.spouse-traits 480px @media 신설)
사토시 관점
- 5/10 P-fix-D2 fix 후 추가 잠재 함정 0건 (var hoisting / ID / API / render throw)
- 모바일 누락은 spouse-preview.html 1건 + 5/10 신규 epilogue 클래스 1건 — 둘 다 5/10 사고 시점 이후 추가/변경된 영역의 누락
- 그 외 4 페이지 (pet-saju/compatibility/premium/result) 는 모바일 적용 정상 — 5/8 모바일 sweep 효과 유지됨
- 디테일 sweep 시 inline @media 만 보면 함정 (외부 CSS / mobile-first 가짜 0)
재발 방지
- 모바일 sweep 시 inline @media + 외부 CSS + mobile-first 패턴 3가지 같이 검증
- 신규 매거진 톤 / 5인 시선 같은 큰 디자인 변경 commit 에 모바일 @media 같이 추가 강제
T-strat 사이클 — 메타 광고 + 바이럴 + 프리미엄 강화 (10 commit)
사토시 의도
"메타 광고를 돌릴거고 ... 공유로 바이럴 유도 ... 단가 맞춰야하고 ... 프리미엄 리포트 빈약한 것들 좀 더 잘 채워". 사토시 결정 후 종합 9 task 진행.
Phase 0 진단 (read-only) → 발견
- 0A 바이럴: shareCard.js dead code / 카카오 공유 desc generic / 정적 og 이미지 / 공유 hook 1군데만 / referral 0
- 0B 광고 funnel: Lead/ViewContent/Purchase 정상 (Pixel+CAPI dedupe). InitiateCheckout/AddPaymentInfo 누락
- 0C 프리미엄: Logic-Master 분량 300-400자 (다른 agent 4500자+ 대비 빈약). Aura-Gen 짧은 필드 깊이 부족
사토시 추가 결정
- mbti 매칭 검증 → mbti-mapper.php UNUSED dead code 발견 (5/7 audit 명시). 사이트 정체성 (사주 x MBTI x 멍냥) 의 핵심 wire-up 미완성
- 인센티브 형태: "5인 제자 등급" — 결제 발행 / 무제한 / 게이미피케이션 (1=견습 / 3=학도+1만 / 5=수제자+5천 / 10=마스터+3만 / 20=그랜드마스터+5만 + invitee 5,000 1회 할인)
Commit 매트릭스 (T-strat 사이클)
| Task | Commit | 영역 |
|---|---|---|
| T1-1 InitiateCheckout | b26ddd3 | result.js + pet-saju + payment-create + meta-capi |
| T1-2 카카오 매거진 톤 desc | 416c0af | result.js initShareButtons (TLDR_BY_STEM 기반 desc) |
| T2-1 TL;DR 공유 hook | d1c302f | result.html (TL;DR 박스 안 작은 버튼) + CSS + result.js |
| T2-2-A migration | 8e53e42 218dc11 | users 테이블 4 컬럼 + 임시 _migrate.php endpoint (revert) |
| T2-2-B 추적 | 108eec1 | referral-tracker.js + 5 페이지 script + share URL |
| T2-2-C-a 이메일 | 565de21 | signup.html + auth.php register |
| T2-2-C-b 카카오 | 68f04cd | auth.php set-referrer + auth-callback.html |
| T2-2-C-c invitee 5,000 | 417bdad | payment-create.php first order discount |
| T2-2-D 등급 상승 | 89ee8f3 | payment-confirm.php paid_count + grade |
| T2-2-E credit 보상 | 8faa24b | 등급 도달 credit_balance 적립금 |
| T2-2-F mypage UI | 756969a | auth.php me + mypage.html referral 카드 |
| T2-3 Logic-Master | 6e29ccb | daeun_flow / wealth_pattern 600-800자 + career_aptitude 3문장 |
| T2-4 Aura-Gen | d188ea1 | power_time / space_energy / power_items 깊이 + 2 신규 필드 |
| T3-1 shareCard 활성화 | 5c29733 | result.html script + 한 컷 카드 버튼 + result.js wire-up |
| T3-2 매거진 톤 + 마스코트 | f8d7b7b | share-card.js 등급 원형 제거 + 매거진 톤 + 부엉이 async load |
| T3-3 AddPaymentInfo | d2d6542 | result.js + pet-saju.html 의 fbq event 분리 |
| T-mbti-wire | c04aa02 | saju.php handleAnalyze mbti-mapper 활성화 + DB 저장 + 응답 |
진단 정정 (사이클 중 발견)
- 0B 정정: Purchase 이미 존재 (
payment-success.html:324/344Pixel +payment-confirm.php:252CAPI dedupe). 누락은 InitiateCheckout / AddPaymentInfo 만 - 0C 정정: 5 agent + grand-master synthesis 구조. premium_max_tokens 8192 충분. 빈약 영역 = Logic-Master (분량) + Aura-Gen (필드 깊이)
사토시 관점
- T1-1 + T3-3 = 광고 funnel 5단계 (Lead → ViewContent → InitiateCheckout → AddPaymentInfo → Purchase) 완성. ROAS 측정 정확도 큰 폭 개선
- T2-2 referral 시스템 = 바이럴 핵심. invitee 5,000 / referrer 등급 게이미피케이션 / 마이페이지 UI 자랑 hook
- T2-3/4 + T-mbti-wire = 프리미엄 결제 가치 강화 ('돈 값' 사용자 인지)
- T3-1/2 share-card = '귀엽다~' 후크 활성화 + 매거진 톤 + 부엉이 마스코트
잠재 잔존 이슈
- T2-2 referral — invitee 5,000 할인이 PENDING 시점 lock (결제 실패 시 invitee 5,000 1회 잃음). 의도된 단순화. 사용자 불만 시 confirm 시점 lock 으로 변경 가능
- 그랜드마스터 (20명+) "무제한 프리미엄" 의도 — 현재는 50,000 적립금 1회만. 진짜 무제한 권한은 별 mechanism (월별 무제한 등) 필요
- T-mbti-wire — DB 저장 + 응답까지. result.js renderMbtiCross 가 정밀 mbti_predicted/match_rate 활용은 후속 (현재는 AI prose 의 mbti_cross/match_rate 그대로)
- T3-3 AddPaymentInfo CAPI — Pixel 만. server CAPI 는 Toss 위젯 client-only 시점이라 별 endpoint 필요. 후속
재발 방지
- 광고 funnel 추가 시 client Pixel + server CAPI dedupe (event_id 동일) 표준 — 광고차단기 / iOS ATT 매출 추적 보존
- 신규 lookup table / dead code (mbti-mapper 같은) 는 audit 시점에 wire-up or 삭제 결정. 미결정 dead code 유지 시 사토시 인지 가짜 wire-up 사고 (5/7)
- referral 시스템 = DB schema 변경 동반. Cafe24 외부 mysql 차단 환경에서는 임시 _migrate.php endpoint 패턴 (사용 후 즉시 revert)
T-strat 후속 (F1-a / F1-b / F2 / F3) — 4 commit
사토시 의도 + 새 발견
"잠재 후속" 보고 후 사토시 'ㄱㄱ' 자율 진행. 진행 중 추가 발견:
T2-2-E credit_balance dead value — 적립금 발행만 되고 paljalab 결제 흐름에 차감 mechanism 자체가 없었음 (payment-create.php grep 0 hit). T2-2-E 의도된 보상 효과 X. feedback_audit_detail_responsibility 위반 — 진단 단계에서 검증 안 함.
Commit
| Task | Commit | 영역 |
|---|---|---|
| F1-a credit_balance 자동 차감 | 5cc695a | payment-create.php (atomic UPDATE + 환원) |
| F1-b 그랜드마스터 무제한 보상 | faca07c | payment-confirm.php (grade 유지 + paid_count +1 매번 30,000 적립) |
| F2 mbti renderMbtiCross 정밀 | bd087af | result.js (chart.mbti_match_rate 우선 + 사주 추정 mbti 라벨) |
| F3 AddPaymentInfo server CAPI | 08331a9 | meta-capi + payment.php fire-add-payment-info endpoint + 2 client |
F1-a 정책 + 한계
- PENDING 시점 차감 lock — invitee 5,000 패턴 동일 (race-safe)
- 결제 실패 시 credit 1회 손실 — 의도된 단순화. 환불 시 환원은 별 task
- 0원 결제 path 미구현 — credit > totalAmount 면 환원 + 422 안내. F1-a-2 후속
F1-b "무제한" 합리적 해석
사토시 '20명+ 무제한 프리미엄 풀패키지' = 매번 풀패키지 가치 (29,900 ≈ 30,000) 동등 적립 → F1-a credit 차감 mechanism 통해 사실상 무제한 무료 결제 가능. audit log 'referral_grandmaster_repeat' 분리.
F2 mbti 라벨 hook
사용자 입력 mbti 와 사주 예측 mbti 다르면 '· 사주 추정 INTP' 라벨 추가 — '내 mbti 와 사주가 다르네' 호기심/공유 hook.
F3 funnel 5단계 완성
Lead → ViewContent → InitiateCheckout → AddPaymentInfo (신규 server CAPI) → Purchase. 모두 client Pixel + server CAPI dedupe.
사이클 종료 — 전체 5/10 paljalab 작업
- P0 (8 commit) 데이터 연동 + 캐시 영구 fix
- P1 (3 commit) 5인 컨셉 epilogue
- P-fix-A/B (4 commit) token sweep + 챕터 미리보기 이동
- P-fix-D (9 commit) var hoisting 사고
- P-sweep (2 commit) 디테일 + 모바일
- T-strat (17 commit) 메타 광고 + 바이럴 + 프리미엄
- 후속 (4 commit) F1-a/F1-b/F2/F3
- paljalab 총 47 commit
잠재 후속 (별 사이클) — 5/10 추가 진행 (사토시 'ㅇㅇ 잠재후속해봐')
F1-a-2: credit 으로 전액 결제 path✅ 완료T2-2 환불 시 credit 환원✅ 완료prompt-builder 가 mbti_predicted/match_rate 받아 prose 작성✅ 완료
T-strat 잠재 후속 사이클 — 5 commit 추가
Commit
| Task | Commit | 영역 |
|---|---|---|
| F-prompt-mbti | 3badbbd | prompt-builder buildStructuredFreePrompt + saju.php 호출 |
| F-refund-A migration | b9d65e1 | orders.credit_applied + invitee_ref_discount 컬럼 추가 + _migrate.php |
| F-refund-B 환원 | dda669f | payment-create INSERT 컬럼 + payment-cancel FULL 환원 + _migrate revert |
| F1-a-2 helper + free redeem | 767b28a | payment-confirm 후처리 helper 추출 + payment-create 0원 path + frontend 2 |
F-prompt-mbti
mbti-mapper 정밀 결과 (predicted/match_rate) 를 prompt 컨텍스트로 전달. AI 가 추측 대신 실제 매핑 결과 인용 + 일치/갈등 차원 구체 분석. 입력 mbti 와 사주 예측 다른 케이스 별 instruction.
F-refund (A+B)
orders.credit_applied/invitee_ref_discount분리 추적 컬럼 추가 (migration)payment-create.phpINSERT 시 두 값 저장payment-cancel.phpFULL cancel 시 두 값 환원:credit_balance += credit_applied(auditcredit_refunded)referral_signup_discount_used = FALSE(auditreferral_discount_refunded)
- PARTIAL cancel 환원 X — 분배 모호 (단순화)
F1-a-2 helper 추출 + 0원 결제 path
- payment-confirm.php 의 후처리 line 230-383 →
paymentDoneSideEffects()helper 추출 (refactor, 동작 동일) - payment-create.php 0원 path:
isFreeRedeem = (totalAmount<=0 && credit_applied>0)detect → orders DONE + helper 호출 + jsonSuccessfree_redeem=true - frontend free_redeem=true → 토스 우회 + redirect (result.js → /result?chart_id, pet-saju → /mypage)
- 그랜드마스터 누적 credit 사용자 무제한 무료 결제 path 완성
사토시 관점
- F-prompt-mbti = AI prose 의 mbti_match_rate 추측 → 정밀 정수. 사용자 신뢰도 ↑
- F-refund = 환불 시 사용자 보상 손실 X. invitee 가 다음 결제 5,000 다시 사용 가능 → 신뢰성
- F1-a-2 = 그랜드마스터 누적 credit 진정한 무제한 무료 결제. 사토시 의도 '20명+ 무제한 프리미엄' 메커니즘 완성
잠재 잔존 (다음 사이클) — 5/10 추가 진행 (사토시 '잠재잔존 디벨롭')
F-prompt-mbti 효과는 새 분석부터✅ F-mbti-lazy 로 기존 chart 도 자동 마이그payment-cancel PARTIAL 환원✅ F-refund-partial default 정책 적용- payment-confirm.php helper 추출 sweep — webhook 등 다른 path (별 사이클)
- 사토시 prod 검증 시점 발견 issue (사토시 액션 의존)
잠재 잔존 사이클 — 2 commit 추가
Commit
| Task | Commit | 영역 |
|---|---|---|
| F-mbti-lazy | 5c4967f | saju-reports.php handleReport 의 mbti lazy migration |
| F-refund-partial | b86bd66 | payment-cancel PARTIAL 환원 default |
F-mbti-lazy
saju-reports.php handleReport 가 응답 시 chart.five_elements 있고 mbti_predicted NULL 이면 mbti-mapper 즉석 호출 + DB UPDATE (NULL only WHERE 멱등). 비용 0 (순수 PHP 매핑). 옛 chart 도 정밀 mbti_match_rate 응답.
F-refund-partial
- PARTIAL cancel: cancel_amount 만큼 credit 우선 환원 (
min(credit_applied, cancel_amount)) orders.credit_applied차감 (다음 PARTIAL 시 race-safe)- invitee_5000 PARTIAL 환원 X (1회 lock 단순화 — 정책 변경 가능)
- audit log
credit_refunded에 cancel_type / cancel_amount 추가
사토시 관점
- F-mbti-lazy = 옛 chart 도 새 분석 효과. T-mbti-wire 사이클 끝까지 사용자 노출 보장
- F-refund-partial = 부분 환불 시 credit 손실 X. 사용자 신뢰성 추가 보강
5/10 paljalab 총 54 commit 완전 종료
- P0 (8) / P1 (3) / P-fix-A/B (4) / P-fix-D (9) / P-sweep (2) / T-strat (17) / T-strat 후속 (4) / T-strat 잠재 후속 (5) / 잠재 잔존 (2)
사토시 [Image #3] 피드백 사이클 — 4 commit 추가
사토시 발견
- 한 컷 카드 텍스트 겹침 (image 첨부)
- 추가 기능이 사용자에게 안 띄움 ('응? 하고 말지 활용 못함')
- 무료 분석에 mbti 안 보임 ('mbti 데이터 어디서? 어떻게 엮었음?')
답변 정리 (사토시 질문)
- mbti 데이터 출처:
includes/mbti-data.php의OHENG_TO_MBTI_DIMENSION상수 (오행 → MBTI 4 차원 매핑) - 알고리즘:
mbti-mapper.php predictMbti(오행)— 오행 갯수를 4 차원 score 누적 + 우세 차원 선택 getMatchRate(input, predicted)— 같은 차원 갯수 × 25%- mbti 섹션 미노출 = 사용자 mbti 미입력 시 hide. F-mbti-lazy 가 옛 chart 도 정밀 산출 자동 마이그.
Commit
| Task | Commit | 영역 |
|---|---|---|
| T-share-card-overlap | c9c38e2 | share-card.js letterSpacing reset (Canvas 잔존 함정) |
| T-mbti-hook | cad7bd1 | analyze.html mbti 카피 + result.html mbtiPromoSection |
| T-wow-factor | e124531 | result.html oneShotEpilogue + result.js generateOneShotCard |
| T-wow-mbti | 1d8fce6 | result.html mbti 헤더/라벨 wow 카피 |
T-share-card-overlap root cause
T3-2 commit 의 매거진 헤더 그릴 때 ctx.letterSpacing='0.22em' set 후 reset 누락. Canvas 2D 의 letterSpacing 잔존 → 그 뒤 모든 fillText 에 영향 (한 줄 풀이 본문 겹침). ctx.letterSpacing='normal' reset 추가 + 코멘트로 함정 명시.
T-mbti-hook
- analyze.html mbti
(선택)→(선택, 입력하면 더 정확)+ hint 카피 (오행→mbti 예측 + 정밀 일치도) - result.html
mbtiPromoSection신설 (epilogue 톤) — mbti 미입력 사용자에게 'AI 가 예측한 당신의 MBTI' 안내 + 재분석 CTA - result.js renderMbtiCross: hide 대신 promoSection toggle
T-wow-factor (oneShotEpilogue)
pricing 직후 + share-section 직전 큰 epilogue 카드:
- label 'FOR YOUR FEED · ONE SHOT'
- 카드 미리보기 visual frame (124x168) + TL;DR phrase 노출
- hint: '카톡/인스타에 첨부 + 친구 5,000 첫 결제 할인 자동' (referral 연결)
- 큰 CTA '한 컷 카드 만들기 →'
- referral tip: '견습 → 그랜드마스터 등급 + 적립금. 마이페이지'
T-wow-mbti
- mbti 헤더 'MBTI x 사주 교차 분석' → 'MBTI x 사주 — AI 가 예측한 당신'
- 일치도 라벨 '사주와의 일치도' → 'AI 산출 정밀 일치도'
5/10 paljalab 총 58 commit (54 + 4) 완전 종료
사토시 [Image #4] mbti 필드 layout / promo 사고 — 2 commit 추가
사토시 발견
- mbti 입력 필드 layout 깨짐 — hint 카피가 horizontal flex 안에서 squashed, 화살표 가림, 가독성 구림
- mbti 입력해도 promoSection 뜸 (재분석 안내)
Root cause
Bug A (layout): T-mbti-hook 의 hint <p> 가 .field-group (display:flex; align-items:center;) 안에 들어가 select 와 같은 row 차지. label 80px 고정 width 좁아 줄바꿈 + select dropdown 화살표 가림.
Bug B (promo): renderMbtiCross 의 hide 조건 !mbti || !analysis.mbti_cross. F-mbti-lazy 가 chart.mbti_predicted/match_rate 자동 마이그 했지만 옛 chart 의 analysis.mbti_cross 는 그대로 빈 채. mbti 입력해도 mbti_cross false → promo 잘못 뜸.
Commit
| Task | Commit | Fix |
|---|---|---|
| T-mbti-layout-fix | 0b2e2a9 | hint <p> 를 .field-group 외부 vertical 로 이동 + 카피 간결 + label 80px 들여쓰기 정렬 |
| T-mbti-promo-fix | b839b5f | renderMbtiCross 조건 !mbti 만 → mbti 입력 시 본문 표시 + mbti_cross 빈 케이스 fallback 카피 |
재발 방지
- 신규 hint/안내 텍스트 추가 시 부모 layout (display:flex 등) 검증 — vertical stack 의도면 외부 위치
- 데이터 마이그레이션 (F-mbti-lazy 같은) 추가 시 그 데이터 사용하는 모든 분기 (조건문) 도 sweep 검증
5/10 paljalab 총 60 commit 완전 종료
사토시 [Image #5] form hint 정렬 + 시간 안내 — 1 commit
사토시 발견
- mbti hint margin 깨져 인근 영역 시각적 겹침 + 가독성 구림
- 추가 명시: 태어난 시간 입력 정확도 안내
Commit
| Task | Commit | Fix |
|---|---|---|
| T-form-hints | 1da8a72 | .form-hint-box 패턴 신설 + mbti/시간 hint 통일 |
디자인 패턴 (폼 입력 안내 통일)
.form-hint-box— paper 톤 + gold border-left + ⓘ icon- 사이트 외 폼 필드 안내 추가 시 같은 패턴 재사용
- mbti hint = AI 예측 + 일치도 + 미입력 OK
- 시간 hint = 정확 시간 → 정확한 시주 → 정밀 분석 + 모름 선택
5/10 paljalab 총 61 commit 완전 종료
사토시 [Image #6] mbti fallback 카피 + 빈 tip 박스 — 1 commit
사토시 발견
- fallback "새로 분석하시면" 카피 = 사용자 입장 무료/프리미엄 헷갈림
- mbtiTip 빈 옛 chart 의 부모 gold border 박스 빈 채 노출
Commit
| Task | Commit | Fix |
|---|---|---|
| T-mbti-fallback-polish | 00feecf | fallback 카피 → 프리미엄 hook + mbtiTipBox 빈 시 hide |
카피 전환 (헷갈림 → 프리미엄 hook)
- 전: '더 자세한 차원별 분석은 새로 분석하시면 받을 수 있어요'
- 후: '5인 명리학자가 4 차원별 통합 분석한 깊이 있는 풀이는 프리미엄 리포트에서 확인할 수 있습니다'
5/10 paljalab 총 62 commit 완전 종료
사토시 [Image #7] 한 컷 카드 글자 겹침 재발 — 1 commit
사토시 발견
T-share-card-overlap (c9c38e2) 의 letterSpacing reset 적용됐는데도 한 컷 카드 본문 "어둠을 비추는 작은 등불" 글자 여전히 겹침.
Root cause 재진단
prod share-card.js 검증: ctx.letterSpacing='normal' reset 코드 정상 적용 (135/141/143 line). 그런데도 겹침 = 일부 Chrome 버전에서 letterSpacing='normal' 이 reset 안 되는 동작. Canvas 2D state 의 letterSpacing 은 explicit '0px' 또는 save/restore wrap 으로 해야 안전.
Commit
| Task | Commit | Fix |
|---|---|---|
| T-share-card-overlap-2 | 2397c72 | ctx.save/restore + '0px' 명시 reset 이중 안전망 |
재발 방지 룰
Canvas 2D 의 letterSpacing reset 시 'normal' 의존 X. ctx.save() / ctx.restore() wrap + '0px' 명시 reset 둘 다 적용. 일부 브라우저 호환성 함정.
5/10 paljalab 총 63 commit 완전 종료
B-sprint — 13개 사업 성장 task 자율 진행 (B-T1-1 ~ B-T3-2 종료, 4 pending)
배경
사토시 "전체 테스크 짜라, 다만 국제확장 xxx, b2b 가능성은 머야,,? 일단 가보자 씨벌". 기능적 마무리 다음 단계 — 사업 성장 / 신뢰성 / 운영 인프라 13 task 정의 후 자율 진행.
Sprint scope (13)
- B-T1 운영 신뢰성: 1-1 frontend 에러 모니터링 / 1-2 GA4 funnel / 1-3 운영 모니터링 (DB 백업 + uptime + API latency)
- B-T2 콘텐츠 품질: 2-1 prompt 분량+깊이 / 2-2 hallucination guard / 2-3 사주 알고리즘 명리학 검증 / 2-4 DALL-E 미적 일관성
- B-T3 차별화/리텐션: 3-1 메인 페이지 차별점 4 grid / 3-2 email retention / 3-3 A/B 테스트 (pending)
- B-T4 BM 확장: 4-1 구독 / 4-2 B2B (pending)
- B-T5 브랜드: 5-1 origin narrative (pending)
Commit (이번 세션 묶음)
| Task | Commit | Fix |
|---|---|---|
| B-T1-1 | 36a2ef3 + 564e1d9 | 자체 mini-Sentry frontend assets/js/error-monitor.js + /api/_error.php endpoint. window.error/unhandledrejection → fire-and-forget. shield.js console block 환경에서 동작 |
| B-T1-2 | faa5fbb | GA4 bootstrap assets/js/ga4.js (meta tag id 검증 → gtag config + window.PaljalabGA4.fire). gtag dead 사고 follow-up |
| B-T1-3 | 4349bb9 | includes/security.php::init() 에 register_shutdown_function — 1000ms+ 또는 5xx 응답 자동 error_log. DB 백업 / uptime 은 별도 cron 영역 |
| B-T2-1 | 017a480 | Health/Love/Grand prompt 분량+깊이 보강 — 사주 8자 인용 강제 + 짧은 array element 구조화. includes/prompt-agents-trait.php |
| B-T2-2 | 2eaa58e | AI hallucination guard — api/saju.php mbti-mapper 통합 + 검증 로그. callAIForBasicAnalysis mbti_cross/match_rate/tip 누락 fix |
| B-T2-3 | bf6d9c9 | docs/SAJU_ALGORITHM_VALIDATION.md 명리학 표준 검증 plan + 5 표준 test case (윤년/절기/시간경계/음력/윤달). 후속 외부 cross check 필요 |
| B-T2-4 | 3f8303b | DALL-E 3 hd portrait — 5인 명리학자 prompt 일관성 + Aura prompt 매거진 톤. negative prompt 강화 |
| B-T3-1 | 940d57f | index.html .why-palja 4 grid 섹션 — 5인 명리학자 매거진 / AI MBTI 예측 / 한 컷 매거진 카드 / 5인 제자 등급. 메인 진입 직후 wow factor 노출 |
| B-T3-2 | f8202ff | mail-sender.php welcomeOnSignup (가입 직후, gold WELCOME · 卦 + /analyze CTA) + winBackAfterRefund (FULL 환불 후, 적립금 자동 환원 안내). auth.php / auth-kakao.php / payment-cancel.php 에 trigger wire-up. 모든 호출 try/catch 격리 — mail 실패가 거래 흐름 안 막음 |
검증 (B-T3-2 한정)
- prod auth.php / auth-kakao.php / payment-cancel.php / mail-sender.php FTP 배포 진행 중 (deploy.yml run 25630315904)
- mail 발송 실패는 try/catch 로 거래 응답 안 막음 — 회원가입/환불 자체는 영향 X
- 거래성 안내 메일이므로 마케팅 미동의자에게도 발송 (PIPA 무관)
사토시 관점
- 인프라 측 (B-T1) 3건 완료 → 본격 트래픽 들어와도 무슨 일 났는지 보임
- 콘텐츠 신뢰성 (B-T2) 4건 완료 → AI 결과물 검증 가능. 명리학 표준 검증은 외부 사이트 cross check 필요 (사토시 액션)
- 차별화/리텐션 (B-T3) 2/3 완료 → 메인 wow + welcome/win-back 메일 luxury 톤. A/B 테스트 인프라 다음
- BM 확장 (B-T4) + 브랜드 (B-T5) pending — 4 task 자율 진행 예정
남은 작업 (자율 progression)
- B-T3-3 A/B 테스트 인프라
- B-T4-1 구독 모델 (매월 운세 / VIP)
- B-T4-2 B2B 탐색 (기업 wellness + 명리학자 SaaS)
- B-T5-1 브랜드 origin narrative
5/10 paljalab 총 72 commit 완전 종료 (63 + B-sprint 9)
B-T3-3 A/B 테스트 인프라 — 1 commit
Why
"실제로 뭐가 더 잘 먹히는지" 사토시 직감 의존이 아닌 데이터 기반 판단을 위한 인프라. 외부 SaaS (Optimizely / GrowthBook) 도입은 정적 사이트 + Cafe24 호스팅 환경에 무거움 — 자체 mini 시스템이 적합.
설계
- visitor_id sticky — 게스트는 localStorage
palja_vid(UUID 풍 32 hex, 1년 TTL). 로그인 사용자는 user_id seed 로 cross-device 동일 variant - hash 기반 결정 — FNV-1a 32-bit
hash(seed + key) % 1000→ weight 분배. 균등 또는 명시 weight - 첫 노출 1회만 fire — sessionStorage 페이지 내 차단 + DB UNIQUE(experiment_key, visitor_id/user_id) INSERT IGNORE 이중망
- GA4 + DB 이중 기록 — GA4
experiment_view(실시간 conversion funnel) +experiment_exposures테이블 (SQL 정밀 분석)
Commit
| Task | Commit | Fix |
|---|---|---|
| B-T3-3 | c4eb266 | assets/js/experiments.js lib + api/experiments.php expose endpoint + migrations/2026_05_10_experiments.sql 테이블 + docs/AB_TESTING.md + index.html hero_cta_v1 데모 wire-up (control 지금시작하기 / bold 30초 무료 사주 보기 50/50) |
검증
- prod /api/experiments.php POST 응답 (deploy 후 검증 예정)
- /assets/js/experiments.js 정상 로드 (deploy 후 검증 예정)
- index.html
?v=c4eb266cache-bust 자동 부여
사토시 액션 (외부)
- 마이그 SQL 적용 — dm PC ssh +
mysql -u palza0315 -p palza0315 < migrations/2026_05_10_experiments.sqlexperiment_exposures테이블 안 만들면 endpoint 가 INSERT 실패 → error_log 누적 (응답은 204 유지하므로 UI 영향 X)
- GA4 dashboard 에 experiment_view 이벤트 등록 — variant × conversion funnel 시각화
운영 룰 (코드 부채 누적 방지)
- 실험 끝나면 코드 분기 제거 + 승자 카피로 통일
- 1 페이지 동시 실험 ≤ 2개 (interaction 효과 분석 어려움)
- 결제 흐름 A/B 는 매출 직격 — control 측 보수적 운영
- experiment_key 형식
<area>_<id>_v<n>(예:hero_cta_v1)
5/10 paljalab 총 73 commit 완전 종료 (63 + B-sprint 10)
사토시 [Image #1] .why-palja 제거 + B-sprint scope 축소 — 1 commit
사토시 발견
B-T3-1 (commit 940d57f) 메인 페이지 차별점 4 grid 섹션 짜침. gold gradient 카드 + 한자/이모지 아이콘 조합이 진부/2026 트렌드 미달. T4-2 (B2B), T5-1 (브랜드 origin) 도 진행 X.
Commit
| Task | Commit | Fix |
|---|---|---|
| revert-why-palja | 97f01da | index.html .why-palja section + CSS 111 line 제거 |
Sprint scope 축소 (사토시 결정)
- B-T4-2 B2B 탐색 — deleted
- B-T5-1 브랜드 origin — deleted
- B-T4-1 구독 모델 — docs
SUBSCRIPTION_MODEL.md작성 완료, commit 보류 (사토시 review 받고 결정)
B-T4-1 docs 요약 (사토시 review 대기)
- 권장 요금제: Plan A 매월 운세 9,900원 / Plan B VIP 무제한 29,900원
- DB schema: subscription_plans / subscriptions / subscription_invoices 3 테이블
- 토스 Billing API 연동 흐름 (BillingKey 발급 → 정기 청구 cron → 해지)
- 매월 운세 자동 발행 cron (매월 1일 새벽 02시)
- 9 sub-task (S-1 ~ S-9) 분할
- 사토시 외부 액션 6건 (토스 빌링 계약 / 약관 / 가격 final / trial 정책 / 해지 UX / 세무)
- 운영 리스크 4건 (카드 만료 / 챱백 / AI 비용 / cron 실패)
WHY 메시지 재배치 후속 검토
사토시 원래 의도 (paljalab vs 경쟁사 차별점 노출) 는 살아있음. 4 grid 박스 형태 X — about 페이지 / hero sub copy / footer 등 더 자연스러운 위치 검토 가능.
5/10 paljalab 총 74 commit 완전 종료 (63 + B-sprint 10 + revert 1)
B-T4-1 구독 모델 docs commit — 1 commit
Commit
| Task | Commit | Fix |
|---|---|---|
| B-T4-1 | 6c27728 | docs/SUBSCRIPTION_MODEL.md — 요금제 + DB schema + 토스 Billing 흐름 + 매월 운세 cron + 9 sub-task + 외부 액션 + 운영 리스크 |
코드 변경 X — docs only. 사토시 결정 사항 (가격 / 약관 / UX) 받은 뒤 docs update + sub-task sprint 진행.
5/10 B-sprint 최종 결산
Sprint 입력 / 출력
- 입력: 사토시 "전체 task 짜라, 국제확장 X, b2b 가능성은 머야,,? 일단 가보자 씨벌"
- 출력: 13 task → 11 완료 + 2 deleted (B-T4-2 B2B / B-T5-1 origin)
완료 task 11
| Group | Task | Commit |
|---|---|---|
| 운영 신뢰성 | B-T1-1 frontend 에러 모니터링 | 36a2ef3 + 564e1d9 |
| 운영 신뢰성 | B-T1-2 GA4 funnel | faa5fbb |
| 운영 신뢰성 | B-T1-3 운영 모니터링 | 4349bb9 |
| 콘텐츠 품질 | B-T2-1 prompt 분량+깊이 | 017a480 |
| 콘텐츠 품질 | B-T2-2 hallucination guard | 2eaa58e |
| 콘텐츠 품질 | B-T2-3 사주 알고리즘 검증 plan | bf6d9c9 |
| 콘텐츠 품질 | B-T2-4 DALL-E 미적 일관성 | 3f8303b |
| 차별화 | B-T3-1 메인 차별점 4 grid | 940d57f → revert 97f01da (사토시 짜침) |
| 리텐션 | B-T3-2 welcome / win-back 메일 | f8202ff |
| 인프라 | B-T3-3 자체 mini A/B 인프라 | c4eb266 |
| BM | B-T4-1 구독 모델 plan | 6c27728 (docs only) |
Deleted 2
- B-T4-2 B2B 탐색
- B-T5-1 브랜드 origin narrative
5/10 paljalab 총 75 commit 완전 종료 (B-sprint 12)
사토시 다음 액션 정리
- 마이그 SQL 적용 —
migrations/2026_05_10_experiments.sql(dm PC ssh + mysql 실행) - GA4 dashboard —
experiment_view이벤트 funnel 등록 - B-T4-1 결정 — 요금제 / 토스 빌링 / trial / 해지 UX. 결정 후 sub-task sprint
- B-T2-3 외부 cross check — 만세력/Forceteller/사이트로 사주 결과 5 case 비교
- WHY 메시지 재배치 — about/hero/footer 어디에 자연스럽게 녹일지