Six application tiles alternating between landscape and portrait crops, each captioned on a rule with where the work lands, what it is applied to and the constraint it has to survive.
Six places one system has to survive, shown as a mosaic of photographs with mixed crops. Each picture is captioned under its own rule with the place, the application and the detail that matters.
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.
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
npx shadcn add "https://ui.beste.co/r/usecase52?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/usecase52?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/usecase52.tsx plus the badge7 eyebrow it uses.
The installed file exports usecase52Demo alongside the block: the exact props behind the preview above. Spread it to get a working section in one line.
import { Usecase52, usecase52Demo } from "@/components/beste/block/usecase52";
export default function Page() {
return <Usecase52 {...usecase52Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Usecase52 } from "@/components/beste/block/usecase52";
export default function Page() {
return (
<Usecase52
badge={{ label: "Where it shows up" }}
heading="One system, six places it has to survive."
description="An identity is only as good as its worst application."
placements={[
{
src: "/placements/wall.jpg",
alt: "Wayfinding signage in a public building",
place: "On a wall",
application: "Wayfinding and building signage",
detail: "Read at eighteen metres, in the building's own light.",
},
{
src: "/placements/hand.jpg",
alt: "Unbranded paper packaging",
place: "In a hand",
application: "Packaging and printed collateral",
detail: "Uncoated stock, single colour, no varnish to hide behind.",
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow label rendered as a Badge7 |
heading | string | – | Section heading in the left header column |
description | string | – | Supporting paragraph in the right header column |
placements | PlacementTile[] | [] | Photographs and their captions, rendered in order |
className | string | – | Extra classes for the outer <section> |
type PlacementTile = {
src: string;
alt: string;
place: string;
application: string;
detail: string;
};aspect-[4/5] while the rest are aspect-[4/3], so the mosaic breaks its own rhythm without any per-item configuration.figure and figcaption elements, with the caption under a border-t rule rather than on a scrim inside the picture.sm:grid-cols-2 lg:grid-cols-3), which keeps the alternating crop pattern meaningful at desktop width and harmless below it.gap-x-6 gap-y-10), so stacked tiles stay separated when the grid wraps.md:items-end, so the supporting paragraph sits on the heading's baseline rather than beside its first line.usecase46
Four tall image tiles, one per industry, each followed by an explanation and a ruled foot pairing a proof line with a plain link into that sector's work.
usecase42
A multi-site use case with an eyebrow over a hairline rule, a two-column heading, and three image tiles that each float a live location card above a title and description.
usecase19
Pinterest-style masonry grid with variable-height image cards, category labels, and hover zoom effects. Perfect for creative portfolios or work showcases.
usecase47
Ruled index of jobs on the left that swaps the panel beside it, where each selection brings its own photograph, explanation and two ruled outcome figures.