Skip to content

Hero

Hero Image

Page heading and summary over a wide image that settles into place as it scrolls into view; optional breadcrumbs and facts.

Layout and motion from the Nitip template — see it in context

Installation

$ npx shadcn@latest add https://framebrick.co/r/blocks/hero-image.json

Usage

import { HeroImage } from "@/components/hero-image";

<HeroImage
  breadcrumbs={[{ label: "Home", href: "/" }, { label: "Projects", href: "/projects" }, { label: "Harvest Kitchen" }]}
  title="Harvest Kitchen: a seasonal menu launch"
  description="…"
  facts={[{ label: "Year", value: "2025" }, { label: "Industry", value: "Food & beverage" }]}
  image={{ src: "/work/harvest.jpg", alt: "Restaurant dining room" }}
/>

Props

PropTypeDefaultDescription
as"h1" | "h2""h1"Heading level of the title.
breadcrumbs{ label, href? }[]Home / Projects / …Trail above the heading; the last item is the current page. [] hides it.
title / descriptionstring—Heading (up to 56rem wide) and summary (up to 48rem).
facts{ label, value: ReactNode }[]Year, Services, IndustryPairs under a divider — a row from 768px. [] hides them.
image{ src, alt }—Shown at 30:17 across the container.
classNamestring—Classes for the <section>.
  • The image scales from 120% (110% below 768px) to 100% while its frame scrolls into view — linear, tied to scroll, clipped by the frame. Static with reduced motion.
  • In the preview the frame scrolls on its own: scroll inside it to see the image settle.

AI prompt

Paste into v0, Lovable, Bolt or Claude to rebuild this block in your own project.

Create a React + Tailwind CSS block called HeroImage (Next.js).
- <section className="py-(--section-y)">, container mx-auto max-w-(--container) px-(--gutter), column gap-10 md:gap-12.
- Optional breadcrumbs (nav aria-label="Breadcrumb", ol text-sm text-muted-foreground, "/" separators aria-hidden, links
  hover:text-foreground, last item text-foreground aria-current="page"), then an h1 font-heading text-h1 font-semibold
  tracking-tight max-w-4xl, then a text-lead muted summary max-w-3xl.
- Optional facts: a <dl> under border-t border-border pt-6, stacked below 768px, a row with equal columns (gap-12) from 768px;
  dt text-sm muted, dd default text.
- Image: a frame (overflow-hidden rounded-xl bg-muted) holding a 30:17 object-cover <img>. While the frame scrolls into view the
  image scales from 1.2 (1.1 below 768px) to 1: progress = (innerHeight - frame.top) / frame.height clamped to 0–1, written to
  style.transform in a passive scroll listener (no easing). Skip it when prefers-reduced-motion is reduce.
- Only shadcn variables and block tokens.

Be the first to know

Get new templates and components first

One short email when we release a template or a free component. No spam — unsubscribe anytime.

We use your email only for Framebrick updates. Privacy policy