Guided Workspace Setup

(Setup)

Four questions, then your workspace is ready

Nothing here is permanent. Every answer maps to a setting you can change later, and skipping one just leaves the default in place.

Takes about a minute. You can leave and pick it up from the same question.

Set up your workspace

Press a number key to answer without reaching for the mouse.

What do you do most days?

This picks the home screen you land on.

One question at a time

The whole form is one field wide, so there is never a screen of empty inputs waiting for you.

Answers become settings

Your role picks the home screen, the tools you choose are the first integrations we connect.

Nothing is locked in

The summary at the end lists what we are about to create, and every line of it stays editable.

About this block

Guided Workspace SetupFREE

A two-column setup section: the pitch and what each answer changes on the left, and a one-question-at-a-time wizard on the right that ends in a review of everything it is about to create.

Onboarding43: Guided Workspace Setup

A two-column setup section. The left column explains what each answer changes, and the right column is a one-question-at-a-time wizard that replaces itself with a review of everything it is about to create.

Free block

This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.

Installation

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/onboarding43"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/onboarding43"

That installs the block file, the badge7 eyebrow and button12 pill it is built from, and the questionnaire primitive. The flow, the progress bar, and the review panel all live in the block file itself, so there is nothing else to wire up.

Quick start

tsx
import { Onboarding43, onboarding43Demo } from "@/components/beste/block/onboarding43";

export default function Page() {
  return <Onboarding43 {...onboarding43Demo} />;
}
tsx
import { Onboarding43 } from "@/components/beste/block/onboarding43";

export default function Page() {
  return (
    <Onboarding43
      badge={{ label: "Setup" }}
      heading="Four questions, then your workspace is ready"
      description="Every answer maps to a setting you can change later."
      points={[
        {
          title: "One question at a time",
          description: "The whole form is one field wide.",
        },
        {
          title: "Answers become settings",
          description: "Your role picks the home screen you land on.",
        },
      ]}
      note="Takes about a minute."
      button={{ label: "See what each answer changes", href: "https://beste.co" }}
      wizardHeading="Set up your workspace"
      shortcuts="numbers"
      labels={{ submit: "Create workspace" }}
      summary={{ title: "Workspace ready", emptyLabel: "Skipped" }}
      steps={[
        {
          name: "role",
          title: "What do you do most days?",
          required: true,
          choices: [
            { value: "engineering", label: "Engineering", description: "Ship, review, and deploy." },
            { value: "design", label: "Design" },
          ],
        },
        {
          name: "tools",
          title: "What should we connect first?",
          multiple: true,
          choices: [
            { value: "github", label: "GitHub" },
            { value: "slack", label: "Slack" },
          ],
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badgeBadgeParenthetical eyebrow above the heading, rendered with Badge7.
headingstringSection heading.
descriptionstringSection description under the heading.
pointsSetupPoint[][]Ruled three-up row under both columns.
notestringMuted line below the rule at the foot of the left column.
buttonActionButtonButton12 pill under the note.
wizardHeadingstringHeading above the wizard, in the right column.
wizardDescriptionstringDescription under that heading.
stepsWizardStep[][]The questions, in the order they are asked.
shortcuts"letters" | "numbers"Prints a shortcut on every choice of the active step.
showProgressbooleantrueThe bar and the "Question n of m" line above the active step.
labelsWizardLabels{}Overrides for the navigation and review buttons.
summaryWizardSummary{}Copy for the panel that replaces the flow on submit.
classNamestringMerged onto the section element.
ts
type Badge = { label: string };
type ActionButton = { label: string; href: string };

type SetupPoint = { title: string; description: string };

type WizardStep = {
  name: string;
  title: string;
  description?: string;
  choices?: WizardChoice[];
  input?: { label: string; placeholder?: string };
  required?: boolean;
  multiple?: boolean;
};

type WizardChoice = { value: string; label: string; description?: string };

type WizardLabels = {
  previous?: string;
  skip?: string;
  next?: string;
  submit?: string;
  restart?: string;
};

type WizardSummary = {
  title?: string;
  description?: string;
  emptyLabel?: string;
};

Behavior notes

  • Only one step is on screen at a time. The others stay in the form but are hidden and inert, so the answers already given are still submitted with the rest.
  • required: true blocks Next and hides Skip until the step is answered. A step without it can be passed over, and the review panel prints summary.emptyLabel in its place.
  • A step with multiple: true renders checkboxes instead of radios, and a step with input renders a text field under the fixed choices that writes to the same field name.
  • Submitting swaps the whole wizard for a review list of question and answer pairs plus a Start over button, which remounts the flow from the first step with nothing filled in.
  • Setting shortcuts prints a key on each choice and binds it while that step is active, so the same key means something else one question later.
  • The left column and the wizard sit side by side from the lg breakpoint and stack below it, with the wizard second in source order so it lands under the copy on a phone.
  • The points are a row under both columns rather than a stack beside the wizard. Only one question is on screen at a time, so stacking them in the copy column made that side run to roughly twice the height of the form.

More Onboarding blocks

View all Onboarding
PRO

onboarding14

Workspace Setup with Team Invite

Combined onboarding card for creating a workspace with name and URL slug, plus a team invite section with email inputs. Perfect for SaaS apps that require team collaboration setup.

PRO

onboarding37

Invite Your Team

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.

PRO

onboarding33

Interactive Setup Checklist

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.

PRO

onboarding44

Setup Checklist

A setup checklist with a sticky left column: serif headline that settles in word by word, an intro, a large done count over a hairline progress bar that grows as steps are ticked, and a sliding-marker pill. On the right a ruled list of steps, each with a round check button, a serif title that strikes through when done, a description and an optional link.

PRO

onboarding6

Vertical Timeline Steps

Vertical timeline layout with step indicators, descriptions, and a connecting progress line. Perfect for workspace setup flows with detailed step explanations.

PRO

onboarding34

Role Based Getting Started

A getting-started section whose role pills swap a sticky summary column and the numbered steps beside it, each step carrying its own title, explanation, and honest time estimate.