Staaarter

Interactive Feature Cards with Dual CTAs

A two-column grid of feature cards, each led by an icon and paired with two call-to-action buttons, a primary button and an outline secondary button, sitting side by side beneath the description.

By Staaarter Team
Feature
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its button dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/feature-cards-dual-ctas.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/feature/feature114.tsx instead.

Usage

The file also exports feature114Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Feature114, feature114Demo } from "@/components/blocks/feature/feature114";

export default function Page() {
  return <Feature114 {...feature114Demo} />;
}

Props

PropTypeDefaultDescription
eyebrowstringundefinedSmall label above the heading.
headingstringnoneSection heading.
descriptionstringundefinedSupporting paragraph under the heading.
cardsDualCtaFeatureCard[]noneFeature cards, each with a primary and secondary link button.
classNamestringnoneExtra classes for the outer section element.

Types

interface DualCtaFeatureCard {
  title: string;
  description: string;
  primaryAction: { label: string; href: string };
  secondaryAction: { label: string; href: string };
}

Behavior notes

  • Despite the "interactive" name in the brief, this is a plain Server Component with no real client-side state: both buttons on every card are real links (rendered via the Button component's `render` prop pointed at a next/link `Link`), not a stateful demo.
  • Each card's icon cycles through a fixed set of six lucide-react icons by array position, repeating if more than six cards are supplied.