Skip to content

Projects & work

Projects Grid

Section header and a two-column grid of project cards whose photos zoom on hover.

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

Installation

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

Usage

import { ProjectsGrid } from "@/components/projects-grid";

<ProjectsGrid
  title="Projects"
  action={{ label: "More projects", href: "/projects" }}
  projects={[
    {
      title: "Harvest Kitchen",
      year: "2025",
      href: "/projects/harvest-kitchen",
      image: { src: "/work/harvest.jpg", alt: "…" },
      services: [{ label: "Social media", href: "/services/social-media" }],
    },
  ]}
/>

Props

PropTypeDefaultDescription
title / leadstring—Section heading (h2) and the large lead under the divider.
metastring2019 – 2026Short line beside the title from 768px.
action{ label, href }More projectsButton beside the title at every width.
projects{ title, year, href, image: { src, alt }, services? }[]4 projectsCards; titles are h3 links, services are links in the meta row.
classNamestring—Classes for the <section>.
  • One column below 768px, two from 768px. The meta row is one line tall: services that don't fit are clipped.
  • Photos zoom to 105% while their card is hovered, with Framer's tween, cubic-bezier(0.12, 0.23, 0.5, 1) over 400ms. The photo link duplicates the title link, so it is hidden from assistive tech and the keyboard.

AI prompt

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

Create a React + Tailwind CSS block called ProjectsGrid (Next.js).
- <section className="py-(--section-y)">, container mx-auto max-w-(--container) px-(--gutter), column gap-12 md:gap-16 lg:gap-20.
- Header: a row (items-center, md:items-end, justify-between): h2 font-heading text-h2 semibold tracking-tight, a muted meta from
  768px, a shadcn-style button; an <hr>; a lead (text-h3 font-medium) max-w-3xl aligned right.
- Grid: 1 column (gap-12), 2 from 768px (gap-5, lg gap-x-8 gap-y-12). Card: a 545:400 photo in a rounded-lg frame that zooms
  to 1.05 on hover (transition-transform 400ms cubic-bezier(0.12,0.23,0.5,1)) inside a link with aria-hidden and tabIndex -1;
  then a one-line (h-5, overflow-hidden) text-sm muted row of comma-separated service links with the year at the right;
  then an h3 link (font-heading text-h3 semibold) that underlines on hover.
- Only shadcn variables and block tokens; 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