시장콘솔 "점유율 → 매출" 프로젝터 모듈 추가
status: 완료
"대한민국 병원 점유율 몇 %면 매출 얼마"를 슬라이더로 즉시 보는 피치 핵심 논리 도구를 사이드바 최하단에 추가(워터폴 6레버 브릿지와는 별개 — 순수 시장점유율 관점 역산기).
구현
web-console/js/projector.js(신규):shareToRevenue(점유율%→계정수/매출)·revenueToShare(목표매출→필요 점유율%, 참고칩용) 순수함수 +renderProjector(슬라이더 0~10%·step 0.1·초기 1.5% + 실시간 출력 + 100억/300억/500억 참고칩 + 가정라벨 렌더)index.html에#share-projector섹션(사이드바 맨 아래),ui.js에mountProjector()배선(초기 마운트 + 기존refreshOfferViews()에 연동 → 단가/주기 변경 시 재계산),app.css에 최소 스타일(기존 톤 재사용).
커밋범위
e707a4c(feat/onboard-landing, 직전555a09a), 5 files changed, 159 insertions(+)projector.js+projector.test.mjs(신규),index.html+ui.js+app.css(수정)
테스트: 19 passing (기존 16 + 신규 3, 전부 통과)
TDD로 진행(테스트 먼저 작성 → RED ERR_MODULE_NOT_FOUND 확인 → 구현 → GREEN 확인).
shareToRevenue(1.5,70563,9600000).accounts=== 1058revenueToShare(1e10,70563,9600000).accounts=== 1042 (100억=1,042개,PRESET.goal_100_count와 정확히 일치 — 피치 정합 확인)- 기존 offer/filters/matching/waterfall 16개 회귀 없음
헤드리스 검증(chrome-devtools MCP, isolatedContext — 공유 브라우저 세션과 무간섭)
- 초기: 1,058개·101.6억, 참고칩 100억=1.48%/300억=4.43%/500억=7.38% (손계산 일치)
- 슬라이더 5%로 조작 → 3,528개·338.7억 즉시 갱신
- 단가(#won) 20,000원 변경 →
refreshOfferViews로 프로젝터 재마운트, 매출 203.1억(2배)로 정확히 갱신(계정수는 1,058개 그대로 — 점유율·TAM에만 의존, 의도대로) - 주기(#freq) 주5회 변경 → freqMult 1.45 반영, 294.5억로 정확히 갱신
- 콘솔에러: 기존 favicon.ico 404 1건만(회귀 아님), 신규 에러 0
재배포 + 푸시
- Vercel:
/tmp/cv-console-deploy→vercel deploy --prod --yes→ READY, https://cv-hospital-map.vercel.app 에 alias./js/projector.js200, 로컬과 byte-identical. 라이브사이트 별도 isolatedContext 재검증 — 초기값 동일, 콘솔에러 0. - GitHub:
git push origin feat/onboard-landing→555a09a..e707a4c반영 완료.
concerns
- 단가/주기 변경 시 슬라이더가 1.5%로 리셋(스펙에 명시된 MVP 허용 범위) — 현재값 유지는 후속 개선 대상(간단히 확장 가능).
revenueToShare는 accounts를 올림(ceil) — 참고칩 %는 "그 매출 이상을 보장하는 최소 점유율"(offer.js의 기존penetration()관례와 동일 방식, 일관성 유지).
[full report: /home/tlswk/projects/clean-veteran/.superpowers/sdd/mc-projector-report.md]