import type {ReactNode} from 'react'; import {Link, NavLink} from 'react-router'; import {cn} from '@/lib/utils'; import {useAuthStore} from '@/stores/auth'; /** * 로그인 전 화면(랜딩·요금·쇼케이스)의 껍데기. * * ★ AppShell 과 나눠 둔 이유: 저쪽은 **사이드바가 있는 작업 화면**이다. 아직 아무것도 만들지 * 않은 사람에게 사이드바를 보여 주면 비어 있는 메뉴만 남는다(b07ade2 가 온보딩에서 사이드바를 * 뺀 것과 같은 판단). * * ★ 메뉴는 셋을 넘기지 않는다. 소상공인 대상 화면에서 드롭다운은 "못 찾는 메뉴"가 된다. */ const NAV = [ {to: '/showcase', label: '이렇게 나옵니다'}, {to: '/pricing', label: '요금'}, ]; export function MarketingShell({ children, showAuthCta = true, }: { children: ReactNode; showAuthCta?: boolean; }) { const user = useAuthStore((s) => s.user); return (
Web4Ai
{/* ★ 이미 사이트를 가진 사장님에게 [로그인] 을 다시 보여주지 않는다 — 갈 곳은 내 사이트다. */} {/* ★ [무료로 만들기] 를 뺐다 (2026-09-04, 사장님 지시) 히어로의 큰 입력 카드가 이미 그 자리다 — 시작하는 문이 한 화면에 둘이면 어느 쪽이 진짜인지 고르게 만든다. 헤더는 로그인만 받는다. */} {showAuthCta && (user ? ( 내 사이트 ) : ( 로그인 ))}
{children}
); } /** 랜딩의 한 켜. 섹션마다 여백을 손으로 적지 않게 한 곳에 모은다. */ export function Section({ children, className, muted = false, }: { children: ReactNode; className?: string; muted?: boolean; }) { return (
{children}
); } export function SectionHead({eyebrow, title, description}: {eyebrow?: string; title: string; description?: string}) { return (
{eyebrow &&

{eyebrow}

}

{title}

{description &&

{description}

}
); }