docs: 파이프라인 설명에 주변 안내 복원 · 워커 단계 주석을 실제와 맞춤

haewon 지적: 파이프라인 설명에서 주변 안내(/stay·/en/stay)가 빠져 있었다.
오늘 머지가 떨어뜨렸던 바로 그 페이지인데 설명에 없으니 계속 잊힌다.
§0 프롬프트, §1 표 3행, §3 되는 것 세 곳을 고쳤다.

워커 주석의 단계 목록도 낡아 있었다. 실제 PHASES 는 18단계인데 주석은 15단계였고
planner·heroes·publish 가 빠져 있었다. 주석과 실제가 18개로 맞는 것을 확인했다.
단계마다 무엇을 만드는지 한 줄씩 붙였다. tourism 이 /stay 를 만들고 planner 가
/plan 을 만든다는 것이 이름만으로는 드러나지 않아 오늘 같은 혼동이 났다.

사용법 주석에 --domain 과 --indexable 을 추가했다. 둘 다 다음 세션이 쓸 인자인데
적혀 있지 않았다.

배포본 세 곳의 /stay·/en/stay 가 모두 200 인 것을 확인했다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Haewon Kam 2026-09-14 11:45:59 +09:00
parent d847027bf2
commit 682d426a2a
2 changed files with 14 additions and 5 deletions

View File

