factcircuit
FactCircuit: an auditable claim-and-evidence verification loop with immutable provenance, staged checks, bounded retrieval, and reproducible evaluation.
기획팀용 플랫폼 총괄 KPI 대시보드
Translation pending
DataTypeScript · CSSGitHub @dimare-svOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
기획팀용 플랫폼 총괄 KPI 대시보드. 거래액 중심이 아니라 North Star(WAU) → 8개 레이어 관점으로 본다. 현재는 더미 데이터로 동작한다. 화면 상단의 주황색 고지 띠가 그 사실을 계속 표시한다. layer/[slug]/page.tsx 한 벌이 획득·활성·전환·유지·공급·신뢰·재무·시스템을 전부 그린다. 구조는 메인 지표 → 서브 지표 → 분해(대상 × 축) → 레이어 고유 표로 고정이고, 레이어마다 달라지는 것은 layer-specs.ts 의 데이터뿐이다. 탭 하나를 고치겠다고 화면 코드를 건드리면 나머지 일곱이 같이 깨진다. 개요의 타일 8개는 이 표의 메인 지표와 같은 값을 같은 곳에서 가져온다. 타일을 누르면 해당 레이어로 들어간다. 화면은 어댑터를 직접 import 하지 않는다. 항상 getDashboardSource() 를 거치고, 그 호출은 app/api/* 라우트에서만 일어난다. GA4 서비스 계정 키나 DB 접속 정보가 브라우저 번들에 실리지 않게 하기 위한 것이다.Read the full README ↗
기획팀용 플랫폼 총괄 KPI 대시보드. 거래액 중심이 아니라 North Star(WAU) → 8개 레이어 관점으로 본다.
현재는 더미 데이터로 동작한다. 화면 상단의 주황색 고지 띠가 그 사실을 계속 표시한다.
npm install
npm run dev # http://localhost:3000
npm run build # 배포 전 타입체크 + 빌드
src/
lib/data/
types.ts 도메인 타입 + DashboardSource 계약
index.ts DATA_SOURCE 로 어댑터 선택 — 서버 전용
adapters/mock/
build.ts 명세 → 화면 데이터. 단위·증감색·기간반영이 전부 여기
layer-specs.ts 8개 레이어의 지표 명세 ← 실제 내용은 이 파일
overview.ts L0 개요 (타일 8개는 layer-specs 에서 뽑는다)
lib/metrics/dictionary.ts 지표 사전 76개 + 불변 id. 카드↔정의를 잇는 고리
lib/settings.ts 목표·임계 (유일한 출처)
lib/settings-context.tsx 브라우저 로컬 오버라이드 — DB 연동 시 이 훅만 교체
app/api/
overview/route.ts GET /api/overview?period=d7
layer/[id]/route.ts GET /api/layer/acq?period=d7
app/
page.tsx L0 개요
layer/[slug]/page.tsx L1 — 8개 레이어가 공유하는 단 하나의 화면
components/ 화면 조각 + 차트
layer/[slug]/page.tsx 한 벌이 획득·활성·전환·유지·공급·신뢰·재무·시스템을 전부 그린다.
구조는 메인 지표 → 서브 지표 → 분해(대상 × 축) → 레이어 고유 표로 고정이고,
레이어마다 달라지는 것은 layer-specs.ts 의 데이터뿐이다.
탭 하나를 고치겠다고 화면 코드를 건드리면 나머지 일곱이 같이 깨진다.
| 레이어 | 메인 지표 | 분해 축 | 고유 표 |
|---|---|---|---|
| 01 획득 | 신규 가입자 | 유입채널 · 가입방식 · 지역 · 등급 | 등급 승급 처리 |
| 02 활성 | 기능 활성률 | 기능영역 · 플랫폼 · 시간대 · 유저 구분 | 기능영역별 체류·이탈 |
| 03 전환 | 구매 전환율 | 결제수단 · 유입경로 · 가격대 · 플랫폼 | 결제 실패 사유 |
| 04 유지 | D7 리텐션 | 유입채널 · 첫 구매 여부 · 가입방식 · 등급 | 이탈 위험군 세그먼트 |
| 05 공급 | 미니샵 활성률 | 카테고리 · 판매자 등급 · 개설 기간 · 지역 | 카테고리별 수급 |
| 06 신뢰·품질 | CS 첫응답 시간 | 문의 유형 · 채널 · 접수 시간대 · 플랫폼 | 문의 유형별 처리 |
| 07 재무 | GMV | 카테고리 · 가격대 · 결제수단 · 플랫폼 | 카테고리별 거래 |
| 08 시스템 | 크래시프리율 | 플랫폼 · 화면 · 앱 버전 · OS 버전 | 화면별 크래시 |
개요의 타일 8개는 이 표의 메인 지표와 같은 값을 같은 곳에서 가져온다. 타일을 누르면 해당 레이어로 들어간다.
화면은 어댑터를 직접 import 하지 않는다. 항상 getDashboardSource() 를 거치고,
그 호출은 app/api/* 라우트에서만 일어난다. GA4 서비스 계정 키나 DB 접속 정보가
브라우저 번들에 실리지 않게 하기 위한 것이다.
실데이터를 붙일 때는 src/lib/data/adapters/ 에 어댑터를 하나 추가하고
index.ts 의 switch 에 case 를 붙이면 끝난다. 화면 코드는 바뀌지 않는다.
DATA_SOURCE=mock (기본)
DATA_SOURCE=ga4 GA4 Data API — user_id 전송 반영 후
DATA_SOURCE=db PostgreSQL daily_metrics 집계 테이블
@pharmearth.kr 구글 계정만 들어올 수 있다. 로그인 화면과 인증 콜백을 빼고 전부 막혀 있고,
새 화면을 추가해도 자동으로 막힌다 (src/middleware.ts 는 화이트리스트가 아니라 블랙리스트다).
src/auth.ts 의 signIn 콜백)에서 한다.
구글의 hd 파라미터는 계정 선택 화면의 힌트일 뿐이고, 요청을 직접 만들면 우회된다.파메 운영 대시보드, 지원 이메일 입력 후 저장http://localhost:3000/api/auth/callback/google (로컬 개발용)https://<배포주소>/api/auth/callback/google (Vercel 주소).env.local 에 넣는다 (.env.example 참고)AUTH_SECRET 은 npx auth secret 으로 만든다Vercel 에 올릴 때는 같은 값을 Project Settings → Environment Variables 에 넣는다.
good(좋아졌나)을 따른다. CS 첫응답 시간처럼
lower_is_better 지표는 ▼가 초록이다. Delta.good 을 반드시 채울 것.trend.kind, 판정은 어댑터가 한다). 판정 기준은 지표이지 기간이 아니다 —
기간을 바꿀 때마다 차트 종류가 바뀌면 같은 지표로 안 읽힌다.kind: "limit"(지금 문제가 있다는 선)과
위험선에만 붙인다. 목표 미달은 타일에 "미달" 표시만 남긴다.src/lib/settings.ts 한 곳에만 적는다. 타일 하단 표시, 경고 점,
"주의 필요" 목록이 전부 여기서 계산된다. 화면에 숫자를 직접 적으면 목표를 한 번 바꿀 때
세 군데가 어긋난다.상단 이미지 저장 하나로만 한다 — 현재 화면 전체를 PNG 로 굽는다.
html-to-image 로 DOM 을 그대로 굽고, 저장 버튼 자신은 data-capture="exclude" 로 빠진다.
카드마다 ↓ 를 달아 뒀다가 뺐다. 화면 어디를 봐도 버튼이 먼저 눈에 들어와서
정작 읽어야 할 숫자가 뒤로 밀렸다.
상단 필터의 전체 / 구매 관점 / 판매 관점 은 세그먼트가 아니라 렌즈다.
판매자도 구매하므로 두 관점은 인원이 겹치고, 더해도 전체가 되지 않는다.
그래서 "구매자 / 판매자" 가 아니라 "구매 관점 / 판매 관점" 이라고 쓴다.
전체 배지가 붙는다
(03 전환=구매 전용, 05 공급=판매 전용, 08 시스템=역할 무관).파머 → 파머셀러 에서 역할이 바뀌므로
분해 축의 색을 두 계열로 나눈다. 정의는 src/lib/segments.ts 한 곳에 있다.user_type user property
(North Star WAU 구성의 양면 분해용) / 가입 시점 유입정보 users 적재(유입채널 분해용).
user_id는 더 이상 막는 조건이 아니다 — 없으면 기기 단위 근사치로 대체(활성·유지 레이어),
단 North Star 카드의 신규/복귀/유지 구성(WAU composition)은 여전히 코호트 단위 식별이
필요해서 지금은 목데이터로만 채워져 있다. 이 부분은 실측 전환 시 재검토 필요.daily_metrics 집계 테이블 설계 (DB 스키마 수령 후)07 재무의 단위 경제 표를 다시 잡아야 한다.