o2o-infinith-demo/supporters/scripts/template
Haewon Kam e60ef04503 feat(supporters): 영어 화면의 병원 고유 사실을 데이터에서 읽도록 바꾸고 템플릿 재생성
templates/supporters-astro 는 supporters/ 에서 만들어지는 파생물인데, 정본이 된
supporters/ 코드에 뷰 고유 사실이 문장으로 박혀 있었다. 그대로 내보내면 다른 병원
사이트에 틀린 사실이 나간다. 빈 데이터로 빌드해 보니 실제로
"Founded 확인 대기 · Sinnonhyeon Station Exit 3" 가 나왔다.

데이터로 바꾼 곳 (전부 factSheetEn.json 에 이미 있던 값이다)
- 히어로 이미지 alt: site.json 의 heroImageAltEn 을 읽고, 없으면 한국어 alt 를 쓴다.
- 히어로 칩: 설립연도와 위치를 데이터에 있는 것만 잇는다. 둘 다 없으면 칩을 내지 않는다.
- 방문 카드 요약: factSheetEn 의 airportShort 가 있을 때만 경로를 적는다.
- 병원 카드 요약: 설립연도와 factSheetEn 의 building 첫 문장을 데이터에서 잇는다.
- 공항 카드: factSheetEn 의 airport 가 있을 때만 카드를 낸다.
- 영문 플래너 병원명: factSheetEn 의 shortName 을 읽고, 영문 표기가 없는 병원은
  한국어 상호를 쓴다.
- 404 안내: 상호를 factSheet 에서 읽는다.

템플릿 빈 데이터셋에 factSheetEn.json 이 없어서 뷰의 영문 사실이 통째로 남고 있었다.
빈 factSheetEn.json 을 만들고 site.json 에 heroImageAltEn 자리를 넣었다.

export_template.mjs 의 누락 검사가 상호만 찾아 지명으로 적힌 사실을 놓쳤다.
지명·건물 표현을 패턴에 넣고, 문장을 그리는 코드(src/pages·layouts·components·lib)만
내보내기를 멈추게 하고 데이터·빌드 도구는 알림만 하도록 나눴다. 빌드 도구의 기본 인자
때문에 검사가 늘 실패해 신호가 되지 못하던 문제도 함께 풀린다.

검증
- 빈 데이터 템플릿 빌드 14페이지, 영어 홈에 병원 고유 사실 0건, 사실을 말하던 조각은
  생략되고 요약문만 일반 문장으로 남는다.
- 뷰 사이트 빌드 32페이지, 영어 홈의 칩·공항 카드·요약문이 모두 그대로 나온다.
- 게이트 41/41 통과, check.mjs 오류 0건(경고 23건은 기존 건).
- 루트 tsc --noEmit 0 에러, 내보내기 종료코드 0.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-12 14:27:57 +09:00
..
data feat(supporters): 영어 화면의 병원 고유 사실을 데이터에서 읽도록 바꾸고 템플릿 재생성 2026-09-12 14:27:57 +09:00
planner feat(supporters): 회복 일정 플래너를 템플릿·워커에 통합 (/plan·/en/plan), /recovery·/stay 를 /plan 으로 정리 2026-09-11 11:27:59 +09:00
README.template.md 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로 색인을 연다.