diff --git a/Viewclinic Plan.md b/Viewclinic Plan.md new file mode 100644 index 0000000..cd4d562 --- /dev/null +++ b/Viewclinic Plan.md @@ -0,0 +1,352 @@ +# 뷰성형외과 세일즈 프로토타입 — 실제 데이터 수집 & 하드코딩 계획 + +## Context +INFINITH의 자동 크롤링 파이프라인이 안정적으로 작동하지 않아, 세일즈 데모용으로 **뷰성형외과의 실제 데이터를 수동 수집**하여 `mockReport.ts`와 `mockPlan.ts`에 하드코딩합니다. + +## 사용 가능한 도구 (9개) +| # | 도구 | 용도 | +|---|------|------| +| 1 | **YouTube Data API v3** | YouTube 구독자/조회수/영상 정보 | +| 2 | **Apify - instagram-profile-scraper** | Instagram 프로필 (팔로워, 바이오, 최근 12개 포스트) | +| 3 | **Apify - instagram-post-scraper** | Instagram 포스트 상세 (좋아요, 댓글, 해시태그) | +| 4 | **Apify - instagram-reel-scraper** | Instagram 릴스 (조회수, 재생수, 음악 정보) | +| 5 | **Apify - facebook-pages-scraper** | Facebook 페이지 (팔로워, 좋아요, 카테고리, 평점) | +| 6 | **Firecrawl** | 웹사이트/강남언니/Naver 스크래핑 | +| 7 | **Ahrefs API** | SEO (Domain Rating, 오가닉 키워드, 백링크) | +| 8 | **Naver Search API** | 네이버 검색 (블로그, 플레이스) | +| 9 | **Claude in Chrome** | 직접 브라우저 접근 (API 실패 시 fallback + 스크린샷) | + +## 뷰성형외과 채널 목록 +| 채널 | URL | 수집 도구 | 상태 | +|------|-----|----------|------| +| Website | https://www.viewclinic.com | Firecrawl + Ahrefs | ✅ 수집완료 | +| YouTube | https://www.youtube.com/@ViewclinicKR | Firecrawl (YouTube API fallback) | ✅ 수집완료 | +| Instagram KR | https://www.instagram.com/viewplastic/ | **Apify** (profile+post+reel) | ⬜ 미수집 | +| Instagram EN | https://www.instagram.com/view_plastic_surgery/ | **Apify** (profile) | ⬜ 미수집 | +| Facebook KR | https://www.facebook.com/viewps1/ | **Apify** (pages-scraper) | ⬜ 미수집 | +| Facebook EN | (URL 확인 필요) | **Apify** (pages-scraper) | ⬜ 미수집 | +| 강남언니 | https://www.gangnamunni.com/hospitals/189 | Firecrawl + Chrome | ✅ 수집완료 | +| Naver Blog | https://blog.naver.com/viewclinicps | Firecrawl + Naver API | ✅ 수집완료 | +| Naver Place | https://m.place.naver.com/hospital/11709005 | Firecrawl + Chrome | ✅ 수집완료 | + +--- + +## Phase 1: 데이터 수집 체크리스트 + +### WS1. YouTube (@ViewclinicKR) — Firecrawl +- [ ] 구독자 수, 총 영상 수, 총 조회수 +- [ ] 최근 10개 영상: 제목, 조회수, 업로드일 +- [ ] 인기 영상 Top 8: 제목, 조회수 +- [ ] Shorts 탭 성과 +- [ ] 채널 설명, 연결된 URL +- [ ] 업로드 빈도 (최근 30일) + +### WS2. Instagram — **Apify** (3개 Actor) +**KR @viewplastic:** +- [ ] **Apify profile-scraper**: 팔로워/팔로잉/게시물 수, 바이오, 비즈니스 계정 여부, 외부 링크 +- [ ] **Apify post-scraper**: 최근 20개 포스트 (좋아요, 댓글, 해시태그, 캡션, 타입) +- [ ] **Apify reel-scraper**: 최근 15개 릴스 (조회수, 재생수, 지속시간, 음악) +- [ ] 평균 좋아요/댓글 계산, 참여율 산출 + +**EN @view_plastic_surgery:** +- [ ] **Apify profile-scraper**: 존재 확인 + 팔로워/게시물/바이오 +- [ ] Chrome fallback: Apify 실패 시 직접 접근 + +### WS3. Facebook — **Apify** (pages-scraper) +**KR facebook.com/viewps1:** +- [ ] **Apify pages-scraper**: 페이지명, 팔로워, 좋아요, 카테고리, 이메일, 전화, 웹사이트, 평점, 프로필사진 URL +- [ ] 최근 포스팅 빈도 확인 + +**EN 페이지:** +- [ ] URL 확인 (facebook.com/viewclinic 또는 viewplasticsurgery) +- [ ] **Apify pages-scraper**: 동일 데이터 수집 +- [ ] Chrome fallback: URL 탐색 + +### WS4. Website + SEO — Ahrefs + Firecrawl +- [ ] Ahrefs Domain Rating +- [ ] Ahrefs organic keywords + traffic (KR) +- [ ] Ahrefs 백링크/참조도메인 수 +- [ ] Ahrefs 상위 오가닉 키워드 20개 +- [ ] Ahrefs 경쟁사 상위 3곳 +- [ ] Firecrawl: 홈페이지 tracking pixel, SNS 링크, 메타태그 + +### WS5. 강남언니 — Firecrawl + Chrome +- [ ] 병원 평점 (TODO 해결) +- [ ] 총 리뷰 수 +- [ ] 대표원장 평점 (TODO 해결) +- [ ] 의료진 수, 시술 목록, 가격 범위 +- [ ] 인증 배지 목록 + +### WS6. Naver — Firecrawl + Naver API +- [ ] Blog: 활성 여부, 총 게시글 수, 최근 포스트 5개 +- [ ] Place: 평점, 리뷰 수, 영업시간 + +### WS7. 스크린샷 — Claude in Chrome +- [ ] 각 채널 메인 페이지 스크린샷 (브랜드 일관성 검증용) + +--- + +## Phase 2: 분석 & 점수 산정 + +- [ ] 채널 점수 6개 재계산 (실제 데이터 기반) +- [ ] 진단(Diagnosis) 재작성 +- [ ] Overall Score 재계산 +- [ ] KPI 기준선 검증 + +--- + +## Phase 3: 데이터 조립 + +### mockReport.ts 업데이트 +- [ ] clinicSnapshot: TODO 2건 해결, URL 수정 +- [ ] channelScores: 6개 채널 점수/headline 갱신 +- [ ] youtubeAudit: 실제 데이터로 교체 +- [ ] instagramAudit: 실제 데이터로 교체 +- [ ] facebookAudit: 실제 데이터로 교체 +- [ ] otherChannels: Naver Blog/Place 실제 상태로 변경 +- [ ] websiteAudit: Ahrefs 데이터 + tracking 검증 +- [ ] problemDiagnosis: 실제 데이터 기반 재작성 +- [ ] roadmap: 현실적 3개월 로드맵 +- [ ] kpiDashboard: current 값 실제 데이터로 교체 +- [ ] transformation: 경쟁사 데이터 반영 + +### mockPlan.ts 업데이트 +- [ ] channelStrategies Naver Blog 상태 갱신 +- [ ] assetCollection 블로그 포스트 수량 갱신 +- [ ] brandInconsistencies 실제 확인 결과 반영 + +--- + +## Phase 4: 검증 + +- [ ] TypeScript 컴파일 (npm run lint) +- [ ] /report/view-clinic 전체 렌더링 확인 +- [ ] /plan/view-clinic 전체 렌더링 확인 +- [ ] 데이터 정합성 교차 검증 +- [ ] TODO/미확인 잔존 검사 + +--- + +## 수집된 데이터 기록 + +### YouTube 데이터 (2026-04-13 수집) +``` +채널명: 뷰성형외과 VIEW Plastic Surgery +핸들: @ViewclinicKR +채널ID: UCQqqH3Klj2HQSHNNSVug-CQ +구독자: 104K (웹사이트 embed에서 확인) +채널설명: 💜뷰성형외과💜 VIEW가 예술이다! ✨ 19층 규모의 안전스마트 빌딩 +키워드: 뷰성형외과, 성형, K-beauty, 눈성형, 코성형, 안면윤곽, 가슴성형, 지방흡입, 양악, 재수술 +프로필이미지: https://yt3.googleusercontent.com/NPq6T2Vle_eq47mux1V46erujP8hG5Jz1qC5YwUKvRtJETdx_PQdtLSwT9fMk4gzpp92CjdX=s900-c-k-c0x00ffffff-no-rj + +플레이리스트: +- VIEW 💜 무엇이든 물어보세요 +- VIEW 💜 재수술 +- VIEW 💜 가슴 +- VIEW 💜 눈+코 +- VIEW 💜 윤곽+양악 +- VIEW 💜 지방성형 +- VIEW 💜 피부+안티에이징 +- VIEW랜딩 💜 +- VIEW 💜 방송영상 + +최근 업로드 (2026년 4월 기준, 활발): +- [Dermatology] 시술 자랑 대회 (1.3K views, 3일 전) +- [Thread Lift] 실리프팅 부작용 (554 views, 8일 전) +- [Motiva Global KOL] 4년 연속 선정 (2.3K views, 5일 전) +- [Body Surgery] 볼륨 임플란트 (140 views, 12일 전) +- [Body Surgery] 가슴필러 반대 (1K views, 11일 전) + +인기 영상 Top (Shorts 포함): +- 1트만에 성공하는 성형 #Shorts — 574K views (4년 전) +- 코성형+지방이식 전후 #Shorts — 532K views (4년 전) +- 쌍수+뒤밑트임 #Shorts — 392K views (4년 전) +- □→V라인 변신 #shorts — 194K views (4년 전) +- K-미녀 클라스 #shorts — 161K views (4년 전) +- 앞트임 대박 #Shorts — 159K views (2년 전) + +콘텐츠 패턴: 주 2-3회 업로드, 최근 영어 자막/제목 병행, Shorts 적극 활용 +``` + +### Instagram 데이터 (2026-04-13 Chrome MCP 수집) +``` +=== Instagram KR (@viewplastic) === +핸들: @viewplastic +이름: 뷰 성형외과 | 가슴성형 • 안면윤곽 • 눈성형 • 코성형 • 리프팅 +게시물: 1,420개 +팔로워: 14K (14,000) +팔로잉: 3,822 +카테고리: Health/beauty +바이오: 💞신논현역 3번 출구 | 카톡 '뷰성형외과의원' | 02-539-1177 +주소: 서울시 강남구 봉은사로107, 뷰성형외과병원 (논현동 201-16), Seoul, Korea +링크: litt.ly/viewplasticsurgery +Threads: @viewplastic +프로필사진: 모델 사진 (공식 깃털 로고 아님 → 브랜드 불일치!) +하이라이트: ABOUT VIEW, 수술정보, 모델 모집, VIEW EVENT, 진료안내 +Reels: 0개 (탭 비어있음 → CRITICAL) +"Followed by view_plastic_surgery" 표시됨 + +=== Instagram EN (@view_plastic_surgery) === +핸들: @view_plastic_surgery +이름: View Plastic Surgery Korea +게시물: 2,553개 +팔로워: 70K (70,000) ← 기존 mock 68.8K에서 성장 +팔로잉: 2,840 +카테고리: Health/beauty +바이오: VIEW Plastic Surgery Official by 𝐕𝐈𝐄𝐖 𝐏𝐚𝐫𝐭𝐧𝐞𝐫𝐬 🇰🇷 Most Renowned Hospital in Korea +주소: 107 Bongeunsa-ro Gangnam-gu, Seoul, Korea +링크: litt.ly/viewplasticsurgeryenglish +Threads: @view_plastic_surgery +프로필사진: "VIEW" 골드 텍스트 로고 (깃털 심볼 없음 → 브랜드 불일치) +하이라이트: Katerina, Mathilde, Kyle & Spizee, Chef Rush, Thet San, Yuri, Liposuction, Why VIEW?, Diana, Anti Aging, Julie, Male, Stem Cell, Dermatology +Reels: 있음 (탭에 콘텐츠 존재) +"Followed by viewplastic" 표시됨 +콘텐츠: VIEWWEIV Cosmetics 제품 홍보, 외국인 환자 후기 중심 +``` + +### Facebook 데이터 (2026-04-13 Chrome MCP 수집) +``` +=== Facebook KR (viewps1) === +URL: https://www.facebook.com/viewps1/ +페이지명: 뷰성형외과 +팔로워: 253명 (팔로잉 0명) +바이오: 예쁨이 일상이 되는 순간! #뷰성형외과 +카테고리: 성형외과 의사 +프로필사진: 보라색+골드 깃털 로고 (공식 로고 ✅) +배너: 퍼플 배경 + "VIEW가 예술이다!" + 모델 사진 +주소: 강남구 봉은사로 107, 서울 06120 +링크: viewclinic.com +최근 포스트: 4일 전 (활성이나 매우 저조한 팔로워) +영업시간: 영업 중 + +=== Facebook EN (viewclinic) === +URL: https://www.facebook.com/viewclinic +페이지명: View Plastic Surgery +팔로워: 8.8만명 (88,000) ← 기존 mock 88K 정확! +팔로잉: 11명 +바이오: Official Account by 𝐕𝐈𝐄𝐖 𝐏𝐚𝐫𝐭𝐧𝐞𝐫𝐬 +주소: 107 Bongensa-ro, Gangnam-gu, Seoul, Korea +카테고리: 건강/뷰티 +프로필사진: "VIEW" 골드 텍스트 로고 (깃털 심볼 없음 → 브랜드 불일치) +링크: viewplasticsurgery.com +WhatsApp: 연동됨 +리뷰: 3개 +최근 포스트: 2일 전 (활발 — Katerina님 환자 후기 영상) +영업시간: 24시간 영업 + +=== Facebook TH (viewplasticsurgery) — 신규 발견 === +URL: https://www.facebook.com/viewplasticsurgery +페이지명: View Plastic Surgery x makeawishdiary โรงพยาบาลศัลยกรรมเกาหลี +팔로워: 1.4만명 (14,000) +팔로잉: 0명 +바이오: let me in thailand (태국 시장 파트너 페이지) +카테고리: 성형외과 의사 +프로필사진: 보라색+골드 깃털 로고 (공식 로고 ✅) +리뷰: 2개 +마지막 포스트: 2024년 7월 28일 (약 9개월 방치) +``` + +### Ahrefs/SEO 데이터 +``` +(Ahrefs API deferred tool — 추후 호출 필요) +현재 Website Firecrawl 데이터로 대체: +- Google site verification: ✅ +- Naver site verification: ✅ +- Facebook domain verification: ✅ +- WordPress 5.5.3 + WPBakery +- 키워드: 가슴성형, 가슴수술, 안면윤곽수술, 눈매교정, 코성형 등 +``` + +### 강남언니 데이터 (2026-04-13 수집) +``` +병원명: 뷰성형외과의원 +등급: 고객평가우수병원 +평점: 9.5/10 (기존 mock 4.8/5점 → 강남언니는 10점 만점 스케일) +후기수: 19,030개 (기존 mock 18,840 → 업데이트 필요) +주소: 서울 강남구 봉은사로 107 (논현동) +위치: 신논현역 3번 출구 68m + +의료진 (25명): +- 최순우 대표원장 (성형외과) — 9.4점, 후기 1,805개 → 가슴성형 +- 윤창운 원장 (성형외과) — 9.6점, 후기 773개 → 안면윤곽/양악 +- 김정민 원장 (성형외과) — 9.7점, 후기 884개 → 리프팅/눈성형 +- 김도형 원장 (성형외과) — 9.7점, 후기 192개 → 지방성형 + +인증 배지 (10개): +수술실 CCTV, 마취과 전문의 상주, 분야별 공동 진료, 의료진 실명 공개, +야간진료, 여성 의사 진료, 응급 대응 체계, 시술 후 관리, 입원 시설, 전용 휴식 공간 + +진료항목: 눈성형, 코성형, 안면윤곽/양악, 가슴성형, 지방성형, 필러, 보톡스, 피부리프팅, 기타 + +진료시간: +- 월~목: 10:00-19:00 +- 금: 10:00-21:00 +- 토: 10:00-17:00 +- 일/공휴일: 휴진 + +이벤트 가격 (51건): +- 가슴성형 가슴보형물: 2,650,000원 (9.6점, 870리뷰) +- 눈성형 자연유착 매몰: 440,000원 (9.6점, 617리뷰) +- 코성형 콧대코끝: 990,000원 (9.6점, 435리뷰) +- 모티바 가슴성형: 11,550,000원 (9.4점, 177리뷰) +``` + +### Naver Blog 데이터 (2026-04-13 수집) +``` +블로그명: 뷰성형외과 공식블로그 +URL: https://blog.naver.com/viewclinicps +상태: ✅ 활성 (기존 mockReport "unknown" → "active"로 변경) +총 게시글: 550개 +OG description: "성형 고민은 뷰성형외과 ෆ" + +최근 포스트 (상위 5개): +1. 살빼도 이중턱 안없어진다면? 갈테야테야 투턱 없애러 갈테야 (2026.4.8) +2. 피부 리셋 I 환절기 저격 스킨부스터 '리투오' (2026.3.25) +3. 무시했다 나중에 큰코 다치는 가슴성형 전후 '유방검진' (2026.3.11) +4. 혹시 나도? 이마로 눈뜨는지 확인하는 초간단 확인법! (2026.2.24) +5. 이런게 있었어? 갑자기 확 늙어보인다면 '중안면 수직 리프팅' (2026.2.4) + +포스팅 빈도: 월 2-3회 (꾸준하나 빈도 낮음) +카테고리: VIEW 성형외과 (메인) +``` + +### Naver Place 데이터 (2026-04-13 수집) +``` +이름: 뷰성형외과의원 +카테고리: 성형외과 +별점: 4.41/5 +방문자 리뷰: 777개 +블로그 리뷰: 1,480개 +주소: 서울 강남구 봉은사로 107 1, 3-5, 7, 8층 +교통: 9호선/신분당선 신논현역 3번 출구 68m +전화: 0507-1420-1398 +홈페이지: https://www.viewclinic.com/ +SNS 링크: 인스타그램, 유튜브, 블로그 (네이버 플레이스에서 연결 확인됨) +편의: 주차, 발렛파킹 +예약: 네이버 예약 가능 + +진료과목: 성형외과, 외과, 피부과 +전문의: 성형외과 14명, 외과 1명 +특수장비: 엑스선촬영장치 1, 유방촬영장치 1, 초음파 2, 콘빔CT 1 +``` + +### Website 데이터 (2026-04-13 수집) +``` +URL: https://www.viewclinic.com +타이틀: 안전을 최우선하는 뷰성형외과 +CMS: WordPress 5.5.3 + WPBakery Page Builder +meta description: 가슴보형물사용량1위, 보건복지부장관표창수상, 안면윤곽대상... + +Site Verification: +- Google: A8vo9aOWSvGL5-yFKhbtlHPqJCkH-egNdWVqVd9gKac ✅ +- Naver: a8cb4fab1fdf7277c0892eeddf457b5c939349e8 ✅ +- Facebook domain: lm854gkic9948c6xk2ti76inryqk65 ✅ + +SNS 연결 (홈페이지에서 확인): +- 카카오톡 플러스친구: @뷰성형외과의원 +- YouTube: 임베드 영상 있음 (104K 구독자) +- SNS 직접 링크 버튼: 없음 (footer/header에 소셜 아이콘 미발견) + +주요 CTA: 전화상담(02-539-1177), 온라인상담, 카톡상담, 이벤트 +Tracking: facebook-domain-verification 존재, Google GA 가능성 (verification 존재) +``` diff --git a/src/data/mockPlan.ts b/src/data/mockPlan.ts index da0bcc6..31e7372 100644 --- a/src/data/mockPlan.ts +++ b/src/data/mockPlan.ts @@ -5,7 +5,7 @@ export const mockPlan: MarketingPlan = { reportId: 'view-clinic', clinicName: '뷰성형외과의원', clinicNameEn: 'VIEW Plastic Surgery', - createdAt: '2026-03-22', + createdAt: '2026-04-13', targetUrl: 'https://www.viewclinic.com', // ─── Section 1: Brand Guide ─── @@ -87,7 +87,7 @@ export const mockPlan: MarketingPlan = { channelStrategies: [ { channelId: 'youtube', channelName: 'YouTube', icon: 'youtube', - currentStatus: '103K 구독자, 주 1회 업로드', targetGoal: '200K 구독자, 주 3회 업로드', + currentStatus: '104K 구독자, 주 2~3회 업로드', targetGoal: '200K 구독자, 주 3회 업로드', contentTypes: ['Shorts', 'Long-form', 'Community'], postingFrequency: '주 3회 (롱폼 1 + Shorts 2)', tone: '차분한 전문가 — 원장이 직접 설명하는 교육 콘텐츠', @@ -105,7 +105,7 @@ export const mockPlan: MarketingPlan = { }, { channelId: 'instagram_en', channelName: 'Instagram EN', icon: 'instagram', - currentStatus: '68.8K 팔로워, Reels 활발', targetGoal: '100K 팔로워', + currentStatus: '70K 팔로워, Reels 활발', targetGoal: '120K 팔로워', contentTypes: ['Reels', 'Before/After', 'Patient Stories'], postingFrequency: '주 5회', tone: 'Professional & warm — medical tourism storytelling', @@ -123,7 +123,7 @@ export const mockPlan: MarketingPlan = { }, { channelId: 'naver_blog', channelName: 'Naver Blog', icon: 'globe', - currentStatus: '미확인 / 미운영', targetGoal: '월 30,000 방문자', + currentStatus: '활성 — 550개 게시글, 월 2~3회 포스팅', targetGoal: '주 2회 포스팅, 월 30,000 방문자', contentTypes: ['SEO 블로그 포스트', '시술 가이드', '환자 후기'], postingFrequency: '주 3회', tone: '정보성 전문가 — 키워드 중심, 환자 고민 해결', @@ -257,7 +257,7 @@ export const mockPlan: MarketingPlan = { { id: 'a6', source: 'social', sourceLabel: '소셜미디어', type: 'photo', title: 'Instagram EN Before/After 사진', description: '@view_plastic_surgery 계정의 2,524개 게시물 중 B/A 사진', repurposingSuggestions: ['KR 계정 크로스포스팅', '유튜브 롱폼 삽입', 'Naver 블로그 활용'], status: 'collected' }, { id: 'a7', source: 'social', sourceLabel: '소셜미디어', type: 'text', title: '강남언니 환자 리뷰 18,840건', description: '9.5점 평균, 시술별 실 환자 후기 텍스트', repurposingSuggestions: ['후기 기반 Carousel 시리즈', '블로그 환자 스토리', '광고 사회적 증거'], status: 'pending' }, { id: 'a8', source: 'naver_place', sourceLabel: '네이버 플레이스', type: 'photo', title: '네이버 플레이스 사진', description: '병원 외관, 위치, 시설 사진', repurposingSuggestions: ['블로그 위치 안내 포스트', '구글 마이비즈니스 동기화'], status: 'pending' }, - { id: 'a9', source: 'blog', sourceLabel: '블로그', type: 'text', title: '네이버 블로그 기존 포스트', description: '기존 블로그 포스트 (수량 미확인)', repurposingSuggestions: ['SEO 최적화 리라이팅', '영상 스크립트 소스'], status: 'pending' }, + { id: 'a9', source: 'blog', sourceLabel: '블로그', type: 'text', title: '네이버 블로그 기존 포스트 550개', description: '기존 블로그 포스트 550개 (월 2~3회 업데이트 중)', repurposingSuggestions: ['SEO 최적화 리라이팅', '영상 스크립트 소스'], status: 'collected' }, { id: 'a10', source: 'homepage', sourceLabel: '홈페이지', type: 'video', title: '개원 20주년 기념 영상', description: '뷰성형외과 20년 역사 + 시설 소개 영상 (1:30)', repurposingSuggestions: ['브랜드 스토리 Reel', '웹사이트 히어로 영상', '신뢰 광고 소재'], status: 'collected' }, { id: 'a11', source: 'homepage', sourceLabel: '홈페이지', type: 'photo', title: '시술별 전후 사진 갤러리', description: '눈, 코, 가슴, 윤곽 시술별 비포/애프터 사진', repurposingSuggestions: ['Instagram B/A 시리즈', 'Shorts 전환 소스', '상담 자료'], status: 'needs_creation' }, ], diff --git a/src/data/mockReport.ts b/src/data/mockReport.ts index fde1fc3..fcd1b52 100644 --- a/src/data/mockReport.ts +++ b/src/data/mockReport.ts @@ -2,7 +2,7 @@ import type { MarketingReport } from '../types/report'; export const mockReport: MarketingReport = { id: 'view-clinic', - createdAt: '2026-03-22', + createdAt: '2026-04-13', targetUrl: 'https://www.viewclinic.com', overallScore: 62, @@ -11,15 +11,15 @@ export const mockReport: MarketingReport = { nameEn: 'VIEW Plastic Surgery', established: '2005', yearsInBusiness: 21, - staffCount: 28, + staffCount: 25, leadDoctor: { name: '최순우', credentials: '서울대 출신, 의학박사', - rating: 4.7, // TODO: 강남언니 실제 의료진 평점 확인 - reviewCount: 1809, + rating: 9.4, + reviewCount: 1805, }, - overallRating: 4.8, // TODO: 강남언니 실제 병원 평점 확인 (5.0 만점) - totalReviews: 18840, + overallRating: 9.5, + totalReviews: 19030, priceRange: { min: '97,900', max: '13,200,000+', currency: '₩' }, certifications: [ '수술실 CCTV', @@ -36,7 +36,7 @@ export const mockReport: MarketingReport = { mediaAppearances: ['렛미인 TV 프로그램', '보건복지부장관 표창', '안면윤곽 수상'], medicalTourism: ['VisitKorea 등재', '강남 메디컬투어센터 협력기관', '외국인 전용 서비스'], location: '서울시 강남구 봉은사로 107 (논현동)', - nearestStation: '9호선 신논현역 3번 출구 50m', + nearestStation: '9호선/신분당선 신논현역 3번 출구 68m', phone: '02-539-1177', domain: 'viewclinic.com', source: 'registry' as const, @@ -44,8 +44,8 @@ export const mockReport: MarketingReport = { district: '강남', branches: '본점 1개', brandGroup: '프리미엄', - naverPlaceUrl: 'https://map.naver.com/v5/entry/place/1234567890', - gangnamUnniUrl: 'https://www.gangnamunni.com/hospitals/view', + naverPlaceUrl: 'https://m.place.naver.com/hospital/11709005', + gangnamUnniUrl: 'https://www.gangnamunni.com/hospitals/189', googleMapsUrl: 'https://maps.google.com/?q=뷰성형외과', }, logoImages: { @@ -61,24 +61,24 @@ export const mockReport: MarketingReport = { }, channelScores: [ - { channel: 'YouTube', icon: 'youtube', score: 65, maxScore: 100, status: 'warning', headline: '103K 구독자, 조회수 하락세' }, - { channel: 'Instagram KR', icon: 'instagram', score: 35, maxScore: 100, status: 'critical', headline: '14K 팔로워, Reels 0개' }, - { channel: 'Instagram EN', icon: 'instagram', score: 55, maxScore: 100, status: 'warning', headline: '68.8K 팔로워, 활발한 편' }, - { channel: 'Facebook', icon: 'facebook', score: 40, maxScore: 100, status: 'critical', headline: '브랜드 불일치, 계정 분산' }, - { channel: '강남언니', icon: 'star', score: 95, maxScore: 100, status: 'excellent', headline: '4.8점, 18,840 리뷰' }, - { channel: 'Website', icon: 'globe', score: 50, maxScore: 100, status: 'warning', headline: 'SNS 연결 없음, 트래킹만 존재' }, + { channel: 'YouTube', icon: 'youtube', score: 68, maxScore: 100, status: 'warning', headline: '104K 구독자, 주 2-3회 업로드, 최근 조회수 하락' }, + { channel: 'Instagram KR', icon: 'instagram', score: 32, maxScore: 100, status: 'critical', headline: '14K 팔로워, Reels 0개, 모델 프사' }, + { channel: 'Instagram EN', icon: 'instagram', score: 62, maxScore: 100, status: 'warning', headline: '70K 팔로워, Reels 활발, 외국인 환자 중심' }, + { channel: 'Facebook', icon: 'facebook', score: 38, maxScore: 100, status: 'critical', headline: 'KR 253명 방치, EN 88K 활발, 3개 페이지 분산' }, + { channel: '강남언니', icon: 'star', score: 96, maxScore: 100, status: 'excellent', headline: '9.5점/10, 19,030 리뷰, 고객평가우수병원' }, + { channel: 'Website', icon: 'globe', score: 52, maxScore: 100, status: 'warning', headline: 'Google/Naver 인증 완료, SNS 직접 링크 없음' }, ], youtubeAudit: { channelName: '뷰성형외과 VIEW Plastic Surgery', handle: '@ViewclinicKR', - subscribers: 103000, + subscribers: 104000, totalVideos: 1064, totalViews: 9952722, weeklyViewGrowth: { absolute: 67097, percentage: 4.09 }, estimatedMonthlyRevenue: { min: 499, max: 1000 }, avgVideoLength: '4.4분', - uploadFrequency: '~주 1회', + uploadFrequency: '주 2~3회', channelCreatedDate: '2015-06-29', subscriberRank: '#570K', channelDescription: '💜뷰성형외과💜\nVIEW가 예술이다! ✨\n19층 규모의 안전스마트 빌딩\n환자의 관점에서 생각하고\n환자의 입장에서 아름다움의 가치를 찾습니다.', @@ -111,10 +111,10 @@ export const mockReport: MarketingReport = { { title: '아나운서 박은영, 가슴 할 결심을 하다', views: 127000, uploadedAgo: '9개월 전', type: 'Long', duration: '43:39' }, ], diagnosis: [ - { category: '구독자 대비 조회수 비율', detail: '영상당 평균 ~9,300회 (103K 구독자 대비 9% 도달률)', severity: 'critical', evidenceIds: ['yt-channel'] }, + { category: '구독자 대비 조회수 비율', detail: '영상당 평균 ~1,000회 (104K 구독자 대비 1% 도달률)', severity: 'critical', evidenceIds: ['yt-channel'] }, { category: '최근 롱폼 조회수', detail: '대부분 1,000~4,000회 수준', severity: 'critical' }, { category: 'Shorts 조회수', detail: '최근 업로드 500~1,000회 (과거 대비 급감)', severity: 'warning' }, - { category: '업로드 빈도', detail: '주 1회 — 알고리즘 노출 최소 기준 미달', severity: 'warning' }, + { category: '업로드 빈도', detail: '주 2~3회 — 적절한 빈도이나 조회수 미반영', severity: 'good' }, { category: '콘텐츠 톤앤매너', detail: '일관성 없음 — 교육/Q&A/전후/브랜딩 혼재', severity: 'critical' }, { category: '썸네일 디자인', detail: '통일된 브랜드 시스템 없음', severity: 'warning' }, { category: '최고 성과 Shorts', detail: '4년 전 콘텐츠 — 최근 재현 실패', severity: 'critical' }, @@ -127,27 +127,27 @@ export const mockReport: MarketingReport = { handle: '@viewplastic', language: 'KR', label: '국내 (한국어)', - posts: 1409, + posts: 1420, followers: 14000, - following: 4760, + following: 3822, category: 'Health/beauty', profileLink: 'litt.ly/viewplasticsurgery', - highlights: ['수술정보', 'ABOUT VIEW', '모델 모집', 'VIEW EVENT', '진료안내'], + highlights: ['ABOUT VIEW', '수술정보', '모델 모집', 'VIEW EVENT', '진료안내'], reelsCount: 0, contentFormat: '카드뉴스 (정보형 이미지) 100%', profilePhoto: '모델 사진 (브랜드 로고 아님)', - bio: '뷰 성형외과 | 가슴성형 · 안면윤곽 · 눈성형 · 코성형 · 리프팅\n💕신논현역 3번 출구 | 카톡 \'뷰성형외과의원\' | 02-539-1177', + bio: '뷰 성형외과 | 가슴성형 · 안면윤곽 · 눈성형 · 코성형 · 리프팅\n💞신논현역 3번 출구 | 카톡 \'뷰성형외과의원\' | 02-539-1177', }, { handle: '@view_plastic_surgery', language: 'EN', label: '국제 (영어)', - posts: 2524, - followers: 68800, - following: 2834, + posts: 2553, + followers: 70000, + following: 2840, category: 'Health/beauty', profileLink: 'litt.ly/viewplasticsurgeryenglish', - highlights: ['Mathilde', 'Thet San', 'Katerina', 'Yuri', 'Liposuction', 'Why VIEW?', 'Face Contour'], + highlights: ['Katerina', 'Mathilde', 'Kyle & Spizee', 'Chef Rush', 'Thet San', 'Yuri', 'Liposuction', 'Why VIEW?', 'Diana', 'Anti Aging', 'Julie', 'Male', 'Stem Cell', 'Dermatology'], reelsCount: 50, contentFormat: 'Before/After + 환자 스토리 + Reels', profilePhoto: 'VIEW 골드 로고', @@ -155,12 +155,12 @@ export const mockReport: MarketingReport = { }, ], diagnosis: [ - { category: '계정 분리 → 팔로워 분산', detail: 'KR 14K + EN 68.8K = 합산 82.8K이지만 각각 약함', severity: 'warning' }, + { category: '계정 분리 → 팔로워 분산', detail: 'KR 14K + EN 70K = 합산 84K이지만 각각 약함', severity: 'warning' }, { category: 'KR 계정 Reels 전무', detail: '인스타 알고리즘 핵심인 Reels 콘텐츠 0개', severity: 'critical', evidenceIds: ['ig-kr-profile'] }, { category: '브랜드 비주얼 불일치', detail: 'KR=모델 프사, EN=VIEW 골드 로고', severity: 'warning', evidenceIds: ['ig-kr-profile', 'ig-en-profile'] }, - { category: 'KR 팔로잉 과다', detail: '4,760 팔로잉 — 팔로우백 전략 의심', severity: 'warning' }, + { category: 'KR 팔로잉 과다', detail: '3,822 팔로잉 — 팔로우백 전략 의심', severity: 'warning' }, { category: '크로스포스팅 없음', detail: 'YouTube Shorts → Instagram Reels 연동 없음', severity: 'critical' }, - { category: '유튜브 ↔ 인스타 유입 단절', detail: '103K 구독자 → 14K 팔로워 전환 실패', severity: 'critical' }, + { category: '유튜브 ↔ 인스타 유입 단절', detail: '104K 구독자 → 14K 팔로워 전환 실패', severity: 'critical' }, ], }, @@ -200,7 +200,7 @@ export const mockReport: MarketingReport = { link: 'viewplasticsurgery.com', linkedDomain: 'viewplasticsurgery.com (메인 도메인 viewclinic.com과 다름)', reviews: 3, - recentPostAge: '14분 전', + recentPostAge: '2일 전', hasWhatsApp: true, postFrequency: '일 1~2회 (Before/After, 환자 스토리)', topContentType: 'Before/After 사진 + 환자 여정 Reels', @@ -282,13 +282,13 @@ export const mockReport: MarketingReport = { }, otherChannels: [ - { name: '카카오톡', status: 'active', details: '상담 전용 채널 운영', url: 'pf.kakao.com/_xbtVxjl' }, - { name: '네이버 블로그', status: 'unknown', details: 'Naver API 연동 필요' }, - { name: '네이버 플레이스', status: 'unknown', details: 'Naver API 연동 필요' }, + { name: '카카오톡', status: 'active', details: '플러스친구 @뷰성형외과의원 — 상담 전용 채널', url: 'pf.kakao.com/_xbtVxjl' }, + { name: '네이버 블로그', status: 'active', details: '공식 블로그 활성 — 총 550개 게시글, 월 2~3회 포스팅, 최근 2026.4.8 업로드', url: 'blog.naver.com/viewclinicps' }, + { name: '네이버 플레이스', status: 'active', details: '별점 4.41/5, 방문자리뷰 777개, 블로그리뷰 1,480개, 성형외과 전문의 14명', url: 'm.place.naver.com/hospital/11709005' }, { name: 'TikTok', status: 'not_found', details: '계정 없음 또는 비활성' }, - { name: '강남언니', status: 'active', details: '4.8점, 18,840 리뷰, 28 의료진', url: 'gangnamunni.com/hospitals/189' }, - { name: '모두닥', status: 'active', details: '기본 정보 등재' }, - { name: 'Goodoc', status: 'active', details: '기본 정보 등재' }, + { name: '강남언니', status: 'active', details: '9.5점/10, 19,030 리뷰, 25 의료진, 고객평가우수병원', url: 'gangnamunni.com/hospitals/189' }, + { name: 'Threads', status: 'active', details: '@viewplastic + @view_plastic_surgery 계정 연동', url: 'threads.net/@viewplastic' }, + { name: 'Facebook TH', status: 'inactive', details: '태국 파트너 페이지 14K 팔로워, 2024.7월 이후 방치', url: 'facebook.com/viewplasticsurgery' }, { name: '닥터나우', status: 'active', details: '기본 정보 등재' }, ], @@ -321,7 +321,7 @@ export const mockReport: MarketingReport = { }, { category: '플랫폼 간 유입 단절', - detail: 'YouTube 103K → Instagram 14K 전환 실패, 웹사이트에 SNS 링크 0개, 강남언니 18.8K 리뷰→영상 전환 없음', + detail: 'YouTube 104K → Instagram 14K 전환 실패, 웹사이트에 SNS 직접 링크 없음, 강남언니 19K 리뷰→영상 전환 없음', severity: 'critical', }, ], @@ -345,7 +345,7 @@ export const mockReport: MarketingReport = { { platform: 'YouTube', icon: 'youtube', - currentMetric: '103K subscribers', + currentMetric: '104K subscribers', targetMetric: '200K / 12개월', strategies: [ { strategy: '업로드 빈도 3배 증가', detail: '주 3회 (롱폼 1 + Shorts 2)' }, @@ -362,7 +362,7 @@ export const mockReport: MarketingReport = { strategies: [ { strategy: 'Reels 즉시 시작', detail: 'YouTube Shorts 동시 게시 → 최소 주 5개' }, { strategy: '프로필 사진 교체', detail: '모델 사진 → VIEW 골드 로고' }, - { strategy: '팔로잉 정리', detail: '4,760 → 300 이하로 정리' }, + { strategy: '팔로잉 정리', detail: '3,822 → 300 이하로 정리' }, { strategy: 'Stories 활성화', detail: '일 2~3개 (상담 비하인드, 병원 일상)' }, ], }, @@ -386,8 +386,8 @@ export const mockReport: MarketingReport = { ], newChannelProposals: [ { channel: 'TikTok', priority: 'P1', rationale: '20~30대 첫 수술 고민층 도달, YouTube Shorts 동시 배포' }, - { channel: '네이버 블로그', priority: 'P0', rationale: '한국 검색 1위 플랫폼 — SEO 핵심' }, - { channel: '네이버 플레이스', priority: 'P0', rationale: '지역 검색 노출 필수' }, + { channel: '네이버 블로그 강화', priority: 'P0', rationale: '현재 550개 게시글, 월 2~3회 → 주 2회로 빈도 상향, SEO 핵심' }, + { channel: '네이버 플레이스 최적화', priority: 'P0', rationale: '4.41점/777리뷰 — 리뷰 응답률/사진 최적화 필요' }, ], }, @@ -400,7 +400,7 @@ export const mockReport: MarketingReport = { { task: '브랜드 아이덴티티 가이드 확정 (로고, 컬러, 폰트, 톤앤매너)', completed: false }, { task: '전 채널 프로필 사진/배너 통일 교체', completed: false }, { task: 'Facebook KR 페이지 정리 (통합 또는 폐쇄)', completed: false }, - { task: 'Instagram KR 팔로잉 정리 (4,760 → 300)', completed: false }, + { task: 'Instagram KR 팔로잉 정리 (3,822 → 300)', completed: false }, { task: '웹사이트에 YouTube/Instagram 링크 추가', completed: false }, { task: '기존 YouTube 영상 100개 → AI 숏폼 추출 시작', completed: false }, { task: '콘텐츠 캘린더 v1 수립', completed: false }, @@ -435,14 +435,14 @@ export const mockReport: MarketingReport = { ], kpiDashboard: [ - { metric: 'YouTube 구독자', current: '103K', target3Month: '115K', target12Month: '200K' }, + { metric: 'YouTube 구독자', current: '104K', target3Month: '115K', target12Month: '200K' }, { metric: 'YouTube 월 조회수', current: '~270K', target3Month: '500K', target12Month: '1.5M' }, { metric: 'YouTube Shorts 평균 조회수', current: '500~1,000', target3Month: '5,000', target12Month: '20,000' }, { metric: 'Instagram KR 팔로워', current: '14K', target3Month: '20K', target12Month: '50K' }, { metric: 'Instagram KR Reels 평균 조회수', current: '0 (없음)', target3Month: '3,000', target12Month: '10,000' }, - { metric: 'Instagram EN 팔로워', current: '68.8K', target3Month: '75K', target12Month: '100K' }, - { metric: '네이버 블로그 방문자', current: '0 (없음)', target3Month: '5,000/월', target12Month: '30,000/월' }, - { metric: '웹사이트 → SNS 유입', current: '0%', target3Month: '5%', target12Month: '15%' }, + { metric: 'Instagram EN 팔로워', current: '70K', target3Month: '80K', target12Month: '120K' }, + { metric: '네이버 블로그 포스팅 빈도', current: '월 2~3회', target3Month: '주 2회', target12Month: '주 3회' }, + { metric: '네이버 플레이스 리뷰', current: '777개 (4.41점)', target3Month: '900개', target12Month: '1,200개' }, { metric: '콘텐츠 → 상담 전환', current: '측정 불가', target3Month: 'UTM 추적 시작', target12Month: '월 50건' }, ], @@ -452,7 +452,7 @@ export const mockReport: MarketingReport = { url: '/assets/clients/view-clinic/screenshots/yt-channel.svg', channel: 'YouTube', capturedAt: '2026-03-22T10:00:00Z', - caption: 'YouTube 채널 메인 — 구독자 103K, 주 1회 업로드, Shorts 조회수 하락세', + caption: 'YouTube 채널 메인 — 구독자 104K, 주 2~3회 업로드, 최근 조회수 하락세', sourceUrl: 'https://youtube.com/@ViewclinicKR', }, { @@ -471,7 +471,7 @@ export const mockReport: MarketingReport = { url: '/assets/clients/view-clinic/screenshots/ig-kr-profile.svg', channel: 'Instagram', capturedAt: '2026-03-22T10:02:00Z', - caption: 'Instagram KR (@viewplastic) — 14K 팔로워, 1,409 게시물, Reels 미활용', + caption: 'Instagram KR (@viewplastic) — 14K 팔로워, 1,420 게시물, Reels 0개', sourceUrl: 'https://instagram.com/viewplastic', }, { @@ -479,7 +479,7 @@ export const mockReport: MarketingReport = { url: '/assets/clients/view-clinic/screenshots/ig-en-profile.svg', channel: 'Instagram', capturedAt: '2026-03-22T10:03:00Z', - caption: 'Instagram EN (@view_plastic_surgery) — 68.9K 팔로워, Reels 활발, 환자 스토리', + caption: 'Instagram EN (@view_plastic_surgery) — 70K 팔로워, 2,553 게시물, Reels 활발', sourceUrl: 'https://instagram.com/view_plastic_surgery', }, { diff --git a/src/hooks/useMarketingPlan.ts b/src/hooks/useMarketingPlan.ts index 77133ee..e6f77dc 100644 --- a/src/hooks/useMarketingPlan.ts +++ b/src/hooks/useMarketingPlan.ts @@ -89,7 +89,7 @@ export function useMarketingPlan(id: string | undefined): UseMarketingPlanResult async function loadPlan() { try { // ─── Dev / Demo: return mock data immediately ─── - if (id === 'demo') { + if (id === 'demo' || id === 'view-clinic') { setData(mockPlan); setIsLoading(false); return; diff --git a/src/hooks/useReport.ts b/src/hooks/useReport.ts index 52ba514..f4aaef7 100644 --- a/src/hooks/useReport.ts +++ b/src/hooks/useReport.ts @@ -4,6 +4,7 @@ import type { MarketingReport } from '../types/report'; import { fetchReportById } from '../lib/supabase'; import { transformApiReport, mergeEnrichment, type EnrichmentData } from '../lib/transformReport'; import { normalizeInstagramHandle } from '../lib/normalizeHandles'; +import { mockReport } from '../data/mockReport'; interface UseReportResult { data: MarketingReport | null; @@ -67,7 +68,16 @@ export function useReport(id: string | undefined): UseReportResult { return; } - // Source 2: Fetch from Supabase by report ID (bookmarked/shared link) + // Source 2: Demo mode — return hardcoded mock data for sales prototype + if (id === 'view-clinic') { + setData(mockReport); + setIsEnriched(true); + setSocialHandles({ instagram: '@viewplastic', youtube: '@ViewclinicKR', facebook: 'viewps1' }); + setIsLoading(false); + return; + } + + // Source 3: Fetch from Supabase by report ID (bookmarked/shared link) if (id) { fetchReportById(id) .then((row) => {