Staaarter

Feature Cards over Background Media

A full-bleed section with a background photo behind a dark scrim, a heading and description sitting directly on the image, and a four-column grid of glass-morphism cards below it, each with an icon badge, title, and description. An invertColor flag swaps the heading/copy between a light-on-dark and dark-on-light treatment for use over lighter or darker photos.

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/feature-cards-over-background-media.json

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

Usage

The file also exports feature78Demo, 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 { Feature78, feature78Demo } from "@/components/blocks/feature/feature78";

export default function Page() {
  return <Feature78 {...feature78Demo} />;
}

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.
itemsFeature78Item[]noneGlass-morphism cards, each with an icon, title, and description.
invertColorbooleanfalseWhen true, swaps the on-image heading/copy to a dark-on-light treatment for lighter photos.
classNamestringnoneExtra classes for the outer section element.

Types

interface Feature78Item {
  icon: LucideIcon;
  title: string;
  description: string;
}

Behavior notes

  • Plain server component, no client-side state.
  • The dark scrim over the background photo is a fixed bg-black/60 overlay (or bg-background/50 when invertColor is true), not a real accessibility-driven contrast check against the actual photo supplied.
  • invertColor only affects the heading, eyebrow, and description sitting directly on the photo; the glass cards below always use the same bg-background/80 panel since that background is opaque enough over either kind of photo.
  • Card icons are real lucide-react components passed by reference, since this is a server component there is no client-boundary restriction on passing a component prop.