Skip to content

Hero

Hero Projects

Headline with rating, avatars and two actions, then a row of recent projects that open on hover.

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

Installation

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

Usage

import { HeroProjects } from "@/components/hero-projects";

<HeroProjects
  title="Grow your brand. Amplify your impact."
  primaryAction={{ label: "Start a project", href: "/contact" }}
  projects={[
    { title: "Harvest Kitchen", year: "2025", href: "/projects/harvest-kitchen", image: { src: "/work/harvest.jpg", alt: "…" } },
  ]}
/>

Props

PropTypeDefaultDescription
as"h1" | "h2""h1"Heading level of the title.
title / subtitle / descriptionstring—Headline, the line under it, and the text in the right column.
rating{ score, max } | false4.9 /5.0Stars and score, shown from 768px; false hides it.
customers{ value, label }320+ Happy clientsFigure next to the avatars.
avatars{ src, alt }[]3 facesUp to three overlapping faces (decorative, alt usually empty).
primaryAction / secondaryAction{ label, href }—Button and text link; the link shows from 768px.
recent{ title, count, countLabel, action }—Summary card at the start of the projects row.
projects{ title, year, href, image: { src, alt } }[]3 projectsThe row; the first starts open.
classNamestring—Classes for the <section>.
  • Below 768px everything stacks; from 768px the intro is a bottom-aligned row with a 256px column on the right, and the projects row is 300px tall.
  • Pointing at a project, tabbing to it or tapping it opens it; the others narrow to 130px strips (spring, bounce 0, 0.4s). Below 640px the projects stack.
  • Each project links to its page; its name and year label the link.

AI prompt

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

Create a React + Tailwind CSS + Motion block called HeroProjects (Next.js).
- <section className="py-(--section-y)">, container mx-auto max-w-(--container) px-(--gutter), column gap-12 md:gap-16 lg:gap-20.
- Intro: stacked below 768px; from 768px a row, items-end, justify-between. Left (max-w-3xl): h1 font-heading text-display
  font-semibold tracking-tight, a max-w-md muted subtitle, then a row: five small stars in text-primary over a score
  ("4.9" text-lg semibold + "/5.0" muted, hidden below 768px), three 48px round overlapping avatars (-ml-3, ring-2 ring-background),
  and a figure (font-heading text-h3 semibold) over a muted text-sm label.
  Right (w-64, items-end from 768px): text-lead muted description, then a shadcn-style button with an arrow that turns 45° on hover
  and, from 768px, a text link whose underline grows from the left on hover.
- Projects row (h-75 from 768px): a summary card (rounded-lg bg-muted p-5, w-44 / lg:w-88) with a font-heading text-h3 title,
  a text-h2 count, a muted label and a text link; then the projects: panels share the row, the open one grows (flex-grow 1)
  and the others shrink to 130px — spring bounce 0, duration 0.4s — on pointer enter, focus and tap. Each panel is an image
  link (rounded-lg, object-cover) with the title and the year under it, fading in with the same spring. Below 640px stack them.
- Only shadcn variables and block tokens; images are plain <img> with alt text.

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