diff --git a/supporters/docs/v4-screenshots/v4_about.png b/supporters/docs/v4-screenshots/v4_about.png
new file mode 100644
index 0000000..23ef3d1
Binary files /dev/null and b/supporters/docs/v4-screenshots/v4_about.png differ
diff --git a/supporters/docs/v4-screenshots/v4_editorial.png b/supporters/docs/v4-screenshots/v4_editorial.png
new file mode 100644
index 0000000..9ac5b54
Binary files /dev/null and b/supporters/docs/v4-screenshots/v4_editorial.png differ
diff --git a/supporters/docs/v4-screenshots/v4_home_full.png b/supporters/docs/v4-screenshots/v4_home_full.png
new file mode 100644
index 0000000..68f7261
Binary files /dev/null and b/supporters/docs/v4-screenshots/v4_home_full.png differ
diff --git a/supporters/docs/v4-screenshots/v4_home_hero.png b/supporters/docs/v4-screenshots/v4_home_hero.png
new file mode 100644
index 0000000..80908d6
Binary files /dev/null and b/supporters/docs/v4-screenshots/v4_home_hero.png differ
diff --git a/supporters/docs/v4-screenshots/v4_post_top.png b/supporters/docs/v4-screenshots/v4_post_top.png
new file mode 100644
index 0000000..d006a12
Binary files /dev/null and b/supporters/docs/v4-screenshots/v4_post_top.png differ
diff --git a/supporters/docs/v4-screenshots/v4_posts_top.png b/supporters/docs/v4-screenshots/v4_posts_top.png
new file mode 100644
index 0000000..16640fc
Binary files /dev/null and b/supporters/docs/v4-screenshots/v4_posts_top.png differ
diff --git a/supporters/src/components/Disclosure.astro b/supporters/src/components/Disclosure.astro
index c1ad9cd..b4fd4c3 100644
--- a/supporters/src/components/Disclosure.astro
+++ b/supporters/src/components/Disclosure.astro
@@ -2,5 +2,5 @@
import { fact } from '../lib';
---
- 대가 관계 고지: 뷰 서포터즈 활동은 {fact.shortName}의 지원을 받습니다. 이 글은 광고 목적의 치료 경험담을 담지 않으며, 전후 사진을 싣지 않습니다. {fact.sideEffectNotice}
+ 뷰 서포터즈 활동은 {fact.shortName}의 지원을 받습니다. 이 글에는 다른 환자의 치료 경험담과 전후 사진을 싣지 않습니다. {fact.sideEffectNotice}
diff --git a/supporters/src/content/posts/reviews-where.md b/supporters/src/content/posts/reviews-where.md
index 52b43bd..19256f3 100644
--- a/supporters/src/content/posts/reviews-where.md
+++ b/supporters/src/content/posts/reviews-where.md
@@ -6,7 +6,7 @@ qbIds: [G-01, G-03, G-05, G-08]
summary:
- "뷰성형외과 후기는 강남언니(평점 9.5, 후기 19,373건), 구글 비즈니스 프로필(4.9점, 리뷰 901건), 네이버 플레이스(리뷰 776건) 세 곳에 나뉘어 있습니다."
- "강남언니는 시술별·의사별로 후기를 나눠 볼 수 있어 특정 수술을 알아볼 때 유용하고, 구글은 해외 환자 후기 비중이 높습니다."
- - "이 사이트는 의료법상 광고에 치료 경험담을 쓸 수 없어 후기 내용을 인용하지 않습니다. 집계 수치와 링크만 안내하니 직접 읽고 판단하세요."
+ - "이 사이트는 다른 환자의 후기 내용을 옮기지 않습니다. 집계 수치와 링크만 안내하니 직접 읽고 판단하세요."
description: "뷰성형외과 후기를 볼 수 있는 세 곳(강남언니·구글·네이버 플레이스)의 집계 수치와 특징, 후기를 읽을 때 확인할 점을 정리했습니다. 후기 본문은 인용하지 않습니다."
author: sup-02
reviewStatus: pending
@@ -20,7 +20,7 @@ faq:
- q: "부작용 후기나 안 좋은 얘기는 어디서 보나요?"
a: "같은 세 곳에서 낮은 평점 순으로 정렬해 읽는 것이 방법입니다. 불만 후기가 어떤 항목(결과, 응대, 비용)에 몰려 있는지 보면 본인에게 중요한 위험을 가늠할 수 있습니다."
- q: "이 사이트에는 왜 후기 내용이 없나요?"
- a: "의료법 제56조는 광고에서 치료 경험담을 금지합니다. 병원의 지원을 받는 이 사이트는 광고로 볼 여지가 있어 후기 본문을 인용하지 않고 집계와 링크만 안내합니다."
+ a: "이 사이트는 병원의 지원을 받기 때문에, 다른 환자의 경험담으로 설득하면 광고가 됩니다. 그래서 후기 본문은 옮기지 않고 어디서 몇 건을 볼 수 있는지만 안내합니다."
sources:
- { label: "강남언니 · 뷰성형외과의원 병원 페이지", url: "https://www.gangnamunni.com/hospitals/189", accessed: "2026-09-04" }
- { label: "구글 지도 · 뷰성형외과 검색", url: "https://www.google.com/maps/search/?api=1&query=%EB%B7%B0%EC%84%B1%ED%98%95%EC%99%B8%EA%B3%BC", accessed: "2026-08-28" }
@@ -61,9 +61,9 @@ thumbnail: "/img/clinic/consult-3.jpg"
3. 구체적인 정보(담당 의사, 시술명, 시기)가 있는지. 구체성이 없는 후기는 가중치를 낮춥니다.
4. 플랫폼이 후기를 어떻게 검증하는지. 강남언니는 병원정보 항목이 병원 제출 자료 기준임을 명시하고, 네이버는 영수증 인증을 씁니다.
-## 이 사이트가 후기를 인용하지 않는 이유
+## 이 사이트에 후기 내용이 없는 이유
-의료법 제56조는 의료광고에서 치료 경험담을 금지합니다. 뷰 서포터즈는 뷰성형외과의 지원을 받는 매체라 광고로 볼 여지가 있고, 그래서 후기 본문을 옮기지 않습니다. 집계 수치와 링크까지만 안내하고, 판단은 독자가 직접 읽고 내리도록 합니다. 병원 기본 정보는 [팩트 시트](/clinic)에 있습니다.
+뷰 서포터즈는 뷰성형외과의 지원을 받습니다. 그런 곳이 다른 환자의 경험담을 골라 보여 주면 정보가 아니라 광고가 됩니다. 그래서 후기 본문은 옮기지 않고, 어디서 몇 건을 볼 수 있는지까지만 안내합니다. 판단은 직접 읽고 내리세요. 병원 기본 정보는 [병원 정보](/clinic)에 있습니다.
## 후기 말고도 볼 것
diff --git a/supporters/src/content/posts/visit-guide.md b/supporters/src/content/posts/visit-guide.md
index aca86c4..beee6a4 100644
--- a/supporters/src/content/posts/visit-guide.md
+++ b/supporters/src/content/posts/visit-guide.md
@@ -100,4 +100,4 @@ thumbnail: "/img/clinic/parking-map.jpg"
## 진료시간 근거에 대해
-홈페이지에는 진료시간이 배너 이미지 안에만 있고 텍스트로는 없습니다. 위 갤러리의 배너 이미지를 읽으면 평일 10시~19시, 금요일 21시, 토요일 17시로 강남언니 표기와 일치합니다. 답변엔진은 이미지 속 글자를 읽지 못하므로, 이 글이 그 정보를 텍스트로 처음 제공하는 셈입니다.
+홈페이지에는 진료시간이 배너 이미지 안에만 있고 텍스트로는 없습니다. 위 갤러리의 배너 이미지를 읽으면 평일 10시~19시, 금요일 21시, 토요일 17시로 강남언니 표기와 일치합니다. 방문 전에는 전화로 한 번 더 확인하세요.
diff --git a/supporters/src/data/authors.json b/supporters/src/data/authors.json
index bb41972..d6f2dc9 100644
--- a/supporters/src/data/authors.json
+++ b/supporters/src/data/authors.json
@@ -10,7 +10,7 @@
"sup-02": {
"name": "서포터즈 1기 B (가명·샘플)",
"role": "뷰 서포터즈 1기",
- "bio": "방문·예약·비용처럼 병원에 가기 전에 궁금한 실무 정보를 정리합니다. 주소·전화·진료시간은 병원 팩트 시트에서만 가져옵니다.",
+ "bio": "방문·예약·비용처럼 병원에 가기 전에 궁금한 실무 정보를 정리합니다. 주소·전화·진료시간은 병원 정보 페이지와 같은 내용을 씁니다.",
"sameAs": []
}
},
diff --git a/supporters/src/layouts/Base.astro b/supporters/src/layouts/Base.astro
index df39e95..4a16222 100644
--- a/supporters/src/layouts/Base.astro
+++ b/supporters/src/layouts/Base.astro
@@ -8,8 +8,9 @@ interface Props {
jsonLd?: Record | Record[];
ogImage?: string;
type?: 'website' | 'article';
+ noindex?: boolean;
}
-const { title, description, jsonLd, ogImage = '/img/clinic/building-clean.jpg', type = 'website' } = Astro.props;
+const { title, description, jsonLd, ogImage = '/img/clinic/building-clean.jpg', type = 'website', noindex = false } = Astro.props;
const site = Astro.site?.toString().replace(/\/$/, '') ?? '';
const cleanPath = Astro.url.pathname.replace(/\/index\.html$/, '/').replace(/\.html$/, '');
const canonical = (new URL(cleanPath, Astro.site).toString().replace(/\/$/, '') || site);
@@ -23,7 +24,7 @@ const ld = jsonLd ? JSON.stringify({ '@context': 'https://schema.org', ...(Array
{title} | {SITE_NAME}
- {!INDEXABLE && }
+ {(!INDEXABLE || noindex) && }
@@ -38,7 +39,7 @@ const ld = jsonLd ? JSON.stringify({ '@context': 'https://schema.org', ...(Array
{ld && }
- {!INDEXABLE &&
이미지는 병원 공개 자료를 캡처해 쓰되, 설명(alt)과 캡션은 글 문맥에 맞게 새로 쓰고 출처와 캡처일을 적습니다.
-
-
쓰지 않는 것
+
소개
이 사이트에 대해
누가 쓰는지, 무엇을 근거로 하는지, 무엇을 싣지 않는지.
+
+
어떤 곳인가요
+
뷰 서포터즈는 {fact.shortName}를 알아보는 분들이 실제로 묻는 질문에 답하는 곳입니다. 병원 홈페이지가 병원을 소개한다면, 이곳은 "가기 전에 뭘 알아야 하지?", "이 수술은 어떻게 진행되지?", "후기는 어디서 보지?" 같은 환자 쪽 질문에서 출발합니다.
+
+
답은 무엇을 근거로 하나요
+
+
{fact.shortName} 원장들이 직접 설명한 유튜브 영상. 글에서 원장이 한 말은 영상을 함께 붙여 직접 확인할 수 있게 합니다.
글은 서포터즈가 씁니다. 의학적인 내용은 {fact.shortName} 담당 원장이 감수하며, 감수가 끝난 글에는 "감수 완료"와 날짜를, 아직 감수 전인 글에는 "감수 예정"을 표시합니다. 서포터즈는 의학적 판단을 하지 않습니다. 수술 여부와 방법은 반드시 전문의 상담으로 정하세요.
+
지금은 샘플 단계라 서포터즈 이름은 가명이고 감수는 모두 "예정" 상태입니다.
+
+
싣지 않는 것
전후 사진
-
환자 후기·경험담 인용. 후기는 강남언니·구글의 집계 수치와 링크로만 다룹니다.
-
타 병원과의 비교, 효과 보장, 최상급 표현
-
가격 안내. 이벤트 가격은 병원과 강남언니 페이지로 안내만 합니다.
+
다른 환자의 후기와 경험담. 후기는 강남언니, 구글, 네이버 플레이스의 집계 수치와 링크로만 안내합니다.
+
다른 병원과의 비교, 효과를 보장하는 표현, "최고" 같은 최상급 표현
+
가격. 이벤트 가격은 병원과 강남언니 페이지로 안내만 합니다.
-
작성자와 감수
-
글은 실명 서포터즈가 씁니다(샘플 단계에서는 가명). 의학적 내용은 {fact.shortName} 담당 원장이 감수하며, 감수가 끝난 글에만 "감수 완료"와 날짜를 표시합니다. 감수 전 글은 "감수 예정"으로 표시합니다. 서포터즈는 의학적 판단을 하지 않습니다.
-
대가 관계 고지
-
뷰 서포터즈 활동은 {fact.shortName}의 지원을 받습니다. 모든 글 하단에 같은 문장을 고정으로 표시합니다.
-
중복 콘텐츠를 피하는 규칙
-
규칙
이유
-
홈페이지 문장 연속 일치 검사 후 발행
구글이 복제 사이트로 분류하거나 홈페이지와 순위를 나눠 갖는 일을 막습니다.
-
허브(이 사이트)에 먼저 발행, 네이버 블로그는 24시간 뒤 요약 재작성
네이버 유사문서 판독은 뒤에 올라온 비슷한 글을 뺍니다. 발행 순서가 원본 판정입니다.
-
모든 페이지에 자기 참조 canonical
같은 글이 다른 주소로 복제돼도 원본이 한 곳으로 모입니다.
-
홈페이지에 없는 정보 유형을 중심으로
준비 체크리스트, 회복 일정, 비교표, FAQ는 홈페이지가 다루지 않는 영역입니다.
-
-
기술 메모
-
정적 HTML로 빌드해 크롤러가 자바스크립트 없이 전문을 읽습니다. 글마다 Article·FAQPage·Person·Physician·MedicalClinic 구조화 데이터를 넣고, 빌드 단계에서 구조화 데이터 문법과 이미지 alt, 금칙 표현을 검사해 통과하지 못하면 배포하지 않습니다. 샘플 단계에서는 검색엔진 색인을 막아 두었습니다(noindex).
+
이유는 간단합니다. 병원의 지원을 받는 사이트가 경험담이나 전후 사진으로 설득하면 광고가 되고, 읽는 분이 판단할 근거가 아니라 인상만 남기 때문입니다.
+
+
병원과의 관계
+
뷰 서포터즈 활동은 {fact.shortName}의 지원을 받습니다. 이 사실은 모든 글 아래에 같은 문장으로 표시합니다. 감춘 광고가 아니라는 뜻이며, 그래서 위의 "싣지 않는 것"을 지킵니다.
+
+
문의
+
글의 오류나 정정 요청은 {fact.shortName} 공식 채널로 보내 주세요. 홈페이지 · 카카오톡 상담 채널 · 전화 {fact.phone}
+
+
이 사이트를 만드는 방식(글 구조, 중복 콘텐츠 규칙, 발행 전 검사)이 궁금한 운영자는 편집 기준을 보세요.
{fact.sideEffectNotice}
diff --git a/supporters/src/pages/authors/[id].astro b/supporters/src/pages/authors/[id].astro
index 9fe7559..11d43ce 100644
--- a/supporters/src/pages/authors/[id].astro
+++ b/supporters/src/pages/authors/[id].astro
@@ -14,7 +14,7 @@ const site = Astro.site!.toString().replace(/\/$/, '');
{a.role}
{a.name}
{a.bio}
-
샘플 단계라 가명입니다. 실명 서포터즈가 확정되면 이 페이지의 이름·소개·SNS 링크(sameAs)가 실제 인물로 바뀝니다.
뷰성형외과 기본 정보. 서포터즈 글 전체가 공유하는 단일 원본입니다. 표기는 공식 홈페이지를 따르고, 홈페이지에 없는 항목은 출처를 따로 적습니다.
+
병원 정보
뷰성형외과 기본 정보
주소, 전화, 진료시간, 층별 안내, 의료진을 한 곳에 모았습니다. 표기는 공식 홈페이지를 따르고, 홈페이지에 없는 항목은 출처를 따로 적습니다.
진료시간
요일
진료
{fact.hours.rows.map((r) =>
{r.days}
{r.open ? `${r.open} ~ ${r.close}` : r.note}
)}
diff --git a/supporters/src/pages/editorial.astro b/supporters/src/pages/editorial.astro
new file mode 100644
index 0000000..7f95a19
--- /dev/null
+++ b/supporters/src/pages/editorial.astro
@@ -0,0 +1,84 @@
+---
+// 운영자용 페이지. 병원 담당자·서포터즈·INFINITH가 보는 편집 기준이다. 고객 내비게이션에는 넣지 않고 푸터에서만 연결하며, 색인하지 않는다.
+import Base from '../layouts/Base.astro';
+import { fact, SITE_NAME } from '../lib';
+const site = Astro.site!.toString().replace(/\/$/, '');
+const ld = { '@type': 'WebPage', '@id': `${site}/editorial#page`, name: '편집 기준', url: `${site}/editorial`, inLanguage: 'ko', isPartOf: { '@id': `${site}/#website` }, publisher: { '@type': 'Organization', name: SITE_NAME, url: site } };
+---
+
+
+
운영자용
편집 기준
이 페이지는 병원 담당자, 서포터즈, INFINITH 운영진이 보는 문서입니다. 방문자에게 보이는 소개는 이 사이트에 대해에 따로 있습니다.
+
고객 화면에는 "AI가 인용하는 방식"이나 제작 원칙을 쓰지 않습니다. 방문자는 답을 보러 오지 제작 과정을 보러 오지 않습니다. 이 페이지의 내용은 이 페이지 밖으로 내보내지 않습니다.
+
+
1. 왜 이 사이트인가
+
답변엔진(ChatGPT, Perplexity, 네이버 AI 브리핑)은 광고 문장이 아니라 질문에 바로 답하는 단락을 잘라 인용합니다. 병원 홈페이지는 소개 중심이라 그 단락이 없습니다. 이 사이트는 환자 질문에 답하는 단락을 먼저 만들고, 그 답을 원장 영상과 공개 자료로 뒷받침하는 것이 목적입니다.
+
+
2. 질문 뱅크
+
질문은 INFINITH가 실측한 환자 질문 뱅크 120문항(카테고리 A~G)에서 고릅니다. 문항 하나가 글 하나이고, 각 글의 문항 번호는 페이지 소스의 data-qb 속성에만 남기고 화면에는 표시하지 않습니다.
+
카테고리
내용
글 포맷
+
A 병원 소개
어떤 병원인지, 의료진
정의문 + 사실 표
+
B 방문·예약
가는 길, 예약, 준비
체크리스트
+
C 선택 기준
병원·원장 고르는 기준
기준 표
+
D 시술 정보
수술 방법, 보형물, 회복
원장 영상 재구성 + FAQ
+
E 안전·신뢰
마취, 실명제, 응급
사실 나열 + 출처
+
F 가격·이벤트
가격 확인처
안내만, 금액 미기재
+
G 후기·평판
후기 읽는 곳
집계 수치 + 링크
+
+
+
3. 글 구조
+
+
H1은 질문형 한 문장.
+
첫 블록 "세 줄 요약"에 답을 먼저 쓴다. 답변엔진이 잘라 쓰는 단락이다.
+
본문 H2 3~5개. 표는 HTML table. 수치는 단위 포함.
+
원장 영상은 글로 재구성하고 원본을 임베드한다. 영상 설명란 텍스트는 복사하지 않는다.
+
FAQ 5~8개. 질문 뱅크 문항을 그대로 질문으로 쓴다.
+
작성·감수 정보, 참고 자료, 병원 정보 블록, 지원 관계 고지 순으로 닫는다.
+
+
+
4. 원천 변환 규칙
+
+
홈페이지 문장은 옮겨 적지 않는다. 사실(개원 연도, 층 구성, 진료시간)만 가져오고 문장은 새로 쓴다.
+
주소·전화·진료시간·의료진 수는 src/data/factSheet.json 한 곳에서만 가져온다. 화면의 병원 정보도 같은 파일에서 나온다.
+
이미지는 병원 공개 자료를 캡처해 쓰되, alt와 캡션은 글 문맥에 맞게 새로 쓰고 출처를 적는다.
+
후기 본문은 인용하지 않는다. 의료법 제56조가 광고에서 치료 경험담을 금지하고, 병원 지원을 받는 이 사이트는 광고로 볼 여지가 있다. 집계 수치와 링크만 쓴다.
+
+
+
5. 중복 콘텐츠를 피하는 규칙
+
규칙
이유
+
홈페이지 문장 40자 연속 일치 검사 후 발행
구글이 복제 사이트로 분류하거나 홈페이지와 순위를 나눠 갖는 일을 막는다.
+
허브(이 사이트)에 먼저 발행, 네이버 블로그는 24시간 뒤 요약 재작성
네이버 유사문서 판독은 뒤에 올라온 비슷한 글을 뺀다. 발행 순서가 원본 판정이다.
+
모든 페이지에 자기 참조 canonical
같은 글이 다른 주소로 복제돼도 원본이 한 곳으로 모인다.
+
홈페이지에 없는 정보 유형을 중심으로
준비 체크리스트, 회복 일정, 비교표, FAQ는 홈페이지가 다루지 않는 영역이다.
+
+
+
6. 구조화 데이터
+
타입
용도
+
Article + MedicalWebPage
글 본체. dateModified 필수
+
FAQPage
FAQ 블록
+
Person (author)
서포터즈. 확정 후 sameAs로 본인 SNS 연결
+
Physician (reviewedBy)
감수 원장. 감수 완료 상태에서만 넣는다. 감수 예정에 넣으면 허위 표기다
+
MedicalClinic (about)
{fact.shortName}. 홈페이지·유튜브·강남언니 sameAs
+
VideoObject
임베드 영상
+
+
+
7. 발행 전 검사
+
정적 HTML로 빌드해 크롤러가 자바스크립트 없이 전문을 읽습니다. 빌드 뒤 scripts/check.mjs가 다음을 검사하고 하나라도 실패하면 배포하지 않습니다.
+
+
JSON-LD 문법과 글 페이지의 Article/FAQPage 존재
+
모든 이미지의 alt
+
금칙 표현. 치료 결과를 단정하는 말, 부작용을 부정하는 문장, 최상급 병원 표현, 1인칭 경험담 어투. 목록은 scripts/check.mjs의 BANNED 배열에 있다
+
페이지당 H1 1개
+
홈페이지 문장 40자 연속 일치
+
+
샘플 단계에서는 사이트 전체를 noindex로 두고, 이 페이지는 정식 오픈 뒤에도 noindex를 유지합니다.
+
+
8. 고객 화면과 운영자 설명의 경계
+
다음 표현은 고객 화면(홈, 글, 영상, 뉴스룸, 병원 정보, 소개)에 쓰지 않습니다.
+
+
답변엔진, AI 인용, AEO/GEO, 질문 뱅크, QB 번호, INFINITH 실측
+
"홈페이지 문장을 복사하지 않습니다", "단일 원본", "수집 기준", "API 집계" 같은 제작 과정 설명
+
법 조문 번호. 고객에게는 "다른 환자의 경험담을 싣지 않습니다"까지만 말하고 이유는 한 문장으로 줄인다
+
+
고객 화면에 남기는 것은 환자 보호 문구뿐입니다. 감수 상태, 참고 자료, 병원 지원 관계, 부작용 고지.
+
+
diff --git a/supporters/src/pages/index.astro b/supporters/src/pages/index.astro
index ab6beeb..f7ca1a6 100644
--- a/supporters/src/pages/index.astro
+++ b/supporters/src/pages/index.astro
@@ -5,29 +5,40 @@ import PostCard from '../components/PostCard.astro';
import FactBlock from '../components/FactBlock.astro';
import VideoLite from '../components/VideoLite.astro';
import Gallery from '../components/Gallery.astro';
-import { SITE_NAME, fact, clinicSchema } from '../lib';
+import { SITE_NAME, CATEGORY_LABELS, fact, clinicSchema } from '../lib';
const posts = (await getCollection('posts')).sort((a, b) => b.data.dateModified.localeCompare(a.data.dateModified));
const site = Astro.site!.toString().replace(/\/$/, '');
const ld = [
{ '@type': 'WebSite', '@id': `${site}/#website`, name: SITE_NAME, url: site, inLanguage: 'ko', about: { '@id': `${fact.url}/#clinic` }, publisher: { '@type': 'Organization', name: SITE_NAME, url: site } },
clinicSchema(site),
];
+// 고객이 고르는 주제. 글이 있는 카테고리만 보여 준다. 설명문은 환자 관점의 질문 예시다.
+const TOPIC_HINT: Record = {
+ A: '어떤 병원인지, 어떤 원장이 있는지',
+ B: '가는 길, 예약, 상담 당일 준비',
+ C: '병원과 원장을 고를 때 볼 것',
+ D: '수술 방법, 보형물, 회복 과정',
+ E: '마취, 수술 실명제, 응급 대비',
+ F: '가격 안내를 어디서 확인하는지',
+ G: '후기를 어디서 어떻게 읽을지',
+};
+const topics = Object.keys(CATEGORY_LABELS).map((c) => ({ key: c, label: CATEGORY_LABELS[c], hint: TOPIC_HINT[c], count: posts.filter((p) => p.data.category === c).length })).filter((t) => t.count > 0);
---
-
+
-
View Supporters · Sample
-
뷰성형외과를 알아보는 사람들의 질문에 먼저 답합니다.
-
{fact.shortName}는 {fact.founded}년 개원한 서울 강남 신논현역 인근 성형외과입니다. 이 사이트는 홈페이지를 옮겨 적지 않습니다. 사람들이 실제로 묻는 질문을 골라 원장 영상과 공개 자료를 근거로 답하고, 글마다 작성자·감수 상태·참고 자료를 밝힙니다.
+
뷰 서포터즈
+
뷰성형외과, 궁금한 것부터 답합니다.
+
{fact.shortName}는 {fact.founded}년 개원한 서울 강남 신논현역 인근 성형외과입니다. 이곳은 병원을 알아보는 분들이 실제로 묻는 질문을 골라, 원장 설명 영상과 병원이 공개한 자료를 근거로 답하는 곳입니다. 글마다 누가 썼고 원장 감수를 거쳤는지 밝힙니다.
{fact.founded}년 개원 · 신논현역 3번 출구 50m
- 원천: 유튜브 {fact.surfaces.youtube.videos}편 · 공식 홈페이지 · 강남언니
+ 원장 설명 영상 {fact.surfaces.youtube.videos}편을 근거로
{(v as any).isShort && 쇼츠}{dur(v.duration)} · {v.published} 게시 · 유튜브에서 보기
- {(v as any).answer &&
서포터즈 답
{(v as any).answer}
{(v as any).qb && QB {(v as any).qb}}
}
+ {(v as any).answer &&
서포터즈 답
{(v as any).answer}
}
))}
))}
-
영상은 뷰성형외과 공식 유튜브 채널의 공개 영상이며, 유튜브 공식 임베드 플레이어로 재생됩니다. 이 페이지는 영상을 복제하거나 저장하지 않습니다. 조회수·좋아요·댓글 수는 YouTube Data API 집계값입니다. 임베드가 허용되지 않은 영상은 목록에서 제외합니다(현재 0편).
+
영상은 뷰성형외과 공식 유튜브 채널의 공개 영상이며, 유튜브 공식 임베드 플레이어로 재생됩니다. 이 페이지는 영상을 복제하거나 저장하지 않습니다. 조회수·좋아요·댓글 수는 {data.fetchedAt} 기준이며 유튜브에서 계속 바뀝니다. 임베드가 허용되지 않은 영상은 목록에서 제외합니다(현재 0편).