Launching Soon
Build products people love
The simplest way to create, launch, and grow your business. No complexity, just results.
Trusted by leading companies
Stripe
Vercel
Linear
Notion
Figma
Features
- ✅ Centered layout - Perfect vertical and horizontal centering
- ✅ Generous whitespace - Breathing room around all elements
- ✅ Clean typography - Large, readable text with proper hierarchy
- ✅ Optional badge - Subtle top badge for announcements
- ✅ Dual CTAs - Primary (dark) and secondary (outlined)
- ✅ Company logos - Social proof section at bottom
- ✅ Hover effects - Smooth transitions on all interactive elements
- ✅ Responsive - Scales beautifully on all devices
- ✅ Light theme - White background for clean aesthetic
- ✅ TypeScript support - Full type safety
Installation
Copy and paste the following code into your project.
import { ArrowRight } from "lucide-react";
interface Company {
name: string;
logo?: string;
}
interface HeroMinimalCenteredProps {
badge?: string;
title: string;
description: string;
primaryCTA?: {
text: string;
href: string;
};
secondaryCTA?: {
text: string;
href: string;
};
companies?: Company[];
className?: string;
}
export function HeroMinimalCentered({
badge,
title,
description,
primaryCTA,
secondaryCTA,
companies,
className = "",
}: HeroMinimalCenteredProps) {
return (
<section
className={`flex min-h-screen items-center justify-center bg-white px-4 py-20 dark:bg-zinc-950 ${className}`}
>
<div className="mx-auto w-full max-w-4xl text-center">
{badge && (
<div className="mb-8 inline-flex items-center rounded-full border border-zinc-200 bg-zinc-50 px-4 py-2 text-sm font-medium text-zinc-700 dark:border-zinc-800 dark:bg-zinc-900 dark:text-zinc-300">
{badge}
</div>
)}
<h1 className="mb-6 text-5xl font-bold leading-tight tracking-tight text-zinc-900 dark:text-white sm:text-6xl lg:text-7xl">
{title}
</h1>
<p className="mx-auto mb-12 max-w-2xl text-xl leading-relaxed text-zinc-600 dark:text-zinc-400 sm:text-2xl">
{description}
</p>
{(primaryCTA || secondaryCTA) && (
<div className="mb-16 flex flex-col items-center justify-center gap-4 sm:flex-row">
{primaryCTA && (
<a
href={primaryCTA.href}
className="group inline-flex items-center gap-2 rounded-full bg-zinc-900 px-8 py-4 text-lg font-semibold text-white transition-all hover:bg-zinc-800 hover:gap-3 dark:bg-white dark:text-zinc-900 dark:hover:bg-zinc-100"
>
{primaryCTA.text}
<ArrowRight className="h-5 w-5 transition-all" />
</a>
)}
{secondaryCTA && (
<a
href={secondaryCTA.href}
className="inline-flex items-center gap-2 rounded-full border-2 border-zinc-200 bg-white px-8 py-4 text-lg font-semibold text-zinc-900 transition-all hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-950 dark:text-white dark:hover:border-zinc-600 dark:hover:bg-zinc-900"
>
{secondaryCTA.text}
</a>
)}
</div>
)}
{companies && companies.length > 0 && (
<div className="border-t border-zinc-200 pt-12 dark:border-zinc-800">
<p className="mb-8 text-sm font-medium uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
Trusted by leading companies
</p>
<div className="flex flex-wrap items-center justify-center gap-8 sm:gap-12">
{companies.map((company, index) => (
<div
key={index}
className="flex items-center justify-center text-zinc-400 transition-colors hover:text-zinc-600 dark:text-zinc-600 dark:hover:text-zinc-400"
>
{company.logo ? (
<img
src={company.logo}
alt={company.name}
className="h-8 opacity-60 grayscale transition-all hover:opacity-100 hover:grayscale-0"
/>
) : (
<span className="text-2xl font-bold">{company.name}</span>
)}
</div>
))}
</div>
</div>
)}
</div>
</section>
);
}Usage
Basic Usage
import HeroMinimalCentered from "@/components/ui/hero-minimal-centered";
export default function Page() {
return (
<HeroMinimalCentered
title="Build products people love"
description="The simplest way to create and grow your business"
primaryCTA={{
text: "Get Started",
href: "/signup",
}}
/>
);
}With Badge
<HeroMinimalCentered
badge="Launching Soon"
title="Your Title"
description="Your description"
primaryCTA={{
text: "Get Started",
href: "#",
}}
/>With Dual CTAs
<HeroMinimalCentered
title="Your Title"
description="Your description"
primaryCTA={{
text: "Get Started",
href: "#",
}}
secondaryCTA={{
text: "Learn More",
href: "#",
}}
/>With Company Logos
<HeroMinimalCentered
title="Your Title"
description="Your description"
primaryCTA={{
text: "Get Started",
href: "#",
}}
companies={[
{ name: "Stripe" },
{ name: "Vercel" },
{ name: "Linear" },
{ name: "Notion" },
{ name: "Figma" },
]}
/>With Logo Images
<HeroMinimalCentered
title="Your Title"
description="Your description"
primaryCTA={{
text: "Get Started",
href: "#",
}}
companies={[
{ name: "Company 1", logo: "/logos/company1.svg" },
{ name: "Company 2", logo: "/logos/company2.svg" },
]}
/>Props
HeroMinimalCenteredProps
| Prop | Type | Default | Description |
|---|---|---|---|
title | string | Required | Main heading text |
description | string | Required | Subheading text |
badge | string | undefined | Optional top badge |
primaryCTA | { text: string; href: string } | undefined | Primary button |
secondaryCTA | { text: string; href: string } | undefined | Secondary button |
companies | Company[] | undefined | Company logos/names |
className | string | "" | Additional CSS classes |
Company
| Prop | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Company name |
logo | string | No | Logo image URL |
TypeScript Interface
interface Company {
name: string;
logo?: string;
}
interface HeroMinimalCenteredProps {
badge?: string;
title: string;
description: string;
primaryCTA?: {
text: string;
href: string;
};
secondaryCTA?: {
text: string;
href: string;
};
companies?: Company[];
className?: string;
}Use Cases
Perfect for:
- Product launches
- Landing pages
- Portfolio sites
- Agency homepages
- SaaS products
- Minimalist brands
- Premium products
- Professional services
Customization
Dark Mode
<HeroMinimalCentered
className="bg-zinc-950"
// Update text colors in component
/>Add Gradient Text
<h1 className="bg-gradient-to-r from-zinc-900 to-zinc-600 bg-clip-text text-transparent">
{title}
</h1>Add Subtle Animation
<div className="animate-fade-in">
<h1>{title}</h1>
</div>Custom Button Colors
// Replace bg-zinc-900 with your brand color
className="bg-blue-600 hover:bg-blue-700"Accessibility
- Semantic HTML - Proper heading hierarchy
- Alt text - Required for company logos
- Contrast - WCAG AA compliant
- Focus states - Visible keyboard focus
- Touch targets - Minimum 44x44px
Performance
- No images - Fast loading (unless company logos)
- Minimal CSS - Small bundle size
- No animations - Smooth 60fps
- Responsive images - Optimized logo sizes