Docs
Feature Grid 3-Column

Feature Grid 3-Column

A classic 3-column feature grid with gradient icons and smooth animations. Perfect for showcasing 6-9 key features with a balanced, professional layout.

Why Choose Us

Built for modern teams

Everything you need to build, ship, and scale your product. Powerful features that help you move faster.

Lightning Fast

Optimized for speed with edge computing, intelligent caching, and global CDN distribution for instant load times.

Secure by Default

Enterprise-grade security with SOC 2 compliance, end-to-end encryption, and advanced threat protection.

AI-Powered

Leverage cutting-edge AI to automate workflows, boost productivity, and make smarter decisions faster.

Deploy Instantly

Push to production in seconds with zero-downtime deployments, automatic rollbacks, and instant previews.

Global Scale

Serve millions of users worldwide with 99.99% uptime guarantee and automatic scaling infrastructure.

Developer Friendly

Clean APIs, comprehensive documentation, and SDKs for every platform. Built by developers, for developers.

Features

  • 3-column responsive grid - Adapts to 2 columns on tablet, 1 on mobile
  • Gradient icons - Beautiful gradient backgrounds for all icons
  • Smooth animations - Staggered fade-in with 100ms delays
  • Hover effects - Scale, glow, and shadow animations
  • Color variety - 9 unique gradient colors that cycle
  • Optional badge - Add a category badge above headline
  • Optional description - Include a subheading
  • Shadcn components - Built with Card and Badge
  • TypeScript support - Full type safety
  • Production-ready - Premium polish, copy and paste to use

Installation

Copy and paste the following code into your project.

"use client";
 
import { Badge } from "@/components/ui/badge";
import { Card, CardContent } from "@/components/ui/card";
import { LucideIcon } from "lucide-react";
 
interface Feature {
  icon: LucideIcon;
  title: string;
  description: string;
}
 
interface FeatureGrid3ColProps {
  badge?: string;
  headline: string;
  description?: string;
  features: Feature[];
}
 
export function FeatureGrid3Col({
  badge,
  headline,
  description,
  features,
}: FeatureGrid3ColProps) {
  const colors = [
    "from-blue-500 to-cyan-500",
    "from-purple-500 to-pink-500",
    "from-orange-500 to-amber-500",
    "from-green-500 to-emerald-500",
    "from-red-500 to-rose-500",
    "from-indigo-500 to-violet-500",
    "from-yellow-500 to-orange-500",
    "from-teal-500 to-cyan-500",
    "from-fuchsia-500 to-pink-500",
  ];
 
  return (
    <section className="relative overflow-hidden py-24 sm:py-32">
      <div className="absolute inset-0 -z-10">
        <div className="absolute left-1/2 top-0 -z-10 h-[600px] w-[600px] -translate-x-1/2 rounded-full bg-gradient-to-br from-primary/20 via-primary/5 to-transparent blur-3xl" />
        <div className="absolute right-0 top-1/2 -z-10 h-[400px] w-[400px] -translate-y-1/2 rounded-full bg-gradient-to-l from-purple-500/10 to-transparent blur-3xl" />
      </div>
 
      <div className="container mx-auto px-6">
        <div className="mx-auto mb-16 max-w-3xl text-center">
          {badge && (
            <div className="mb-6 inline-flex animate-in fade-in slide-in-from-bottom-3 duration-700">
              <Badge
                variant="outline"
                className="border-primary/20 bg-primary/10 px-4 py-1.5 text-sm font-medium text-primary backdrop-blur-sm"
              >
                <span className="relative mr-2 flex h-2 w-2">
                  <span className="absolute inline-flex h-full w-full animate-ping rounded-full bg-primary opacity-75"></span>
                  <span className="relative inline-flex h-2 w-2 rounded-full bg-primary"></span>
                </span>
                {badge}
              </Badge>
            </div>
          )}
          <h2 className="mb-6 animate-in fade-in slide-in-from-bottom-4 text-4xl font-bold tracking-tight duration-1000 sm:text-5xl md:text-6xl">
            {headline}
          </h2>
          {description && (
            <p className="animate-in fade-in slide-in-from-bottom-5 text-lg leading-relaxed text-muted-foreground duration-1000 sm:text-xl">
              {description}
            </p>
          )}
        </div>
 
        <div className="grid gap-8 sm:grid-cols-2 lg:grid-cols-3">
          {features.map((feature, index) => {
            const Icon = feature.icon;
            const gradientColor = colors[index % colors.length];
 
            return (
              <div
                key={index}
                className="group relative animate-in fade-in slide-in-from-bottom-6 duration-1000"
                style={{ animationDelay: `${index * 100}ms` }}
              >
                <div
                  className={`absolute -inset-0.5 rounded-2xl bg-gradient-to-r ${gradientColor} opacity-0 blur transition-all duration-500 group-hover:opacity-20`}
                />
 
                <Card className="relative h-full border-border/50 bg-card/50 backdrop-blur-sm transition-all duration-300 hover:border-border hover:bg-card hover:shadow-xl">
                  <CardContent className="p-8">
                    <div className="mb-6 inline-flex">
                      <div
                        className={`relative rounded-xl bg-gradient-to-br ${gradientColor} p-4 shadow-lg transition-all duration-300 group-hover:scale-110 group-hover:shadow-xl`}
                      >
                        <Icon className="h-7 w-7 text-white" />
                      </div>
                    </div>
 
                    <h3 className="mb-3 text-2xl font-semibold tracking-tight transition-colors">
                      {feature.title}
                    </h3>
                    <p className="leading-relaxed text-muted-foreground">
                      {feature.description}
                    </p>
 
                    <div className="absolute right-6 top-6 h-10 w-10 opacity-0 transition-opacity duration-300 group-hover:opacity-100">
                      <div
                        className={`h-full w-full rounded-full bg-gradient-to-br ${gradientColor} opacity-20 blur-lg`}
                      />
                    </div>
                  </CardContent>
                </Card>
              </div>
            );
          })}
        </div>
      </div>
    </section>
  );
}

