/** * PricingPage — INFINITH Product 1.0 가격 안내 페이지. * * 구조 (plan 섹션 15-A): * 1. Hero (타이틀 + 한 줄 태그라인) * 2. Billing Toggle (월간 / 연간 20% 할인) * 3. 3 Tier Cards (INSIGHT / INTELLIGENCE⭐ / INTELLIGENCE+) * 4. Feature Comparison Table ← Step 3에서 구현 * 5. Free Trial 강조 박스 * 6. Launch Promotion 배너 * 7. FAQ ← Step 3에서 구현 * 8. Enterprise Contact CTA * * 유입 추적: * - `?from=header | footer | cta | hero` 파라미터 읽어 console.log * (analytics 연동은 Supabase `analytics_events` 테이블 도입 후 후속 작업) * * 핵심 데이터 소스: * - src/data/pricingTiers.ts ← (이 파일 내부에 임시 정의, Step 3에서 분리 고려) */ import React, { useEffect, useState } from 'react'; import { useSearchParams } from 'react-router'; import { motion } from 'motion/react'; import { ArrowRight } from 'lucide-react'; import { CheckFilled, RocketFilled, BoltFilled, PrismFilled, } from '../components/icons/FilledIcons'; import Badge from '../components/Badge'; import FeatureComparisonTable from '../components/pricing/FeatureComparisonTable'; import FAQ from '../components/pricing/FAQ'; import { buildContactMailto } from '../lib/contact'; // ─── Tier 데이터 정의 ────────────────────────────────────────────── // plan 섹션 2·5 기준. Feature Comparison Table(Step 3)에서도 재사용 예정. type TierId = 'insight' | 'intelligence' | 'intelligence-plus'; interface Tier { id: TierId; name: string; tagline: string; monthlyKRW: number; // 원화 (월 단가 · 계약 기준) annualMonthlyKRW: number; // 원화 (연 계약 시 월 환산) annualTotalKRW: number; // 원화 (연 계약 총액) isPopular?: boolean; /** 모든 Tier는 계약 기반 영업 — 온라인 결제 없음. 상담 문의 mailto로 통일. */ ctaLabel: string; bullets: string[]; footnote?: string; } const tiers: Tier[] = [ { id: 'insight', name: 'INSIGHT', tagline: '매월 1번, 병원의 온라인 좌표를 점검하세요', monthlyKRW: 90_000, annualMonthlyKRW: 72_000, annualTotalKRW: 864_000, ctaLabel: '상담 문의', bullets: [ '월 1회 분석 리포트', '전 채널 분석 (홈페이지 · 강남언니 · YouTube · Instagram · Facebook · 네이버 플레이스 · 블로그)', '4주 콘텐츠 플랜', '경쟁사 추적 1개', 'PDF 내보내기', ], footnote: '신규 개업의 · 1인 의원 추천', }, { id: 'intelligence', name: 'INTELLIGENCE', tagline: '경쟁사가 지금 무엇을 바꾸는지, 월 2번 확인하세요', monthlyKRW: 290_000, annualMonthlyKRW: 232_000, annualTotalKRW: 2_784_000, isPopular: true, ctaLabel: '상담 문의', bullets: [ '월 4회 분석 리포트', '8주 콘텐츠 캘린더 + 주간 KPI 기반 조정', 'Vision AI (의료진·슬로건·인증 자동 추출)', '경쟁사 추적 3개 · 주간 변동 알림', 'KPI 대시보드 (3/12개월 목표)', '브랜드 가이드 + 콘텐츠 필러 5종', '스크린샷 증거 기반 심층 리포트', ], footnote: '중형 성형외과 · 메인 타겟', }, { id: 'intelligence-plus', name: 'INTELLIGENCE+', tagline: '매일 변하는 시장에 즉시 대응하세요', monthlyKRW: 990_000, annualMonthlyKRW: 792_000, annualTotalKRW: 9_504_000, ctaLabel: '상담 문의', bullets: [ '월 10회 분석 리포트', '12개월 로드맵 + 월간 전략 리뷰', '최대 3개 분원 통합 대시보드', '경쟁사 추적 5개 · 일간 변동 모니터링', '브랜드 가이드 + 콘텐츠 필러 10종', '커스텀 리포트 템플릿 (병원 CI 반영)', '신규 기능 베타 우선 접근', ], footnote: '대형 · 멀티 분원 병원', }, ]; // ─── 가격 포맷터 ────────────────────────────────────────────────── // 29_0000원 → "29만원" 포맷. 1000원 단위까지는 표기 안 함 (B2B 가격은 만원 단위) function formatKRW(amount: number): string { const man = amount / 10_000; // 소수점 없는 정수 표기 우선. 999,999 아래면 만원, 이상이면 억 단위까지 확장 가능. if (Number.isInteger(man)) return `${man.toLocaleString('ko-KR')}만원`; return `${man.toLocaleString('ko-KR', { maximumFractionDigits: 1 })}만원`; } // ─── Billing Toggle 컴포넌트 ────────────────────────────────────── interface BillingToggleProps { value: 'monthly' | 'annual'; onChange: (v: 'monthly' | 'annual') => void; } const BillingToggle: React.FC = ({ value, onChange }) => { return (
); }; // ─── Tier Card 컴포넌트 ────────────────────────────────────────── interface TierCardProps { tier: Tier; billing: 'monthly' | 'annual'; onSelect: (tier: Tier) => void; } const TierCard: React.FC = ({ tier, billing, onSelect }) => { const price = billing === 'monthly' ? tier.monthlyKRW : tier.annualMonthlyKRW; const isAnnual = billing === 'annual'; return ( {/* Popular 배지 */} {tier.isPopular && (
)} {/* 이름 + 태그라인 */}

