Onboarding screen displaying essential keyboard shortcuts in a grouped grid layout with key badges. Perfect for productivity tools that want to accelerate user adoption.
Onboarding screen presenting keyboard shortcuts grouped into categories, each shortcut pairing a description with <kbd> key badges chained by a "+" separator. Purely a static reference screen with no interactive state.
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/onboarding24?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/onboarding24?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/onboarding24.tsx and the badge and button shadcn/ui primitives it depends on.
The installed file exports onboarding24Demo alongside the block: the exact props behind the preview above. Spread it to get a working shortcuts cheat sheet in one line.
import { Onboarding24, onboarding24Demo } from "@/components/beste/block/onboarding24";
export default function OnboardingPage() {
return <Onboarding24 {...onboarding24Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Onboarding24 } from "@/components/beste/block/onboarding24";
export default function OnboardingPage() {
return (
<Onboarding24
badge={{ label: "Pro Tips", variant: "secondary" }}
heading="Work faster with shortcuts"
description="Learn these essential keyboard shortcuts."
groups={[
{
title: "Navigation",
shortcuts: [
{ keys: ["Ctrl", "K"], description: "Command palette" },
{ keys: ["Ctrl", "/"], description: "Search" },
],
},
{
title: "Editing",
shortcuts: [
{ keys: ["Ctrl", "S"], description: "Save changes" },
{ keys: ["Ctrl", "Z"], description: "Undo" },
],
},
]}
primaryButton={{ label: "Got it, let's go", href: "/dashboard" }}
secondaryButton={{ label: "Skip for now", href: "/dashboard" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Small badge above the heading |
heading | string | – | Main headline |
description | string | – | Supporting copy below the heading |
groups | ShortcutGroup[] | [] | Categorized groups of keyboard shortcuts |
primaryButton | { label: string; href: string } | – | Primary CTA link |
secondaryButton | { label: string; href: string } | – | Secondary CTA link |
labels | { stepOf?: string; footerText?: string } | – | Template string for the step counter and an optional footer hint |
currentStep | number | 1 | Current step number, used only to fill the step-of label |
totalSteps | number | 4 | Total step count, used only to fill the step-of label |
className | string | – | Extra classes for the outer <section> |
type Shortcut = { keys: string[]; description: string };
type ShortcutGroup = { title: string; shortcuts: Shortcut[] };useState; it's a static rendering of whatever groups are passed, there's no way to filter, search, or mark a shortcut as learned.shortcut.keys array renders as a chain of <kbd> elements joined by a "+" character between them, so ["Ctrl", "K"] renders as two key badges with a plus sign between them, while a single-key shortcut like ["?"] renders one badge with no separator.groups.length, using the same 2-or-fewer/3/multiple-of-4/else pattern as the other card-grid blocks in this family (centered row, 3 columns, 4 columns, or 3 columns).labels.footerText (e.g. "Press ? anytime to see all shortcuts") is only rendered when explicitly provided; there is no hardcoded fallback default in the component body.onboarding21
Completion screen shown after finishing onboarding with a summary of what was configured and quick-start action links. Perfect for ending the setup flow with clear next steps.
onboarding20
Onboarding screen with a grid of starter templates to choose from, each with a preview thumbnail, title, and description. Perfect for project creation flows in design tools and project management apps.
onboarding2
Two-column welcome layout with feature checklist, user count, and star ratings alongside an image. Perfect for SaaS onboarding that highlights key benefits and builds trust.
onboarding27
Onboarding screen with a quick survey asking how the user discovered the product, with selectable options and an optional text input. Perfect for marketing attribution during signup.
onboarding23
Onboarding screen for configuring account security including two-factor authentication, recovery email, and backup codes. Perfect for apps that prioritize security during onboarding.
onboarding18
Onboarding screen with toggle switches for configuring notification channels and frequency. Perfect for apps that need granular notification consent during setup.