@ -6,7 +6,7 @@
## 0. 세션 시작 시 붙여 넣을 프롬프트 ## 0. 세션 시작 시 붙여 넣을 프롬프트
``` ```
INFINITH AI Discovery Product 빌드 세션. 제품은 "병원 URL 하나 → AI 답변 준비도 진단(AEO/GEO v2) → 서포터즈 사이트 자동 빌드(글·영상·뉴스룸·회복 일정 플래너·오시는 길) → 병원 확인·재빌드 → 측정(질문뱅크·감성·GA4·크롤러 로그)" 파이프라인이다. INFINITH AI Discovery Product 빌드 세션. 제품은 "병원 URL 하나 → AI 답변 준비도 진단(AEO/GEO v2) → 서포터즈 사이트 자동 빌드(글·영상·뉴스룸·주변 안내·회복 일정 플래너·오시는 길) → 병원 확인·재빌드 → 측정(질문뱅크·감성·GA4·크롤러 로그)" 파이프라인이다.
코드 위치: 2026-09-12 에 브랜치 3개를 main 으로 합쳤다. 작업은 워크트리 ~/orca/workspaces/INFINITH/Productize-2 (브랜치 main) 에서 한다. 프로덕션은 main → infinith-demo.vercel.app. 코드 위치: 2026-09-12 에 브랜치 3개를 main 으로 합쳤다. 작업은 워크트리 ~/orca/workspaces/INFINITH/Productize-2 (브랜치 main) 에서 한다. 프로덕션은 main → infinith-demo.vercel.app.
메인 체크아웃 ~/Claude/Agentic Marketing/INFINITH 는 브랜치 feature/ai-sentiment-rubric 이고 다른 작업의 미커밋 변경(src/ 등 39줄, docs 폴더 재정리)이 있으니 건드리지 않는다. Supabase CLI 링크는 그쪽에만 있어 DB 조회는 거기서 supabase db query --linked 로 한다. 메인 체크아웃 ~/Claude/Agentic Marketing/INFINITH 는 브랜치 feature/ai-sentiment-rubric 이고 다른 작업의 미커밋 변경(src/ 등 39줄, docs 폴더 재정리)이 있으니 건드리지 않는다. Supabase CLI 링크는 그쪽에만 있어 DB 조회는 거기서 supabase db query --linked 로 한다.
먼저 docs/NEXT_SESSION_2026-09-12_AI_DISCOVERY_PRODUCT.md 를 읽는다(§5-4 도메인·레지스트리, §8 인사이트 포함). 시작 절차: (1) git status 와 .vercel 연결을 확인하고 다른 세션이 열려 있지 않은지 haewon 에게 묻는다 (2) §1 표의 "확인" 칸을 git log·Supabase 로 실제 확인한다 (3) §5 결정 대기의 답을 받는다 (4) §4 순서대로 진행한다. 한 세션은 한 저장소·한 배포 대상만 다룬다. 먼저 docs/NEXT_SESSION_2026-09-12_AI_DISCOVERY_PRODUCT.md 를 읽는다(§5-4 도메인·레지스트리, §8 인사이트 포함). 시작 절차: (1) git status 와 .vercel 연결을 확인하고 다른 세션이 열려 있지 않은지 haewon 에게 묻는다 (2) §1 표의 "확인" 칸을 git log·Supabase 로 실제 확인한다 (3) §5 결정 대기의 답을 받는다 (4) §4 순서대로 진행한다. 한 세션은 한 저장소·한 배포 대상만 다룬다.
@ -36,7 +36,7 @@ INFINITH AI Discovery Product 빌드 세션. 제품은 "병원 URL 하나 → AI
|---|---|---|---|---| |---|---|---|---|---|
| 1 진입 | `/discovery` 랜딩, "URL 입력으로 시작" | `DiscoveryLandingPage.tsx`, `DiscoveryLeadModal` → Supabase `discovery_leads` | 메인, 브랜치 feature/discovery-url-cta | 프리뷰만. **미머지, 마이그레이션 `20260831_discovery_leads.sql` 적용 여부 확인** | | 1 진입 | `/discovery` 랜딩, "URL 입력으로 시작" | `DiscoveryLandingPage.tsx`, `DiscoveryLeadModal` → Supabase `discovery_leads` | 메인, 브랜치 feature/discovery-url-cta | 프리뷰만. **미머지, 마이그레이션 `20260831_discovery_leads.sql` 적용 여부 확인** |
| 2 진단 | `/discovery/:id` 리포트 (AEO 100 + GEO 100, v2 기준표), 덱·PDF | `scripts/audit_aeo_geo.py`(auto 22항목) → `src/data/discovery_<id>.ts` → `DiscoveryReportPage.tsx`; `scripts/build_discovery_report.ts` → HTML/PDF; 덱 빌더 `docs/reports/<clinic>/01_readiness_report/build_*_deck*.py` | 메인 + Productize(v2 기준표 `src/data/aeoGeoRubricV2.ts`, `src/lib/discoveryScoreV2.ts`) | 반자동. 결과가 소스 파일 커밋 방식이라 병원마다 코드 배포가 필요하다. **v2 기준표가 main(프로덕션)에 머지됐는지 확인** | | 2 진단 | `/discovery/:id` 리포트 (AEO 100 + GEO 100, v2 기준표), 덱·PDF | `scripts/audit_aeo_geo.py`(auto 22항목) → `src/data/discovery_<id>.ts` → `DiscoveryReportPage.tsx`; `scripts/build_discovery_report.ts` → HTML/PDF; 덱 빌더 `docs/reports/<clinic>/01_readiness_report/build_*_deck*.py` | 메인 + Productize(v2 기준표 `src/data/aeoGeoRubricV2.ts`, `src/lib/discoveryScoreV2.ts`) | 반자동. 결과가 소스 파일 커밋 방식이라 병원마다 코드 배포가 필요하다. **v2 기준표가 main(프로덕션)에 머지됐는지 확인** |
| 3 서포터즈 사이트 | `supporters-<clinic>.vercel.app` 미리보기(noindex): 글·영상·뉴스룸·방문 안내(지도·길찾기)·회복 일정 플래너 `/plan`·`/en/plan` | 워커 `workers/supporters-build/run.mjs` 15단계(evidence→…→tourism→recovery→planner→…→deploy), 템플릿 `templates/supporters-astro`, 게이트 `scripts/gate/rules.mjs` | Productize | 동작. 뷰(수작업 샘플 `view-supporters-sample`)·원진·오라클 3곳 배포. 병원당 약 $0.6, 30분 | | 3 서포터즈 사이트 | `supporters-<clinic>.vercel.app` 미리보기(noindex): 글·영상·뉴스룸·주변 안내 `/stay`·`/en/stay`·방문 안내(지도·길찾기)·회복 일정 플래너 `/plan`·`/en/plan` | 워커 `workers/supporters-build/run.mjs` 15단계(evidence→…→tourism→recovery→planner→…→deploy), 템플릿 `templates/supporters-astro`, 게이트 `scripts/gate/rules.mjs` | Productize | 동작. 뷰(수작업 샘플 `view-supporters-sample`)·원진·오라클 3곳 배포. 병원당 약 $0.6, 30분 |
| 4 병원 확인 | `/supporters/:id` 또는 리포트 안 `ClinicInputsPanel`: 채널 확인, 의료진, 검토·승인, 자유 답변 | Supabase `supporter_builds`·`supporter_inputs`, `apply_inputs.mjs`, 재빌드 `run.mjs --from data --from-supabase --build-id` | 메인(UI) + Productize(반영) | 동작하되 **재빌드 자동 트리거 없음**(supporter_inputs insert → 큐 연결 필요) | | 4 병원 확인 | `/supporters/:id` 또는 리포트 안 `ClinicInputsPanel`: 채널 확인, 의료진, 검토·승인, 자유 답변 | Supabase `supporter_builds`·`supporter_inputs`, `apply_inputs.mjs`, 재빌드 `run.mjs --from data --from-supabase --build-id` | 메인(UI) + Productize(반영) | 동작하되 **재빌드 자동 트리거 없음**(supporter_inputs insert → 큐 연결 필요) |
| 5 운영 | 큐 → 빌드 → 미리보기 링크 | `poll.mjs` + Mac launchd 5분 폴러, `supporter_builds` 큐 | Productize | 파일럿 수준. Mac 이 켜져 있어야 돈다. 실제 랜딩 신청 1건이 큐 → 완주까지 간 적 없음 | | 5 운영 | 큐 → 빌드 → 미리보기 링크 | `poll.mjs` + Mac launchd 5분 폴러, `supporter_builds` 큐 | Productize | 파일럿 수준. Mac 이 켜져 있어야 돈다. 실제 랜딩 신청 1건이 큐 → 완주까지 간 적 없음 |
| 6 측정 | 질문뱅크 언급률(2엔진), 감성, GA4 AI 유입, AI 크롤러 히트, 공식 vs 서포터즈 재채점 | `scripts/run_question_bank_openai.py`·`merge_qb_results.py`·`sentiment_qb.py`·`ga4_ai_traffic.py`, `data/ai_channels.json`, 리포트 Integrity 절 "측정 가능 범위" | 메인(QB·감성) + Productize(GA4) | 스크립트 단위. 리포트 카드 자동 갱신 없음. GA4 는 GCP 계정 대기 | | 6 측정 | 질문뱅크 언급률(2엔진), 감성, GA4 AI 유입, AI 크롤러 히트, 공식 vs 서포터즈 재채점 | `scripts/run_question_bank_openai.py`·`merge_qb_results.py`·`sentiment_qb.py`·`ga4_ai_traffic.py`, `data/ai_channels.json`, 리포트 Integrity 절 "측정 가능 범위" | 메인(QB·감성) + Productize(GA4) | 스크립트 단위. 리포트 카드 자동 갱신 없음. GA4 는 GCP 계정 대기 |
@ -64,7 +64,7 @@ INFINITH AI Discovery Product 빌드 세션. 제품은 "병원 URL 하나 → AI
되는 것 되는 것
- 병원 이름·URL 로 채널 발견·근거 수집·자동 채점·리포트 HTML/PDF·덱(뷰·원진·오라클·태하 사례). - 병원 이름·URL 로 채널 발견·근거 수집·자동 채점·리포트 HTML/PDF·덱(뷰·원진·오라클·태하 사례).
- 워커 한 번으로 서포터즈 사이트 초안 발행(글 6~8편, 영상, 뉴스룸, 이미지 규칙, 지도, 플래너, 관광공사 데이터). 게이트 41건 테스트. - 워커 한 번으로 서포터즈 사이트 초안 발행(글 6~8편, 영상, 뉴스룸, 주변 안내, 이미지 규칙, 지도, 플래너, 관광공사 데이터). 게이트 41건 테스트.
- 병원 확인 패널 입력 → 수동 재빌드. - 병원 확인 패널 입력 → 수동 재빌드.
- 질문뱅크 120문항 2엔진 실측, 감성 판정, Before/After 페이지(`scripts/build_before_after.py`). - 질문뱅크 120문항 2엔진 실측, 감성 판정, Before/After 페이지(`scripts/build_before_after.py`).