Update the import paths to match your project setup.

Usage

Basic Usage

import FeatureGrid3Col from "@/components/ui/feature-grid-3col";
import { Zap, Shield, Sparkles } from "lucide-react";
 
export default function FeaturesPage() {
  return (
    <FeatureGrid3Col
      headline="Why choose us"
      features={[
        {
          icon: Zap,
          title: "Lightning Fast",
          description: "Optimized for speed and performance.",
        },
        {
          icon: Shield,
          title: "Secure",
          description: "Enterprise-grade security built-in.",
        },
        {
          icon: Sparkles,
          title: "AI-Powered",
          description: "Leverage cutting-edge AI technology.",
        },
      ]}
    />
  );
}

With Badge and Description

<FeatureGrid3Col
  badge="Features"
  headline="Everything you need to succeed"
  description="Powerful features to help you build, ship, and scale your product."
  features={[
    // ... your features
  ]}
/>

Full Example with 9 Features

import FeatureGrid3Col from "@/components/ui/feature-grid-3col";
import {
  Zap,
  Shield,
  Sparkles,
  Rocket,
  Lock,
  Globe,
  Code,
  Users,
  Database,
} from "lucide-react";
 
export default function FeaturesPage() {
  return (
    <FeatureGrid3Col
      badge="Platform Features"
      headline="Built for modern teams"
      description="Everything you need to build, ship, and scale your product."
      features={[
        {
          icon: Zap,
          title: "Lightning Fast",
          description:
            "Optimized for speed with edge computing and global CDN.",
        },
        {
          icon: Shield,
          title: "Secure by Default",
          description: "Enterprise-grade security with SOC 2 compliance.",
        },
        {
          icon: Sparkles,
          title: "AI-Powered",
          description: "Leverage AI to automate workflows and boost productivity.",
        },
        {
          icon: Rocket,
          title: "Deploy Instantly",
          description: "Push to production in seconds with zero downtime.",
        },
        {
          icon: Globe,
          title: "Global Scale",
          description: "Serve millions worldwide with 99.99% uptime.",
        },
        {
          icon: Code,
          title: "Developer Friendly",
          description: "Clean APIs and comprehensive documentation.",
        },
        {
          icon: Users,
          title: "Team Collaboration",
          description: "Real-time collaboration with role-based access.",
        },
        {
          icon: Lock,
          title: "Privacy First",
          description: "Your data stays yours. GDPR compliant.",
        },
        {
          icon: Database,
          title: "Reliable Storage",
          description: "Distributed database with automatic backups.",
        },
      ]}
    />
  );
}

Props

FeatureGrid3ColProps

PropTypeDefaultDescription
badgestringundefinedOptional badge text above headline
headlinestringRequiredMain section headline
descriptionstringundefinedOptional description below headline
featuresFeature[]RequiredArray of feature objects

Feature Object

PropTypeDescription
iconLucideIconIcon component from lucide-react
titlestringFeature title
descriptionstringFeature description

TypeScript Interface

import { LucideIcon } from "lucide-react";
 
interface Feature {
  icon: LucideIcon;
  title: string;
  description: string;
}
 
interface FeatureGrid3ColProps {
  badge?: string;
  headline: string;
  description?: string;
  features: Feature[];
}

Customization

Change Grid Columns

Adjust the grid layout:

{/* 2 columns on desktop */}
<div className="grid gap-8 sm:grid-cols-2">
 
{/* 4 columns on desktop */}
<div className="grid gap-8 sm:grid-cols-2 lg:grid-cols-4">

Customize Icon Colors

The component uses 9 predefined gradient colors. To customize:

const colors = [
  "from-red-500 to-rose-500",
  "from-green-500 to-emerald-500",
  "from-yellow-500 to-orange-500",
  // Add more colors...
];

Modify Card Style

Customize the card appearance:

<Card className="rounded-3xl border-2 bg-gradient-to-br from-background to-muted p-10">
  {/* content */}
</Card>

Adjust Icon Size

Change icon dimensions:

<div className="p-5">
  <Icon className="h-8 w-8 text-white" />
</div>

Use Cases

Perfect for:

  • Product feature pages
  • Service offerings
  • Platform capabilities
  • Benefits sections
  • Value propositions
  • Technology showcases
  • Tool comparisons
  • Key differentiators

Best Practices

  1. Optimal feature count - 6-9 features work best for 3-column layout
  2. Keep descriptions concise - 1-2 sentences per feature
  3. Use consistent icons - Stick to one icon style (outline or filled)
  4. Prioritize features - Put most important features first
  5. Mobile optimization - Test on mobile devices
  6. Icon relevance - Choose icons that clearly represent the feature
  7. Balanced content - Keep similar description lengths