o2o-infinith-demo/templates/supporters-astro
Haewon Kam 8776a15183 feat(ga4): AI 유입 트래픽 연동 뼈대 + 리포트 "측정 가능 범위" 절
2026-09-08 작업분. GA4 에서 AI 답변엔진 유입을 채널로 갈라 보는 뼈대를 세웠다.

- data/ai_channels.json: AI 답변엔진 리퍼러 목록(채널 그룹 정의의 근거)
- scripts/ga4_ai_traffic.py: GA4 Data API 로 AI 유입을 뽑는 러너. --mock 으로 합성
  데이터 검증까지 마쳤다. 실제 속성 연결은 GCP 계정이 정해진 뒤다
- supporters/src/layouts/Base.astro + 템플릿 site.json 2곳: ga4MeasurementId 태그.
  쿠키 고지 배너 결정 전까지 미리보기에는 ID 를 넣지 않는다
- scripts/build_discovery_report.ts: Integrity 절에 "측정 가능 범위" 를 넣어
  무엇을 재고 무엇을 못 재는지 리포트가 스스로 밝히게 했다
- 원진 진단 리포트 v2.1(HTML·PDF) 재생성분

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-09 10:53:54 +09:00
..
.vscode feat(supporters): 템플릿화 — 병원 고유값을 데이터로 분리하고 templates/supporters-astro 내보내기 2026-09-07 14:07:14 +09:00
briefs feat(supporters): 뉴스룸 워커 단계 + 뉴스 게이트 규칙, launchd 폴러 설치 2026-09-08 14:14:08 +09:00
public feat(supporters): 템플릿화 — 병원 고유값을 데이터로 분리하고 templates/supporters-astro 내보내기 2026-09-07 14:07:14 +09:00
scripts fix(supporters): collect_news 가 site.json 을 값이 바뀔 때만 다시 쓴다 (포맷만 바뀌는 diff 방지) 2026-09-08 14:14:42 +09:00
src feat(ga4): AI 유입 트래픽 연동 뼈대 + 리포트 "측정 가능 범위" 절 2026-09-09 10:53:54 +09:00
.env.example feat(supporters): 템플릿화 — 병원 고유값을 데이터로 분리하고 templates/supporters-astro 내보내기 2026-09-07 14:07:14 +09:00
.gitignore feat(supporters): 승인 UI·입력 반영·워커 — §7-5 ClinicInputsPanel + supporter_builds/inputs 마이그레이션 + apply_inputs, §12-2 상단 고지·개설자 승인·색인 빌드 필터, §7-6 워커 E2E(뷰성형외과 URL → 5편 → 게이트 0오류) 2026-09-07 17:07:06 +09:00
AGENTS.md feat(supporters): 템플릿화 — 병원 고유값을 데이터로 분리하고 templates/supporters-astro 내보내기 2026-09-07 14:07:14 +09:00
astro.config.mjs feat(supporters): 템플릿화 — 병원 고유값을 데이터로 분리하고 templates/supporters-astro 내보내기 2026-09-07 14:07:14 +09:00
CLAUDE.md feat(supporters): 템플릿화 — 병원 고유값을 데이터로 분리하고 templates/supporters-astro 내보내기 2026-09-07 14:07:14 +09:00
package-lock.json feat(supporters): 승인 UI·입력 반영·워커 — §7-5 ClinicInputsPanel + supporter_builds/inputs 마이그레이션 + apply_inputs, §12-2 상단 고지·개설자 승인·색인 빌드 필터, §7-6 워커 E2E(뷰성형외과 URL → 5편 → 게이트 0오류) 2026-09-07 17:07:06 +09:00
package.json feat(supporters): 승인 UI·입력 반영·워커 — §7-5 ClinicInputsPanel + supporter_builds/inputs 마이그레이션 + apply_inputs, §12-2 상단 고지·개설자 승인·색인 빌드 필터, §7-6 워커 E2E(뷰성형외과 URL → 5편 → 게이트 0오류) 2026-09-07 17:07:06 +09:00
README.md feat(supporters): 템플릿화 — 병원 고유값을 데이터로 분리하고 templates/supporters-astro 내보내기 2026-09-07 14:07:14 +09:00
tsconfig.json feat(supporters): 템플릿화 — 병원 고유값을 데이터로 분리하고 templates/supporters-astro 내보내기 2026-09-07 14:07:14 +09:00
vercel.json feat(supporters): 템플릿화 — 병원 고유값을 데이터로 분리하고 templates/supporters-astro 내보내기 2026-09-07 14:07:14 +09:00

supporters-astro 템플릿

병원 하나의 서포터즈 사이트를 만드는 Astro 7 정적 템플릿이다. supporters/(뷰성형외과 샘플)에서 node scripts/export_template.mjs로 생성되며, 직접 편집하지 않는다. 고칠 것은 supporters/에서 고치고 다시 내보낸다.

데이터만 채우면 되는 것

파일 내용 채우는 주체
src/data/factSheet.json 병원 사실 단일 원본 (NAP·진료시간·층·진료과·안전·이력·플랫폼 집계) 근거 수집기 + 병원 확인
src/data/authors.json 작성자(실명·직함·sameAs·정정 이메일), 의학 검토 원장 운영자·병원 입력
src/data/site.json 매체 이름·로고·홈 화면 큐레이션(영상 3편, 시설 사진, 방문 약도, 추천 글) 운영자
src/data/videos.json 유튜브 채널 집계 (Top10 롱폼·정보형 쇼츠+답) 수집기
src/data/news.json 뉴스룸 (보도자료·기고·언급) scripts/build_news.py
src/data/corrections.json 정정 기록 운영자
src/content/posts/*.md 글. frontmatter 규격은 src/content.config.ts 글 생성기 + 검토 승인
public/img/ 병원 허락을 받은 이미지 수집기
scripts/home_text.txt 홈페이지 본문(공백 제거). 40자 연속 일치 검사 기준 수집기

비어 있는 값은 화면에 "확인 대기"로 표시되고 스키마에서는 빠진다. 지어내지 않는다.

빌드·검사

npm ci
npm run build          # astro build + 발행 게이트(scripts/check.mjs). error가 있으면 exit 1
npm run gate:test      # 게이트 규칙 회귀 (픽스처 + 글 전편)
node scripts/check.mjs --update-layout   # 룩앤필 변경을 승인한 뒤에만 구조 기준선 갱신

배포 주소는 SITE_URL 환경변수(vercel.json·astro.config.mjs의 __CLINIC_ID__를 병원 id로 교체). 기본은 noindex이며 PUBLIC_INDEXABLE=true로 색인을 연다.