A four column board showing the real work in progress, each column stating the rule that lets a piece move on and carrying the linked cards currently sitting in it, with a written state for a column that is empty.
A four column board showing the real work in progress, each column stating the rule that lets a piece move on and carrying the linked cards currently sitting in it, with a written state for a column that is empty.
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/workflow56?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/workflow56?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/workflow56.tsx and the badge6 component it uses for the eyebrow (installed to components/beste/component/badge6.tsx).
The installed file exports workflow56Demo alongside the block: the exact props behind the preview above. Spread it to get a working board in one line.
import { Workflow56, workflow56Demo } from "@/components/beste/block/workflow56";
export default function BoardPage() {
return <Workflow56 {...workflow56Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Workflow56 } from "@/components/beste/block/workflow56";
export default function BoardPage() {
return (
<Workflow56
eyebrow="The board"
heading="Everything we are writing, in the open"
description="A piece only moves right when the rule under the column is met."
emptyLabel="Nothing here this week"
stages={[
{
name: "Drafting",
rule: "One per person at a time, no exceptions.",
pieces: [
{ title: "The month after launch", meta: "Second draft, 1,900 words", href: "/board/launch" },
],
},
{
name: "Published",
rule: "Corrections go in the revision log, not in silence.",
pieces: [{ title: "Two weeks of overlap", meta: "11 March", href: "/letters/041" }],
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Badge6 label above the hairline rule |
heading | string | – | Section heading under the rule |
description | string | – | Supporting paragraph |
stages | Stage[] | [] | Board columns, left to right |
emptyLabel | string | – | Sentence shown in a column with no cards |
className | string | – | Extra classes for the outer section |
type Stage = {
name: string;
rule: string;
pieces: PipelinePiece[];
};
type PipelinePiece = {
title: string;
meta: string;
href: string;
};grid-rows-subgrid, so the heading row, the rule and the first card line up across all four columns however long a rule wraps. Without it the cards would start at a different height in every column.pieces.length, so it cannot fall out of step with the cards under it.min-w-[52rem] instead of stacking, so the left to right order of the stages survives on a phone.emptyLabel renders in a dashed box, so an empty stage reads as deliberate rather than broken.workflow19
Onboarding card with a progress bar and a six-step checklist. Each step shows a completion state, a title, and a short hint.
workflow1
Two-column workflow hero with a live automation recipe card on the right showing a multi-app stack and installs counter.
workflow4
Three-column stats strip where each metric is anchored by a real workflow piece: active runs, success rate, and approvals.