/** * @file app/(home)/page.tsx * @description 서비스 메인 랜딩 페이지(Server Component) */ import Link from "next/link"; import type { LucideIcon } from "lucide-react"; import { Activity, ArrowRight, ShieldCheck, Sparkles, TrendingUp, Zap, } from "lucide-react"; import { Header } from "@/features/layout/components/header"; import { AUTH_ROUTES } from "@/features/auth/constants"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import ShaderBackground from "@/components/ui/shader-background"; import { createClient } from "@/utils/supabase/server"; interface ValuePoint { value: string; label: string; detail: string; } interface FeatureItem { icon: LucideIcon; eyebrow: string; title: string; description: string; } interface StartStep { step: string; title: string; description: string; } const VALUE_POINTS: ValuePoint[] = [ { value: "3분", label: "초기 세팅 시간", detail: "복잡한 설정 대신 질문 기반으로 빠르게 시작합니다.", }, { value: "24시간", label: "실시간 시장 관제", detail: "자리 비운 시간에도 규칙 기반으로 자동 대응합니다.", }, { value: "0원", label: "가입 시작 비용", detail: "부담 없이 계정 생성 후 내 투자 스타일부터 점검합니다.", }, ]; const FEATURE_ITEMS: FeatureItem[] = [ { icon: ShieldCheck, eyebrow: "Risk Guard", title: "손실 방어를 먼저 설계합니다", description: "진입보다 중요한 것은 방어입니다. 손절 기준과 노출 한도를 먼저 세워 감정 개입을 줄입니다.", }, { icon: TrendingUp, eyebrow: "Data Momentum", title: "데이터로 타점을 좁힙니다", description: "실시간 데이터 흐름을 읽어 조건이 맞을 때만 실행합니다. 초보도 납득 가능한 근거를 확인할 수 있습니다.", }, { icon: Zap, eyebrow: "Auto Execution", title: "기회가 오면 즉시 자동 실행합니다", description: "규칙이 충족되면 지연 없이 주문이 실행됩니다. 잠자는 시간과 업무 시간에도 전략은 멈추지 않습니다.", }, ]; const START_STEPS: StartStep[] = [ { step: "STEP 01", title: "계정 연결", description: "안내에 따라 거래 계정을 안전하게 연결합니다.", }, { step: "STEP 02", title: "성향 선택", description: "공격형·균형형·안정형 중 내 스타일을 고릅니다.", }, { step: "STEP 03", title: "자동 실행 시작", description: "선택한 전략으로 실시간 관제를 바로 시작합니다.", }, ]; /** * 홈 메인 랜딩 페이지 * @returns 랜딩 UI * @see features/layout/components/header.tsx blendWithBackground 모드 헤더를 함께 사용 */ export default async function HomePage() { // [로그인 상태 조회] 사용자 유무에 따라 CTA 링크를 분기합니다. const supabase = await createClient(); const { data: { user }, } = await supabase.auth.getUser(); // [CTA 분기] 로그인 여부에 따라 같은 위치에서 다른 행동으로 자연스럽게 전환합니다. const primaryCtaHref = user ? AUTH_ROUTES.DASHBOARD : AUTH_ROUTES.SIGNUP; const primaryCtaLabel = user ? "대시보드로 전략 실행하기" : "무료로 시작하고 첫 전략 받기"; const secondaryCtaHref = user ? AUTH_ROUTES.DASHBOARD : AUTH_ROUTES.LOGIN; const secondaryCtaLabel = user ? "실시간 상태 확인하기" : "기존 계정으로 로그인"; return (
{/* ========== SHADER BACKGROUND SECTION ========== */}
); }