From 63e71b73cc19ffb1590562a0fbce2682900538e9 Mon Sep 17 00:00:00 2001 From: Haewon Kam Date: Wed, 7 Oct 2026 11:10:24 +0900 Subject: [PATCH 01/22] =?UTF-8?q?feat:=20=EC=A7=84=EB=8B=A8=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=20=EB=B2=84=ED=8A=BC=EC=9D=84=20=EB=AC=B8=EC=9D=98=20?= =?UTF-8?q?=ED=8F=BC=EC=9C=BC=EB=A1=9C=20=EC=97=B0=EA=B2=B0=ED=95=98?= =?UTF-8?q?=EA=B3=A0=20=EC=83=98=ED=94=8C=20=EB=A6=AC=ED=8F=AC=ED=8A=B8=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC=EC=9D=84=20=EB=BA=80=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - "URL 입력으로 시작하기" → "AEO, GEO 진단 요청하기". 문의하기와 같은 ContactModal 을 열어 구글시트 기록·메일 알림으로 받는다 (source: discovery_hero / discovery_cta) - 공개 폼에서 supporter_builds 큐에 자동 빌드를 넣던 경로를 끊는다 - 히어로의 "샘플 리포트 보기" 버튼 제거 (실제 병원 리포트로 연결되던 링크) Co-Authored-By: Claude Opus 5.5 --- src/components/discovery/DiscoveryCta.tsx | 2 +- src/components/discovery/DiscoveryHero.tsx | 13 ++----------- src/pages/DiscoveryLandingPage.tsx | 12 ++++++------ 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/components/discovery/DiscoveryCta.tsx b/src/components/discovery/DiscoveryCta.tsx index 477132d..f17e245 100644 --- a/src/components/discovery/DiscoveryCta.tsx +++ b/src/components/discovery/DiscoveryCta.tsx @@ -32,7 +32,7 @@ export default function DiscoveryCta({ criteriaCount, onStart }: DiscoveryCtaPro onClick={onStart} className="on-light inline-flex items-center h-[52px] px-[30px] bg-white rounded-full text-base font-bold text-primary-900 hover:bg-slate-100 transition-colors" > - URL 입력으로 시작하기 + AEO, GEO 진단 요청하기 void; } export default function DiscoveryHero({ axes, clinicName, - sampleReportPath, criteriaCount, onStart, }: DiscoveryHeroProps) { @@ -86,15 +83,9 @@ export default function DiscoveryHero({ onClick={onStart} className="inline-flex items-center justify-center gap-2 px-10 py-4 text-lg font-medium text-white rounded-full shadow-xl bg-gradient-to-r from-[#4F1DA1] to-[#021341] hover:opacity-90 transition-opacity" > - URL 입력으로 시작하기 + AEO, GEO 진단 요청하기 - - 샘플 리포트 보기 - {/* ABMR loop + AI answer mock */} diff --git a/src/pages/DiscoveryLandingPage.tsx b/src/pages/DiscoveryLandingPage.tsx index 736a1c4..f881c69 100644 --- a/src/pages/DiscoveryLandingPage.tsx +++ b/src/pages/DiscoveryLandingPage.tsx @@ -20,10 +20,11 @@ import SampleReport from '../components/discovery/SampleReport'; import Roadmap from '../components/discovery/Roadmap'; import HonestyStrip from '../components/discovery/HonestyStrip'; import DiscoveryCta from '../components/discovery/DiscoveryCta'; -import DiscoveryLeadModal from '../components/discovery/DiscoveryLeadModal'; +import ContactModal from '../components/ContactModal'; export default function DiscoveryLandingPage() { - const [leadOpen, setLeadOpen] = useState(false); + // 진단 요청은 문의하기와 같은 폼(구글시트 기록 + 메일 알림)으로 받는다. source 로 어느 버튼에서 왔는지 남긴다. + const [leadSource, setLeadSource] = useState(null); const result = DISCOVERY_VIEWCLINIC; const overall = useMemo(() => scoreDiscovery(AEO_GEO_RUBRIC, result), [result]); const overallV2 = useMemo(() => scoreDiscoveryV2(AEO_GEO_RUBRIC_V2, result), [result]); @@ -47,9 +48,8 @@ export default function DiscoveryLandingPage() { setLeadOpen(true)} + onStart={() => setLeadSource('discovery_hero')} /> @@ -60,8 +60,8 @@ export default function DiscoveryLandingPage() { unverifiedCount={unverifiedCount} /> - setLeadOpen(true)} /> - setLeadOpen(false)} /> + setLeadSource('discovery_cta')} /> + setLeadSource(null)} source={leadSource ?? 'discovery'} /> ); } From f03c6a5b908990a7f51339ec1da97dc16e094506 Mon Sep 17 00:00:00 2001 From: Haewon Kam Date: Wed, 7 Oct 2026 11:23:41 +0900 Subject: [PATCH 02/22] =?UTF-8?q?feat:=20webforai.kr=20=EA=B3=B5=EA=B0=9C?= =?UTF-8?q?=20=EC=A0=84=20=EC=A0=95=EB=A6=AC=20(=EB=B9=84=EC=8B=9D?= =?UTF-8?q?=EB=B3=84=20=EC=83=98=ED=94=8C=C2=B7=EC=8B=A4=EC=A0=9C=20?= =?UTF-8?q?=EB=A6=AC=ED=8F=AC=ED=8A=B8=20=EB=B9=84=EA=B3=B5=EA=B0=9C=C2=B7?= =?UTF-8?q?=EC=95=BD=EA=B4=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 랜딩 샘플 리포트·AI 답변 예시·문의 서식 예시를 가상 A성형외과로 바꾼다 (discovery_sample, 고정 시드 무작위 판정) - VITE_SITE=discovery 배포는 랜딩·요금·로그인·약관만 연다. 실제 병원 진단 결과와 내부 화면 경로는 홈으로 돌린다 - src/data·src/services 를 부수효과 없는 모듈로 표시해 쓰지 않는 실제 병원 목업이 공개 번들에서 빠지게 한다 - 공개 배포 번들에 GEMINI_API_KEY 를 넣지 않는다 - 헤더 Product·Use Cases 는 공개 배포에서 숨기고, 푸터에 개인정보처리방침·이용약관 페이지를 연결한다 - 기준표 설명의 실제 병원 예시 문구를 일반 예시로 바꾼다 Co-Authored-By: Claude Opus 5.5 --- src/components/ContactModal.tsx | 2 +- src/components/Footer.tsx | 4 +- src/components/LegalLayout.tsx | 61 +++++++++++ src/components/Navbar.tsx | 18 ++-- src/components/discovery/AiAnswerMock.tsx | 8 +- src/components/discovery/SampleReport.tsx | 14 +-- src/data/aeoGeoRubric.ts | 2 +- src/data/discovery_sample.ts | 61 +++++++++++ src/lib/site.ts | 6 ++ src/main.tsx | 68 +++++++----- src/pages/DiscoveryLandingPage.tsx | 5 +- src/pages/PrivacyPage.tsx | 122 ++++++++++++++++++++++ src/pages/TermsPage.tsx | 109 +++++++++++++++++++ vite.config.ts | 12 ++- 14 files changed, 442 insertions(+), 50 deletions(-) create mode 100644 src/components/LegalLayout.tsx create mode 100644 src/data/discovery_sample.ts create mode 100644 src/lib/site.ts create mode 100644 src/pages/PrivacyPage.tsx create mode 100644 src/pages/TermsPage.tsx diff --git a/src/components/ContactModal.tsx b/src/components/ContactModal.tsx index 2da9efe..22e1634 100644 --- a/src/components/ContactModal.tsx +++ b/src/components/ContactModal.tsx @@ -200,7 +200,7 @@ export default function ContactModal({ open, onClose, source }: ContactModalProp type="text" value={company} onChange={(e) => setCompany(e.target.value)} - placeholder="예: 뷰성형외과" + placeholder="예: OO성형외과" className={`${INPUT_CLASS} mb-4`} /> diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 1a2ed85..3e3dd03 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -35,8 +35,8 @@ export default function Footer() { Infinite Marketing for Premium Medical Business & Marketing Agency
- Privacy Policy - Terms of Service + 개인정보처리방침 + 이용약관
)} - - {/* 하단 문의하기 */} -
-

계약을 원하시나요?

- - 문의하기 → - -
); From e71e8816eead94b4c065ba7f3d6f9a3f47208622 Mon Sep 17 00:00:00 2001 From: Haewon Kam Date: Wed, 7 Oct 2026 15:35:57 +0900 Subject: [PATCH 21/22] =?UTF-8?q?fix:=20=EB=9E=9C=EB=94=A9=20=ED=95=98?= =?UTF-8?q?=EB=8B=A8=20CTA=20=EC=98=86=EC=9D=98=20mailto=20=EB=A7=81?= =?UTF-8?q?=ED=81=AC=EB=A5=BC=20=EB=BA=80=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 메일 앱이 없으면 동작하지 않고, 옆의 진단 요청 버튼이 같은 문의 서식을 연다. Co-Authored-By: Claude Opus 5.5 --- src/components/discovery/DiscoveryCta.tsx | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/components/discovery/DiscoveryCta.tsx b/src/components/discovery/DiscoveryCta.tsx index 1503f87..bd5b142 100644 --- a/src/components/discovery/DiscoveryCta.tsx +++ b/src/components/discovery/DiscoveryCta.tsx @@ -1,8 +1,7 @@ /** - * 최종 CTA (다크). 연락처는 lib/contact.ts 의 sales@o2o.kr 단일 채널 (허위 연락처 금지). + * 최종 CTA (다크). 문의는 진단 요청 버튼이 여는 문의 서식으로 받는다. mailto 링크는 메일 앱이 없으면 동작하지 않아 두지 않는다. */ import { motion } from 'motion/react'; -import { buildDiscoveryMailto, DISCOVERY_CONTACT_EMAIL } from './discoveryContact'; interface DiscoveryCtaProps { criteriaCount: number; @@ -34,12 +33,6 @@ export default function DiscoveryCta({ criteriaCount, onStart }: DiscoveryCtaPro > AEO, GEO 진단 요청하기 - - {DISCOVERY_CONTACT_EMAIL} - From b91fdf1a6af2086bcf652690a79a2f77dc43b38e Mon Sep 17 00:00:00 2001 From: Haewon Kam Date: Wed, 7 Oct 2026 15:36:39 +0900 Subject: [PATCH 22/22] =?UTF-8?q?docs:=20DiscoveryCta=20onStart=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D=EC=9D=84=20=EC=8B=A4=EC=A0=9C=20=EB=8F=99?= =?UTF-8?q?=EC=9E=91=EC=97=90=20=EB=A7=9E=EC=B6=98=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- src/components/discovery/DiscoveryCta.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/discovery/DiscoveryCta.tsx b/src/components/discovery/DiscoveryCta.tsx index bd5b142..ccc24ac 100644 --- a/src/components/discovery/DiscoveryCta.tsx +++ b/src/components/discovery/DiscoveryCta.tsx @@ -5,7 +5,7 @@ import { motion } from 'motion/react'; interface DiscoveryCtaProps { criteriaCount: number; - /** CTA 클릭 → URL 입력 신청 모달 열기 */ + /** CTA 클릭 → 진단 요청(문의 서식) 열기 */ onStart: () => void; }