Staaarter

Bento Feature Grid over Media

A full-bleed background photo behind a dark scrim, a heading and description on top of it, and a bento-style grid of glass-morphism cards below. One card can be marked featured to span two columns and two rows on large screens, with a larger icon, heading, and copy than its neighbors.

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-grid-over-media.json

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

Usage

The file also exports feature79Demo, 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 { Feature79, feature79Demo } from "@/components/blocks/feature/feature79";

export default function Page() {
  return <Feature79 {...feature79Demo} />;
}

Props

PropTypeDefaultDescription
eyebrowstringundefinedSmall label above the heading.
headingstringnoneSection heading, rendered directly over the background photo.
descriptionstringundefinedSupporting copy under the heading.
imageMediaSlotImagenoneFull-bleed background photo behind the whole section.
itemsFeature79Item[]noneBento grid cards; mark one item featured to have it span two columns and two rows.
classNamestringnoneExtra classes for the outer section element.

Types

interface Feature79Item {
  icon: LucideIcon;
  title: string;
  description: string;
  featured?: boolean;
}

Behavior notes

  • Plain server component, no client-side state.
  • The featured card's larger span is driven purely by the featured boolean on that item, the grid does not auto-detect which item to enlarge.
  • The dark scrim over the background photo is a fixed bg-black/65 overlay, always the light-on-dark treatment, this block has no invertColor variant.
  • Card icons are real lucide-react components passed by reference, safe here since this is a server component.