{tier.name}

{tier.tagline}

{/* 가격 */}
{formatKRW(price)} /월
{isAnnual && (

연 {formatKRW(tier.annualTotalKRW)} · 20% 절약

)} {!isAnnual && (

연 결제 시 월 {formatKRW(tier.annualMonthlyKRW)}

)}
{/* CTA — DS Primary: gradient + rounded-full (pill) */} {/* Bullet points — DS FilledIcon(CheckFilled) */}
    {tier.bullets.map((bullet, i) => (
  • {bullet}
  • ))}
{/* Footnote */} {tier.footnote && (

{tier.footnote}

)}
); }; // ─── 먼저 문의하기 강조 카드 ───────────────────────────────────── // DS 레퍼런스: CTA 카드 배경에 3-stop warm gradient (Section 2.2) // + 상단 filled 아이콘 squircle + Primary/Secondary pill 버튼 병렬 // // PART III 피봇: "첫 리포트 무료 / 카드 등록 불필요" 표현 삭제 → 계약 기반 영업으로 일원화. function ContactFirstBox() { return ( {/* 상단 아이콘 squircle — DS filled icon 규칙 */}

먼저 대화부터 시작하세요

계약 전에 병원 규모·마케팅 현황을 공유해 주시면, 전담 담당자가 적합한 플랜과 리포트 샘플을 정리해 회신 드립니다.

{/* DS 듀얼 버튼: Primary + Secondary — 모두 rounded-full (pill) */}
상담 문의하기 플랜 비교 보기
); } // ─── Launch Promotion 배너 ─────────────────────────────────────── // DS: 🎁 이모지 금지(Principle: No Emoji) → RocketFilled 대체 // dark primary gradient card + Secondary pill 버튼 function PromotionBanner() { return ( {/* Filled icon squircle — 🎁 대체 */}

런칭 프로모션 · 선착순 20병원

INTELLIGENCE · INTELLIGENCE+ 3개월 30% 할인

혜택 문의
); } // ─── Enterprise Contact CTA ────────────────────────────────────── // DS: outlined 패턴은 DS에 없음 → Primary pill(gradient + rounded-full) function EnterpriseContact() { return ( // outer: w-full로 섹션 정렬 / inner 콘텐츠만 max-w-2xl로 가독성 유지

더 많은 분원, 커스텀 플랜이 필요하신가요?

4개 이상 분원을 운영하시거나 데이터 커스터마이징이 필요한 경우, 전담 담당자가 상담해 드립니다.

커스텀 플랜 문의
); } // ─── PricingPage 본체 ──────────────────────────────────────────── export default function PricingPage() { const [searchParams] = useSearchParams(); const [billing, setBilling] = useState<'monthly' | 'annual'>('annual'); // 유입 소스 추적 — 추후 Supabase `analytics_events` 테이블로 전송 useEffect(() => { const from = searchParams.get('from'); if (from) { // TODO(analytics): Supabase analytics_events insert console.info(`[pricing] referred from: ${from}`); } }, [searchParams]); /** * Tier 선택 핸들러 — 계약 기반 영업. * 온라인 결제 없이 모든 Tier를 상담 문의 mailto로 통일. * Subject에 Tier 이름을 넣어 영업팀이 유입 경로를 구분. */ const handleTierSelect = (tier: Tier) => { window.location.href = buildContactMailto(`${tier.name} 플랜 상담 문의`); }; return (
{/* Background — 랜딩 Hero와 톤 통일 */}
{/* ── Section 1 · Hero ─────────────────────────── */}
Pricing · 가격 안내

Strategic Planning,
At Your Scale.

병원 규모에 맞는 전략 파트너를 선택하세요. 계약·결제·운영 조건은 상담에서 맞춤 설계됩니다.

{/* ── Section 2 · Billing Toggle ────────────── */}
{/* ── Section 3 · 3 Tier Cards ─────────────────── */}
{tiers.map((tier) => ( ))}
{/* ── Section 4 · Feature Comparison Table ─── */}
{/* ── Section 5 · 먼저 문의하기 강조 ───────────── */} {/* outer max-w-7xl로 Tier Cards 섹션과 동일 정렬 (반응형 자동 축소) */}
{/* ── Section 6 · Launch Promotion ───────────── */}
{/* ── Section 7 · FAQ ─────────────────────────── */}
{/* ── Section 8 · Enterprise Contact ─────────── */}
); }