And a few we are not, which we will tell you about on the first call rather than halfway through an invoice.
Everything was designed in a weekend five years ago and every new page now has to fight the old one.
What changes
A system that fits the company you became, with the founder's original instinct still legible in it.
Product moves weekly, the site describes something from last autumn, and marketing is guessing.
What changes
Pages your own team can update without a designer, built on language that survives the next release.
An annual report, a catalogue or an archive that everybody dreads and nobody can navigate.
What changes
A structure readers can enter anywhere, in print and on screen, without losing the argument.
Qualifying section describing three situations a service suits: each ruled column pairs the situation with a dotted list of tell-tale signals and a soft panel stating what changes afterwards, with nothing closing the section.
Qualifying section that describes the three situations your service actually suits. Each ruled column pairs the situation with a dotted list of tell-tale signals and a soft panel stating what changes afterwards, so readers can self-select before they write to you.
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/usecase44?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/usecase44?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/usecase44.tsx plus the badge7 component it uses for the eyebrow.
The installed file exports usecase44Demo alongside the block: the exact props behind the preview above. Spread it to get a working fit section in one line.
import { Usecase44, usecase44Demo } from "@/components/beste/block/usecase44";
export default function Page() {
return <Usecase44 {...usecase44Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Usecase44 } from "@/components/beste/block/usecase44";
export default function Page() {
return (
<Usecase44
badge={{ label: "Who this is for" }}
heading="Three situations we are genuinely good at."
description="And a few we are not, which we will tell you about on the first call."
personas={[
{
title: "The company that outgrew its first identity",
situation: "Everything was designed in a weekend five years ago.",
outcome: "A system that fits the company you became.",
signals: ["Three versions of the logo in circulation", "New hires design from screenshots"],
},
]}
labels={{ outcomeTitle: "What changes" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow label rendered as a Badge7 |
heading | string | – | Section heading in the left column |
description | string | – | Supporting paragraph, right-aligned from md up |
personas | Persona[] | [] | One ruled column per situation |
labels | Usecase44Labels | {} | Fixed strings that are not content: the label above each outcome panel |
className | string | – | Extra classes for the outer <section> |
type Persona = {
title: string;
situation: string;
outcome: string;
signals: string[];
};
type Usecase44Labels = {
outcomeTitle?: string;
};mt-auto, so the soft blocks align across all three columns even when one signal list runs longer than the others.mb-10, not from a margin on the panel: mt-auto collapses to zero in the tallest column and on mobile, where nothing is left to distribute, so the spacing has to be owned by the list.border-t border-dotted rules, a lighter tier than the column rule, which stops a three-item list from reading as a second heading level.title renders as h3 and is deliberately a full sentence rather than a persona noun, since describing the situation converts better than naming a segment.md the columns stack in source order, so the first situation stays the one a phone reader sees first: order the array by how common the situation is.