Studio Bento Grid

A hand-tiled monochrome bento grid mixing a statement, a stat, an image, a quote, and a CTA into one composition.

PRO

Bento1: Studio Bento Grid

A monochrome bento grid that lays a badge, heading, and description over a six-column tiled composition of five optional cards: a large statement anchor, an inverted stat figure, a framed cover image with a gradient scrim, an editorial pull-quote, and an always-present closing CTA card with a linked button.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/bento1?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/bento1?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/bento1.tsx.

Quick start

The installed file exports bento1Demo alongside the block: the exact props behind the preview above. Spread it to get a working bento grid in one line.

tsx
import { Bento1, bento1Demo } from "@/components/beste/block/bento1";

export default function Page() {
  return <Bento1 {...bento1Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Bento1 } from "@/components/beste/block/bento1";

export default function Page() {
  return (
    <Bento1
      badge={{ label: "At a glance" }}
      heading="The studio, in one grid."
      description="A snapshot of how the studio works."
      statement={{
        index: "S/01",
        title: "We make monochrome feel loud.",
        body: "Systems built from type, contrast, and restraint.",
      }}
      stat={{ value: "138", label: "Launches shipped", caption: "Since 2014" }}
      image={{
        src: "/studio.jpg",
        alt: "Studio table layered with printed type specimens",
        caption: "Inside the type room",
      }}
      quote={{
        quote: "They kept cutting until only the idea was left standing.",
        author: "Mara Vance",
        role: "Founder, Halden Press",
      }}
      button={{ label: "Tour the studio", href: "/about" }}
      labels={{
        ctaTitle: "Want the long version?",
        ctaNote: "A 30-minute walkthrough of the whole practice.",
      }}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Eyebrow badge rendered above the heading via Badge7
headingstringSection heading in the intro column
descriptionstringSupporting paragraph under the heading
statementStatementCardLarge anchor card spanning four columns and two rows
statStatCardInverted figure card on a bg-foreground surface
imageImageCardFramed cover image with a gradient scrim and caption
quoteQuoteCardEditorial pull-quote card with a Quote icon
buttonActionButtonLinked CTA rendered inside the closing card via Button12
labelsBento1LabelsTitle and note text for the closing CTA card
classNamestringExtra classes for the outer <section>
ts
type StatementCard = {
  index: string;
  title: string;
  body: string;
};

type StatCard = {
  value: string;
  label: string;
  caption: string;
};

type ImageCard = {
  src: string;
  alt: string;
  caption: string;
};

type QuoteCard = {
  quote: string;
  author: string;
  role: string;
};

type ActionButton = {
  label: string;
  href: string;
};

type Bento1Labels = {
  ctaTitle: string;
  ctaNote: string;
};

Behavior notes