View File

@ -3,9 +3,18 @@
// //
// node workers/supporters-build/run.mjs --clinic <id> --url <https://...> [--name 상호] [--work ~/supporters-builds/<id>] // node workers/supporters-build/run.mjs --clinic <id> --url <https://...> [--name 상호] [--work ~/supporters-builds/<id>]
// [--inputs inputs.json | --from-supabase] [--brief briefs.json] [--max-posts 6] [--max-cost-usd 3] // [--inputs inputs.json | --from-supabase] [--brief briefs.json] [--max-posts 6] [--max-cost-usd 3]
// [--deploy] [--build-id <supporter_builds.id>] [--from <phase>] [--skip-generate] [--news-board <URL> | --no-news] [--no-tourism] [--no-recovery] // [--deploy] [--domain <주소>] [--indexable] [--build-id <supporter_builds.id>] [--from <phase>] [--skip-generate]
// [--news-board <URL> | --no-news] [--no-tourism] [--no-recovery] [--regenerate]
// --domain 정식 주소를 Vercel 프로젝트에 붙인다 (예: viewpl.webforai.kr). 서브도메인은 clinic_registry 에서 읽는다
// --indexable 색인 허용 빌드. 법무 3건이 끝나기 전에는 붙이지 않는다
// //
// 단계: evidence → ocr → data → discover → youtube → news → images → tourism → recovery → inputs → briefs → generate → build → deploy → done // 단계: evidence → ocr → data → discover → youtube → news → images → tourism → recovery → planner
// → inputs → briefs → generate → heroes → build → deploy → publish → done
// tourism 주변 안내 /stay · /en/stay (관광공사 TourAPI 장소·축제·동선). 회복 일정 /plan 과 별개 페이지다
// recovery 시술 후 관리 안내 (병원 시술 페이지 원문 인용·번역)
// planner 회복 일정 플래너 /plan · /en/plan 데이터
// heroes 글 대표 이미지 배정 (글마다 다른 사진)
// publish 발행(색인) 작업과 사람 체크리스트. 색인 허용 빌드가 아니면 알리지 않는다
// 단계마다 <work>/status.json 을 쓰고, --build-id 와 SUPABASE_SERVICE_ROLE_KEY 가 있으면 supporter_builds 행을 갱신한다. // 단계마다 <work>/status.json 을 쓰고, --build-id 와 SUPABASE_SERVICE_ROLE_KEY 가 있으면 supporter_builds 행을 갱신한다.
// 게이트(check.mjs)가 error 를 내면 status=gate_failed 로 멈춘다. 사람 게이트(검토·승인)는 여기서 자동화하지 않는다. // 게이트(check.mjs)가 error 를 내면 status=gate_failed 로 멈춘다. 사람 게이트(검토·승인)는 여기서 자동화하지 않는다.
import { spawnSync } from 'node:child_process'; import { spawnSync } from 'node:child_process';