All 18 Marketing Components — A Complete Guide
Every drop-in marketing component included in MantleKit. Copy-paste examples for heroes, pricing, testimonials, blog cards, and more.
MantleKit ships with 18 production-ready marketing components. Every component is theme-aware, responsive, and accepts data as props — no hardcoded content. This guide covers each one with usage examples.
Hero Sections
Three hero variants for different landing page styles.
HeroCentered
The default hero. Centered headline, subheadline, and CTA buttons.
import { HeroCentered } from "@/components/marketing/hero-centered";
<HeroCentered
eyebrow="Now in Beta"
headline="Ship your SaaS in days, not months"
subheadline="Auth, payments, blog, ecommerce — pre-built and production-ready."
primaryCta={{ label: "Get Started", href: "/pricing" }}
secondaryCta={{ label: "View Demo", href: "/demo" }}
/>HeroSplit
Image on one side, copy on the other. Great for product showcases.
import { HeroSplit } from "@/components/marketing/hero-split";
<HeroSplit
headline="Build faster with MantleKit"
subheadline="Everything you need to launch your next project."
image="/images/hero-screenshot.png"
primaryCta={{ label: "Start Building", href: "/pricing" }}
/>HeroVideo
Centered hero with an embedded video. Supports YouTube and self-hosted.
import { HeroVideo } from "@/components/marketing/hero-video";
<HeroVideo
headline="See MantleKit in action"
subheadline="Watch a 2-minute walkthrough of what you get."
videoUrl="https://youtube.com/embed/your-video-id"
primaryCta={{ label: "Try It Free", href: "/pricing" }}
/>Social Proof
Testimonials
Rotating testimonial carousel with optional avatar images.
import { Testimonials } from "@/components/marketing/testimonials";
<Testimonials
eyebrow="What People Say"
headline="Loved by developers"
testimonials={[
{
quote: "Saved me weeks of setup time.",
author: "Sarah Chen",
role: "Indie Hacker",
avatar: "/images/avatar-sarah-chen.jpg",
},
{
quote: "The theme quality is in a different league.",
author: "Marcus Rivera",
role: "CTO, Rivera Digital",
avatar: "/images/avatar-marcus-rivera.jpg",
},
]}
/>LogoCloud
Trusted-by logo strip. Pass company names and they render as styled text (no image files needed).
import { LogoCloud } from "@/components/marketing/logo-cloud";
<LogoCloud
label="Trusted by teams at"
logos={["Vercel", "Supabase", "Stripe", "Linear", "Notion"]}
/>StatsSection
Key metrics in a clean grid layout.
import { StatsSection } from "@/components/marketing/stats-section";
<StatsSection
eyebrow="By the Numbers"
headline="Built for scale"
stats={[
{ value: "2,400+", label: "Teams using MantleKit" },
{ value: "99.9%", label: "Uptime" },
{ value: "< 1hr", label: "Average setup time" },
]}
/>Features & Content
FeaturesGrid
Icon-driven feature cards in a responsive grid.
import { FeaturesGrid } from "@/components/marketing/features-grid";
import { Shield, CreditCard, Palette } from "lucide-react";
<FeaturesGrid
eyebrow="Features"
headline="Everything you need"
features={[
{
icon: Shield,
title: "Authentication",
description: "Google OAuth, magic links, email/password.",
},
{
icon: CreditCard,
title: "Payments",
description: "Stripe, Lemon Squeezy, or Polar.",
},
{
icon: Palette,
title: "5+ Themes",
description: "Each visually distinct. CSS variable-driven.",
},
]}
/>ComparisonTable
Side-by-side feature comparison between your product and alternatives.
import { ComparisonTable } from "@/components/marketing/comparison-table";
<ComparisonTable
eyebrow="Compare"
headline="Why MantleKit?"
product="MantleKit"
competitors={["DIY", "Other Boilerplates"]}
features={[
{ name: "5+ Themes", values: [true, false, false] },
{ name: "Ecommerce", values: [true, false, "Partial"] },
{ name: "CLI Setup", values: [true, false, false] },
]}
/>TimelineSection
Vertical timeline for roadmaps, changelogs, or company history.
import { TimelineSection } from "@/components/marketing/timeline-section";
<TimelineSection
eyebrow="Roadmap"
headline="What's coming"
items={[
{ date: "Q1 2026", title: "Launch", description: "Public release with 10+ themes." },
{ date: "Q2 2026", title: "Marketplace", description: "Community theme marketplace." },
]}
/>Pricing
PricingTable
Responsive pricing cards with feature lists and CTA buttons.
import { PricingTable } from "@/components/marketing/pricing-table";
<PricingTable
eyebrow="Pricing"
headline="Simple, transparent pricing"
tiers={[
{
name: "Starter",
price: "$79",
description: "Perfect for your first SaaS",
features: ["1 Theme", "Auth + Payments", "MDX Blog"],
cta: { label: "Get Started", href: "/checkout/starter" },
},
{
name: "Pro",
price: "$149",
description: "Everything you need",
features: ["All Themes", "Ecommerce", "All Providers"],
cta: { label: "Get Pro", href: "/checkout/pro" },
featured: true,
},
]}
/>PricingComparison
Detailed feature-by-feature pricing comparison grid.
import { PricingComparison } from "@/components/marketing/pricing-comparison";
<PricingComparison
eyebrow="Compare Plans"
headline="Find your perfect plan"
tiers={["Starter", "Pro", "Agency"]}
categories={[
{
name: "Core",
features: [
{ name: "Themes", values: ["1", "All 10+", "All 10+"] },
{ name: "Payment Providers", values: ["1", "3", "3"] },
],
},
]}
/>Team & Contact
TeamSection
Team member grid with photos, roles, and optional bios.
import { TeamSection } from "@/components/marketing/team-section";
<TeamSection
eyebrow="Team"
headline="Meet the Team"
members={[
{
name: "Sarah Chen",
role: "Lead Engineer",
image: "/images/staff-sarah-chen.jpg",
bio: "Full-stack engineer building developer tools.",
},
]}
/>ContactForm
Ready-to-use contact form with validation.
import { ContactForm } from "@/components/marketing/contact-form";
<ContactForm />The form renders name, email, and message fields. Wire it to your preferred backend (API route, Resend, etc.) by editing the form action.
Blog & Content
BlogCards
Marketing-style blog preview cards with optional images.
import { BlogCards } from "@/components/marketing/blog-cards";
<BlogCards
eyebrow="Blog"
headline="Latest from the team"
posts={[
{
title: "Getting Started with MantleKit",
excerpt: "Everything you need to go from zero to deployed.",
href: "/blog/guides/getting-started",
image: "/images/blog-dashboard.jpg",
tag: "Guide",
date: "Mar 28, 2026",
},
]}
/>Conversion
CtaSection
Full-width call-to-action banner.
import { CtaSection } from "@/components/marketing/cta-section";
<CtaSection
headline="Ready to ship?"
subheadline="Get MantleKit and launch your project this weekend."
primaryCta={{ label: "Get Started", href: "/pricing" }}
secondaryCta={{ label: "View Demo", href: "/demo" }}
/>NewsletterSignup
Email capture form with customisable copy.
import { NewsletterSignup } from "@/components/marketing/newsletter-signup";
<NewsletterSignup
eyebrow="Newsletter"
headline="Stay in the loop"
subheadline="Get updates on new themes, features, and tips."
/>AnnouncementBanner
Dismissible top-of-page banner for announcements and promotions.
import { AnnouncementBanner } from "@/components/marketing/announcement-banner";
<AnnouncementBanner
message="MantleKit v2 is here!"
linkText="See what's new"
linkHref="/blog/guides/whats-new"
/>CheckoutModal
Hosted checkout redirect modal. Integrates with your configured payment provider.
import { CheckoutModal } from "@/components/marketing/checkout-modal";
<CheckoutModal
tier="pro"
price="$149"
features={["All Themes", "Ecommerce", "Priority Support"]}
/>Assembling a Landing Page
Every component is independent — import what you need and compose your page:
import { HeroCentered } from "@/components/marketing/hero-centered";
import { LogoCloud } from "@/components/marketing/logo-cloud";
import { FeaturesGrid } from "@/components/marketing/features-grid";
import { Testimonials } from "@/components/marketing/testimonials";
import { PricingTable } from "@/components/marketing/pricing-table";
import { CtaSection } from "@/components/marketing/cta-section";
export default function LandingPage() {
return (
<>
<HeroCentered {...heroProps} />
<LogoCloud {...logoProps} />
<FeaturesGrid {...featureProps} />
<Testimonials {...testimonialProps} />
<PricingTable {...pricingProps} />
<CtaSection {...ctaProps} />
</>
);
}All components automatically adapt to whichever theme is active in mantle.config.ts. No extra work needed — switch themes and everything updates.
Comments
Sign in to leave a comment.
No comments yet. Be the first!