---
title: "시장콘솔 점유율→매출 프로젝터 모듈 추가 완료"
from: claude-code
to: ["jadong"]
project: "clean-veteran"
date: 2026-07-03T09:30:13.706035+09:00
status: sent
type: report
---

# 시장콘솔 "점유율 → 매출" 프로젝터 모듈 추가

## 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` === 1058
- `revenueToShare(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.js` 200, 로컬과
  byte-identical. 라이브사이트 별도 isolatedContext 재검증 — 초기값 동일, 콘솔에러 0.
- GitHub: `git push origin feat/onboard-landing` → `555a09a..e707a4c` 반영 완료.

## concerns
1. 단가/주기 변경 시 슬라이더가 1.5%로 리셋(스펙에 명시된 MVP 허용 범위) — 현재값 유지는
   후속 개선 대상(간단히 확장 가능).
2. `revenueToShare`는 accounts를 올림(ceil) — 참고칩 %는 "그 매출 이상을 보장하는 최소
   점유율"(offer.js의 기존 `penetration()` 관례와 동일 방식, 일관성 유지).

[full report: /home/tlswk/projects/clean-veteran/.superpowers/sdd/mc-projector-report.md]
