A setup panel pairing a soft progress column, where an oversized percentage and accent bar react to what is ticked, with hairline checklist rows that each carry a description and a jump-in link.
Setup panel pairing a soft progress column, where an oversized percentage and an accent bar react to whatever is ticked, with checklist rows separated by hairlines, each carrying a description and a link straight into the screen that finishes the step.
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/onboarding33?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/onboarding33?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/onboarding33.tsx plus the badge23 component it uses for the eyebrow.
The installed file exports onboarding33Demo alongside the block: the exact props behind the preview above. Spread it to get a working checklist in one line.
import { Onboarding33, onboarding33Demo } from "@/components/beste/block/onboarding33";
export default function SetupPage() {
return <Onboarding33 {...onboarding33Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Onboarding33 } from "@/components/beste/block/onboarding33";
export default function SetupPage() {
return (
<Onboarding33
badge={{ label: "Setup" }}
heading="Six things, then you are live"
description="Work through them in any order."
progress={{
label: "of setup complete",
note: "Most teams finish the list inside a working week.",
}}
items={[
{
title: "Add your services",
description: "Names, durations, and prices become the bookable slots.",
link: { label: "Open services", href: "/settings/services" },
done: true,
},
{
title: "Invite the team",
description: "Front desk, clinicians, and finance, each with scoped access.",
link: { label: "Invite people", href: "/settings/team" },
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Monospace eyebrow above the hairline rule, rendered via Badge23 |
heading | string | – | Section heading in the left column |
description | string | – | Supporting paragraph, right-aligned from md up |
progress | { label: string; note: string } | – | Copy under the percentage and under the bar |
items | Step[] | [] | Checklist rows, and the source of the percentage |
className | string | – | Extra classes for the outer <section> |
type ActionLink = { label: string; href: string };
type Step = {
title: string;
description: string;
link: ActionLink;
done?: boolean;
};done, so the panel opens on the state you pass and every click after that is local.width percentage rather than a progress component, which keeps this block free of an extra dependency for one measure.onToggle prop, so the ticks live for the life of the component and the real completion state belongs to your backend.onboarding12
Visual progress tracker featuring a circular percentage indicator with completion stats and task list. Perfect for profile setup flows that encourage users to reach 100% completion.
onboarding37
A team setup section pairing a soft panel with a working invite row, a role picker, and a plain-language table of what each role can reach, with a bordered list of who is already on the account and whether they have accepted, closing on a seat meter that fills one tick per seat taken.
onboarding5
Multi-step progress indicator with numbered circles connected by a progress line. Perfect for account setup wizards that show users their completion status.
onboarding7
Card-based progress tracker showing completion percentage and a checklist of tasks with visual status. Perfect for gamified onboarding that motivates users to finish setup.