Staaarter

Bento Grid About

Asymmetric bento grid combining a mission card, team photo, stats, and stacked avatars. A modern, compact about section.

By Staaarter Team
About
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its avatar, avatar-initials, media-slot dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/bento-grid-about.json

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

Usage

The file also exports about10Demo, 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 { About10, about10Demo } from "@/components/blocks/about/about10";

export default function Page() {
  return <About10 {...about10Demo} />;
}

Props

PropTypeDefaultDescription
headingstringnoneHeading in the wide mission tile.
missionstringnoneMission paragraph in the wide mission tile.
photo{ src: string; alt: string }undefinedPhoto tile; renders a placeholder when omitted.
statsStatItem[]noneOne tile per stat; each renders as its own bento cell.
teamTeamMember[]noneStacked avatars in the bottom tile, with a headcount caption.
classNamestringnoneExtra classes for the outer section element.

Types

type StatItem = { title: string; value: string };

type TeamMember = {
  name: string;
  avatar?: { src: string; alt: string };
};

Behavior notes

  • This is the only About block whose grid cell count depends on the stats array length: every stat gets its own bento tile, so passing more stats reflows the grid rather than overflowing a fixed number of slots.
  • The photo tile spans two rows on large screens (row-span-2 lg:aspect-auto) to anchor the bento layout; on small screens it falls back to a square aspect ratio instead.
  • team avatars are shown overlapping (negative margin) with a caption reading "{count} people building this, full time", where count is team.length computed automatically, not a separate prop.