docs: update Sprint 0 Vision — multi-page screenshots + channel evidence in report

WP-V1: 6+ page screenshots (main, doctors, surgery, YouTube landing,
  Instagram profile, 강남언니) stored in Supabase Storage
WP-V2: Gemini Vision analysis per screenshot (OCR + structured extraction)
WP-V3: Screenshots as evidence in report (connected to existing
  EvidenceGallery/Lightbox system)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
claude/bold-hawking
Haewon Kam 2026-04-04 23:55:40 +09:00
parent 3f1a25e298
commit 494dc186c5
1 changed files with 35 additions and 22 deletions

View File

@ -26,33 +26,46 @@
성형외과 홈페이지의 핵심 정보가 이미지로 제공됨 (배너, 의료진 사진, 인증 마크 등). 성형외과 홈페이지의 핵심 정보가 이미지로 제공됨 (배너, 의료진 사진, 인증 마크 등).
Firecrawl screenshot + Gemini Vision으로 이미지 속 정보를 추출. Firecrawl screenshot + Gemini Vision으로 이미지 속 정보를 추출.
- [ ] **WP-V1**. Firecrawl screenshot 캡처 (30min) - [ ] **WP-V1**. 멀티페이지 스크린샷 캡처 + 저장 (45min)
- 파일: `discover-channels/index.ts` Stage A에 추가 - 파일: `collect-channel-data/index.ts`에 추가 (Phase 2 — 검증된 URL들이 있는 시점)
- 변경: `formats: ["json", "links", "screenshot"]` — 메인 페이지 스크린샷 캡처 - 캡처 대상 (6+ 페이지):
- 추가: 의료진 페이지, 시술 안내 페이지도 스크린샷 (siteMap에서 URL 추출) 1. **병원 메인 페이지** — 배너, 소셜 아이콘, 카카오톡 버튼
- DB: `scrape_data.screenshots[]`에 base64 이미지 저장 2. **의료진 페이지** — siteMap에서 `/doctor`, `/team`, `/staff` URL 자동 탐지
3. **시술 안내 페이지** — `/surgery`, `/service`, `/procedure` 탐지
4. **YouTube 채널 랜딩**`youtube.com/@{handle}` (구독자 수, 고정 영상)
5. **Instagram 프로필**`instagram.com/{handle}` (팔로워 수, 피드 미리보기)
6. **강남언니 페이지** — verified URL (평점, 리뷰 수, 의료진)
- API: Firecrawl `formats: ["screenshot"]` + `screenshotOptions: { fullPage: false, quality: 80, viewport: { width: 1280, height: 800 } }`
- 저장: Supabase Storage `screenshots/{reportId}/{channel}.png` → signed URL
- DB: `channel_data.screenshots[]``ScreenshotEvidence` 형태로 저장
- 프론트엔드: 이미 구현된 `ScreenshotProvider``EvidenceGallery``EvidenceLightbox` 에 바로 연결
- [ ] **WP-V2**. Gemini Vision 분석 (1h) - [ ] **WP-V2**. Gemini Vision 분석 (1h)
- 파일: 새 `_shared/visionAnalysis.ts` - 파일: 새 `_shared/visionAnalysis.ts`
- API: Google Gemini `gemini-2.0-flash-exp` (Vision 모델) - API: Google Gemini `gemini-2.0-flash` (GEMINI_API_KEY 이미 .env에 있음)
- 프롬프트: 스크린샷에서 다음 정보 추출: - 각 스크린샷별 분석 프롬프트:
- 개원 연도 / 운영 기간 ("SINCE 2004", "21년 무사고" 등) - **메인 페이지**: 개원 연도, 소셜 아이콘, 카카오톡 버튼, 브랜드 컬러, 슬로건, 인증 마크
- 의료진 이름 + 전문 분야 (프로필 사진 옆 텍스트) - **의료진 페이지**: 의사 이름 + 전문 분야 + 약력 (이미지 내 텍스트 OCR)
- 인증/수상 마크 (JCI, 보건복지부, 의료관광 인증 등) - **시술 페이지**: 시술 카테고리, 가격 정보, 전후 사진 유무
- 시술 카테고리 (메뉴 구조에서 추출) - **YouTube 랜딩**: 구독자 수, 영상 수, 최근 업로드 제목, 고정 영상
- 소셜 미디어 아이콘 위치 + URL (이미지 기반 버튼 포함) - **Instagram 프로필**: 팔로워 수, 게시물 수, 최근 피드 미리보기, 바이오
- 카카오톡/라인 플로팅 버튼 유무 - **강남언니**: 평점(/10), 리뷰 수, 의료진 수, 시술 종류
- 브랜드 컬러 + 로고 디자인 요소 - 응답: 페이지별 JSON → `channel_data.visionAnalysis`에 저장
- 응답: JSON 구조로 반환
- [ ] **WP-V3**. Vision 데이터 파이프라인 통합 (30min) - [ ] **WP-V3**. Vision 데이터 → 리포트 + 증거 통합 (45min)
- 파일: `discover-channels/index.ts`, `collect-channel-data/index.ts` - 파일: `generate-report/index.ts`, `transformReport.ts`
- 변경: - 변경:
- Vision에서 발견한 소셜 핸들 → 채널 발견에 추가 (Source 4) - 스크린샷 → `report.screenshots[]` (ScreenshotEvidence 형태)
- Vision에서 추출한 의료진 정보 → channel_data에 추가 - 프론트엔드의 기존 EvidenceGallery/Lightbox에 바로 표시
- Vision에서 확인한 개원 연도 → clinic 정보에 반영 - Vision 추출 의료진 → `clinicSnapshot.doctors` 보강 (이미지에서 읽은 정보)
- 스크린샷 원본 → DB에 저장 (리포트에서 증거로 활용) - Vision 추출 개원 연도 → `clinicSnapshot.established` 보강
- 검증: 그랜드성형외과 분석 → "SINCE 2004" 개원 연도 추출 확인 - Vision 추출 YouTube/Instagram 수치 → KPI에 cross-reference
- 각 채널 진단 항목에 `evidenceIds` 연결 → 해당 채널 스크린샷이 증거로 표시
- 검증:
- 그랜드성형외과 분석 → "SINCE 2004" 개원 연도 추출 확인
- YouTube 분석 섹션 → 채널 랜딩 스크린샷 썸네일 표시 확인
- Instagram 분석 섹션 → 프로필 스크린샷 표시 확인
- 스크린샷 클릭 → 라이트박스 모달에서 풀사이즈 보기 확인
### Vision Analysis 프롬프트 설계 ### Vision Analysis 프롬프트 설계