Customization
Components
UI component library and usage.
Overview
The template includes components from multiple sources:
| Source | Purpose |
|---|---|
| Custom components | Landing page, headers, etc. |
| shadcn/ui | Form inputs, buttons, cards |
| Fumadocs UI | Documentation components |
Component Locations
src/components/
├── ui/ # shadcn/ui components
│ ├── button.tsx
│ ├── input.tsx
│ └── card.tsx
├── landing/ # Landing page sections
├── dashboard/ # Dashboard components
├── pricing/ # Pricing components
└── paywall.tsx # Gated contentAdding shadcn/ui Components
Use the CLI to add components:
bunx shadcn@latest add dialog
bunx shadcn@latest add dropdown-menu
bunx shadcn@latest add toastCommon Components
Button
import { Button } from '@/components/ui/button';
<Button variant="default">Primary</Button>
<Button variant="secondary">Secondary</Button>
<Button variant="outline">Outline</Button>
<Button variant="ghost">Ghost</Button>
<Button variant="destructive">Destructive</Button>Input
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
<div>
<Label htmlFor="email">Email</Label>
<Input id="email" type="email" placeholder="you@example.com" />
</div>Card
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card';
<Card>
<CardHeader>
<CardTitle>Card Title</CardTitle>
</CardHeader>
<CardContent>
Card content goes here.
</CardContent>
</Card>Landing Page Components
Hero Section
import { HeroSection } from '@/components/hero-section';
<HeroSection
title="Your SaaS Product"
subtitle="Brief description of what you offer"
ctaText="Get Started"
ctaHref="/signup"
/>Pricing Cards
import { PricingSection } from '@/components/pricing';
<PricingSection products={stripeProducts} />Creating Custom Components
Follow the project conventions:
interface FeatureCardProps {
title: string;
description: string;
icon: React.ReactNode;
}
export function FeatureCard({ title, description, icon }: FeatureCardProps) {
return (
<div className="p-6 border rounded-lg">
<div className="mb-4">{icon}</div>
<h3 className="text-lg font-semibold">{title}</h3>
<p className="text-muted-foreground">{description}</p>
</div>
);
}Icons
Use Lucide icons:
import { Check, X, ArrowRight } from 'lucide-react';
<Check className="h-4 w-4" />
<X className="h-4 w-4 text-destructive" />
<ArrowRight className="h-4 w-4" />Related
- Theming - Style customization
- Landing Page - Page sections
Was this page helpful?