Landing Page Example
모던 랜딩 페이지 구현 예제
개요
Foundation 컴포넌트를 활용한 반응형 랜딩 페이지 예제입니다.
주요 특징
- ✅ Hero Section with CTA
- ✅ Feature Grid
- ✅ Testimonials
- ✅ FAQ Section
- ✅ 완전 반응형
전체 코드
import { Button } from "@vortex/ui-foundation"
import { Container } from "@/components/ui/container"
import {
Card,
CardHeader,
CardTitle,
CardDescription,
CardContent,
} from "@/components/ui/card"
import { Badge } from "@vortex/ui-foundation"
export default function LandingPage() {
return (
<div className="min-h-screen">
{/* Hero Section */}
<section className="py-20 bg-linear-to-b from-background to-muted/50">
<Container size="xl">
<div className="text-center space-y-6">
<Badge>New Release v2.0</Badge>
<h1 className="text-5xl md:text-6xl font-bold tracking-tight">
Build Faster with
<span className="text-primary"> Vortex UI</span>
</h1>
<p className="text-xl text-muted-foreground max-w-2xl mx-auto">
A modern component library for React applications. Built with
TypeScript, Tailwind CSS, and Radix UI.
</p>
<div className="flex gap-4 justify-center flex-wrap">
<Button size="lg">Get Started</Button>
<Button size="lg" variant="outline">
View Components
</Button>
</div>
</div>
</Container>
</section>
{/* Features Section */}
<section className="py-20">
<Container size="xl">
<div className="text-center mb-12">
<h2 className="text-3xl font-bold mb-4">Key Features</h2>
<p className="text-muted-foreground">
Everything you need to build modern web applications
</p>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<Card>
<CardHeader>
<CardTitle>⚡ Fast Development</CardTitle>
<CardDescription>
Pre-built components speed up your development
</CardDescription>
</CardHeader>
<CardContent>
<p className="text-sm text-muted-foreground">
Copy-paste components into your project and customize them to
match your design requirements.
</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>♿ Accessible</CardTitle>
<CardDescription>
WCAG 2.1 AA compliant by default
</CardDescription>
</CardHeader>
<CardContent>
<p className="text-sm text-muted-foreground">
Built with accessibility in mind. Screen reader support,
keyboard navigation, and proper ARIA attributes.
</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>🎨 Customizable</CardTitle>
<CardDescription>
Tailwind CSS for easy customization
</CardDescription>
</CardHeader>
<CardContent>
<p className="text-sm text-muted-foreground">
Use Tailwind CSS utilities to customize components or override
with your own styles.
</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>📱 Responsive</CardTitle>
<CardDescription>
Mobile-first responsive design
</CardDescription>
</CardHeader>
<CardContent>
<p className="text-sm text-muted-foreground">
All components are fully responsive and work great on mobile,
tablet, and desktop.
</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>🔧 TypeScript</CardTitle>
<CardDescription>Fully typed with TypeScript</CardDescription>
</CardHeader>
<CardContent>
<p className="text-sm text-muted-foreground">
Get IntelliSense and type safety with complete TypeScript
definitions.
</p>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>🌙 Dark Mode</CardTitle>
<CardDescription>Built-in dark mode support</CardDescription>
</CardHeader>
<CardContent>
<p className="text-sm text-muted-foreground">
Toggle between light and dark themes with a single prop. CSS
variables make it easy.
</p>
</CardContent>
</Card>
</div>
</Container>
</section>
{/* Stats Section */}
<section className="py-20 bg-muted/50">
<Container size="xl">
<div className="grid grid-cols-2 md:grid-cols-4 gap-8 text-center">
<div>
<div className="text-4xl font-bold text-primary mb-2">50+</div>
<div className="text-muted-foreground">Components</div>
</div>
<div>
<div className="text-4xl font-bold text-primary mb-2">100%</div>
<div className="text-muted-foreground">TypeScript</div>
</div>
<div>
<div className="text-4xl font-bold text-primary mb-2">10K+</div>
<div className="text-muted-foreground">Downloads</div>
</div>
<div>
<div className="text-4xl font-bold text-primary mb-2">5★</div>
<div className="text-muted-foreground">Rating</div>
</div>
</div>
</Container>
</section>
{/* CTA Section */}
<section className="py-20">
<Container size="lg">
<Card className="border-2">
<CardContent className="py-12 text-center">
<h2 className="text-3xl font-bold mb-4">Ready to get started?</h2>
<p className="text-muted-foreground mb-8">
Install Vortex UI and start building your next project today.
</p>
<div className="flex gap-4 justify-center flex-wrap">
<Button size="lg">Get Started</Button>
<Button size="lg" variant="outline">
View Documentation
</Button>
</div>
</CardContent>
</Card>
</Container>
</section>
</div>
)
}컴포넌트 분석
Hero Section
<section className="py-20 bg-linear-to-b from-background to-muted/50">
<Container size="xl">
<div className="text-center space-y-6">
<Badge>New Release v2.0</Badge>
<h1 className="text-5xl md:text-6xl font-bold tracking-tight">
Build Faster with<span className="text-primary"> Vortex UI</span>
</h1>
{/* ... */}
</div>
</Container>
</section>주요 패턴:
- Gradient background
- Centered content
- Badge for announcements
- Large heading with accent color
- CTA button group
Features Grid
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
<Card>
<CardHeader>
<CardTitle>⚡ Fast Development</CardTitle>
<CardDescription>Pre-built components</CardDescription>
</CardHeader>
<CardContent>
<p className="text-sm text-muted-foreground">...</p>
</CardContent>
</Card>
{/* More cards... */}
</div>주요 패턴:
- Responsive grid layout
- Icon + Title + Description
- Consistent card structure
커스터마이징
색상 변경
<h1 className="text-5xl font-bold">
Build Faster with
<span className="text-blue-600"> Vortex UI</span>
</h1>레이아웃 조정
// 더 넓은 컨테이너
<Container size="full" className="max-w-screen-2xl">
// 더 많은 간격
<section className="py-32">CTA 버튼 변형
<Button size="lg" className="px-8">
Get Started Free
</Button>
<Button size="lg" variant="ghost">
Watch Demo
</Button>반응형 고려사항
// 모바일: 1열, 태블릿: 2열, 데스크톱: 3열
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
// 텍스트 크기 조정
<h1 className="text-4xl md:text-5xl lg:text-6xl">
// 버튼 래핑
<div className="flex gap-4 justify-center flex-wrap">성능 최적화
이미지 최적화
import Image from "next/image"
;<Image src="/hero.jpg" alt="Hero" width={1200} height={600} priority />코드 스플리팅
import dynamic from "next/dynamic"
const Testimonials = dynamic(() => import("./Testimonials"))다음 단계
Last updated on