Staaarter

Bento Feature Cards

A bento-style feature grid: three square cards in the top row, two wider cards in the row below. Every card's image sits flush against the card's edges with no padding, and only the text block below it is inset.

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 media-slot dependencies and any missing npm packages, and installs them straight into your project.

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

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

Usage

The file also exports feature92Demo, 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 { Feature92, feature92Demo } from "@/components/blocks/feature/feature92";

export default function Page() {
  return <Feature92 {...feature92Demo} />;
}

Props

PropTypeDefaultDescription
eyebrowstringnoneSmall label above the heading.
headingReactNodenoneSection heading.
descriptionstringnoneSupporting copy under the heading.
cardsBentoCard[]noneExactly five cards: the first three fill the top row, the last two fill the bottom row.
classNamestringnoneExtra classes for the outer section element.

Types

type BentoCard = {
  title: string;
  description: string;
  image: MediaSlotImage;
};

Behavior notes

  • Fully static server component, no client-side state.
  • Expects exactly 5 cards (array positions 0-2 in the 3-column top row, 3-4 in the 2-column bottom row); extra items beyond index 4 are ignored and fewer than 5 leaves a gap, since this is a fixed bento layout rather than a generic wrapping grid.
  • Media tiles are flush (no card padding) via a dedicated `div` wrapper; the title/description sit in a separately padded block below the image.