- 영문 사이트(jkplastic.com/en) 기준 v1.0 45/C, AEO 40/D, GEO 27/D
- audit_aeo_geo.py 자동 채점(21항목) + 영문 페이지 11개 원본 실측 보정
- 자동 채점의 국문 전제 정규식이 놓친 B4(NAP)·C4(수치)·F1(alt) 보정
- 외부 실측 가능한 C1·C4·C7·C8·D1·D3 확정, 오너 계정 필요한
A6·D2·D4·E1~E4는 미검증으로 분모 제외
- discoveryResults.ts 레지스트리에 jkplastic 등록
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
붙일 자리를 잘못 잡았다. /discovery 는 INFINITH 제품의 진단 화면이고 병원마다 쓰는
범용 도구다. 외국인 환자가 보는 페이지는 병원 서포터즈 사이트다. 그쪽으로 옮겼다.
옮긴 것
- src/components/discovery/MedicalTourismPanel.tsx, src/types/medicalTourism.ts,
src/data/medicalTourism.json 삭제. DiscoveryReportPage 원복.
- supporters/src/pages/en/stay.astro 신설. 독립 URL 과 자체 WebPage JSON-LD 를 가져
AI 인용 단위가 된다. sitemap 에 등록하고 /visit 에서 hreflang 링크로 잇는다.
- 수집 스크립트 출력을 supporters/src/data/medicalTourism.json 으로 바꿨다.
영문 페이지 지원
- Base.astro 에 lang prop 추가(기본 ko). html lang · og:locale · 머리말 · 꼬리말이
따라 바뀐다. 레이아웃을 하나로 유지해 한국어 페이지 동작은 그대로다.
- 의료광고 고지(지원 관계·부작용)는 규정 대상이라 임의로 번역하지 않는다. 병원이
sponsorNoticeEn / sideEffectNoticeEn 을 확정하기 전에는 한국어 원문을 그대로 싣고
영문 문구가 확인 대기임을 밝힌다.
- factSheet 에 nameEn / shortNameEn / shortNameEnSource 추가. 뷰성형외과 값의 근거는
병원 자신의 영문 도메인 viewplasticsurgery.com 이며 한국관광공사 등재명도 같다.
페이지가 만들지 않는 것
- 평점·리뷰·영업시간: TourAPI 미제공이라 싣지 않는다.
- 식당의 회복 적합성: 의학 판단이라 병원이 확정한 영문 문구(site.json dietGuideEn)만
싣는다. 확인 전에는 어떤 식당도 적합으로 표시하지 않는다고 페이지에 적는다.
- 회복 단계 일수: 병원 확정값(recoveryStagesEn). 단계는 이동 거리로만 정의한다.
- 하단에 이 페이지가 답하지 못하는 것 네 가지를 그대로 적었다.
템플릿 동기화
- templates/supporters-astro 에 같은 변경을 넣되 데이터는 빈 스캐폴드로 둔다.
뷰성형외과 factSheet 와 관광 데이터가 새 병원 빌드에 새어 들어가면 안 된다.
빈 데이터로 빌드해 6개 범주가 "No English listings" 로 나오는 것까지 확인했다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
/discovery/:id 에 외국인 환자용 주변 정보를 붙였다. 숙박·음식점·웰니스·관광·문화·
쇼핑·축제 125건과 이동 반경 기준 회복 동선. 다음 뷰성형외과 미팅용 프로토타입이다.
데이터 (scripts/fetch_medical_tourism.py → src/data/medicalTourism.json)
한국관광공사 TourAPI 영문(EngService2) 사전 수집. 실시간 호출이 아닌 이유는 영문
커버리지가 얇아 필터링이 많이 필요하고, 시연 중 외부 API 상태에 화면이 종속되지
않게 하기 위해서다. 좌표는 Naver 지역검색 실측(뷰성형외과의원, 봉은사로 107).
실측으로 드러난 것과 대응
- 영문 관광지(76)의 대부분이 관광지가 아니다. 반경 5km 100건 중 92건이 분류코드
A02020500 "Medical Tourism Sites"(categoryCode2 로 확인)이며 병원과 유치
에이전시다. 제목 키워드로는 "하이안과", "닥파인더코리아" 를 놓쳐 코드로 걸렀다.
거리순 상위 100건이 거의 다 여기라 페이징을 넣어야 실제 관광지가 나온다.
- 스파·찜질방(A02020300/400)은 회복 여정에 맞아 wellness 로 분리했다.
- 영문 축제는 areacode 필드가 비어 있어 areaCode 필터가 0건을 반환한다. 좌표
거리로 걸렀다.
- TourAPI 이미지 URL 이 http 라 https 사이트에서 혼합 콘텐츠로 차단된다. 수집
단계에서 https 로 올린다.
- 반경을 목적별로 나눴다. 회복기에 자주 가는 숙박·식사는 5km, 관광은 10km.
만들지 않은 것
- 평점·리뷰·영업시간: TourAPI 미제공이라 null 로 두고 화면에 "미연동" 으로 적었다.
Google Places 키가 아직 비어 있다(신청 중).
- 수술 전후 식이 적합성: 의학 판단이라 병원 입력만 쓴다. ClinicInputsPanel 에
diet_guide 항목을 더해 supporter_inputs 로 받고, 입력 전에는 "병원 확인 대기"
로 둔다. 개별 식당의 적합 여부를 추론하지 않는다.
- 회복 단계가 며칠째인지: 병원 입력(recovery). 화면의 단계는 이동 반경으로만
정의해 의학적 함의를 담지 않는다.
- 한계 4가지를 meta.limits 에 담아 섹션 하단 "측정 가능 범위" 에 그대로 띄운다.
FilledIcons 에 Bed·Fork·Spa·MapPin·Ticket·Bag·Theater 7종 추가(라인 아이콘·이모지
금지 규칙에 따라 채움 SVG).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
블러 처리 없이 외부 노출 가능한 가상 클리닉 데모 자산.
6개 실제 병원 분석 패턴의 베스트 프랙티스를 종합·재구성.
설정:
- 이름: O2O Clinic / 원장 오투오 / 개원 2017년 (9년차)
- 시술: 눈·코·윤곽 전문
- 컬러: Indigo Deep (#1E1B4B) + Cyan (#06B6D4)
- 포지셔닝: 균형 잡힌 운영 (Score 78) + 글로벌 확장 강점
라우팅:
- /report/o2o → mockReportO2O (overallScore 78)
- /plan/o2o → mockPlanO2O (8 채널전략·4 pillar·4주 캘린더)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
원진성형외과 공식 홈페이지(k-wonjin.co.kr) 의 '25년 헤리티지'
표기에 맞춰 모든 35년/1991년 표기를 25년/2001년으로 수정.
- mockReport_wonjin.ts: established 1991→2001, yearsInBusiness 35→25,
transformation 포지셔닝 카피
- mockPlan_wonjin.ts: 폰트 sample text, toneOfVoice 예시, 5개 채널
bioTemplate, content pillar, calendar 타이틀, workflow video script
등 30+ 곳
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
원진성형외과 공식 홈페이지가 k-wonjin.co.kr 인데,
mockReport·mockPlan 의 다수 위치에 잘못된 wonjin.com 이
들어가 링크가 깨져있던 문제 수정.
- mockReport_wonjin.ts: domain, channelScores, linkedUrls,
profileLink, FB link/linkedDomain, 카카오톡 url, primaryDomain,
additionalDomains, screenshots caption/sourceUrl 모두 정정
- mockPlan_wonjin.ts: targetUrl, channelBranding bioTemplate 5개
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
각 mockPlan_{clinic}.ts에서 ...mockPlan (뷰성형외과) 스프레드를 완전 제거하고,
각 병원의 mockReport_{clinic}.ts 실측 데이터를 근거로 전 섹션 재구성:
- mockPlan_banobagi: 26년·6,853 리뷰·Black+Gold, 8개 채널전략
- mockPlan_grand: 이세환 원장·안면거상 전문·Navy Blue, 6개 채널전략
- mockPlan_wonjin: 35년·코성형·글로벌 3계정·Deep Purple, 6개 채널전략
- mockPlan_ts: 리얼모델·12,509 리뷰·Dark Navy+Crimson, 7개 채널전략
- mockPlan_irum: 다국어 KR/TH/JP·LINE 신규·Forest Green, 8개 채널전략
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- otherChannels 모든 URL에 https:// prefix 추가 (카카오톡, 네이버 블로그/플레이스, 강남언니, 네이버 카페, Threads, Facebook TH)
- 강남언니 URL https://www.gangnamunni.com/hospitals/189 로 수정
- 닥터나우 URL https://www.doctornow.co.kr 추가
- Playwright로 7개 채널 실제 스크린샷 캡처 (YouTube, Instagram KR/EN, Facebook KR, 강남언니, 웹사이트, 네이버 블로그)
- screenshots 배열 SVG placeholder → 실제 PNG 파일 경로로 업데이트
- capturedAt 날짜 2026-04-13으로 업데이트
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- websiteAudit: snsLinksOnSite false→true, Footer SNS 5개 링크 상세 추가
(Blog, Facebook, Instagram, YouTube, Naver Cafe)
- Website 점수 52→65 상향, tracking 6개로 보강
- 네이버 카페 "뷰성형외과 성형의 모든것" 회원 5,984명 otherChannels 추가
- mockPlan: Naver Cafe 채널 전략 추가 (20개 게시판 구조 기반)
- WebsiteAudit 타입에 snsLinksDetail 옵셔널 필드 추가
- problemDiagnosis SNS 단절 진단 수정 (Footer 있으나 Header에는 없음)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 9개 채널 실제 데이터 수집 (Firecrawl + Chrome MCP)
- mockReport.ts: 강남언니 9.5점/19,030리뷰 (TODO 해결), 채널 점수 갱신,
Instagram 70K/14K 실제 수치, Facebook TH 페이지 발견, Naver Blog 활성화
- mockPlan.ts: Naver Blog 미확인→활성 550개, YouTube 104K 반영
- useReport: id='view-clinic' demo fallback 추가
- useMarketingPlan: id='view-clinic' demo fallback 추가
- Viewclinic Plan.md: 수집 데이터 전체 기록
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- ContentCalendar: 드래그앤드롭(주차 내 요일 간 이동) + 엔트리 추가 버튼 + iCal Export
- BrandingGuide: 색상 팔레트 인라인 편집(스와치 클릭 → hex 팝오버) + DO/DON'T 2컬럼
- WorkflowTracker: 콘텐츠 제작 파이프라인(기획→AI초안→검토→승인→배포), 동영상/이미지+텍스트 분류
- RepurposingProposal: YouTube 인기 영상 리퍼포징 제안 아코디언 섹션
- AssetDetailModal: 에셋 카드 클릭 시 상세 모달
- 디자인 시스템 감사: Lucide 라인 아이콘 제거, 원색(pink/indigo/purple) 제거, 이모지 UI 제거
- "My Assets" → "나의 소재" 일관성 변경
- FilledIcons: DownloadFilled, RocketFilled 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Each analysis run now creates a dedicated folder in Supabase Storage:
clinics/{domain}/{reportId}/
├── scrape_data.json (discover-channels: website scrape + Perplexity)
├── channel_data.json (collect-channel-data: all channel API results)
└── report.json (generate-report: final AI-generated report)
Screenshots also moved from {reportId}/{id}.png to:
clinics/{domain}/{reportId}/screenshots/{id}.png
Migration: 20260407_clinic_data_storage.sql creates 'clinic-data' bucket
(private, 10MB/file, JSON only). All writes are non-fatal — pipeline
continues even if Storage upload fails.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>