Progress Bar with Task Checklist

Progress

You're almost there!

Complete these tasks to finish setting up your account.

Setup Progress3 of 5 completed

60%

Create your account
Verify your email
Complete your profile
Connect your calendar
Invite team members
About this block

Progress Bar with Task ChecklistPRO

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.

Onboarding7: Progress Bar with Task Checklist

Card-based setup tracker: a shadcn Progress bar and large percentage readout sit above a checklist of tasks, each carrying its own completed flag. Progress is entirely data-driven; there is no click handler anywhere in the component to check a task off.

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.

Upgrade Now

Installation

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

bash
npx shadcn add "https://ui.beste.co/r/onboarding7?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/onboarding7?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/onboarding7.tsx and the badge, button, and progress shadcn/ui primitives it depends on.

Quick start

The installed file exports onboarding7Demo alongside the block: the exact props behind the preview above. Spread it to get a working progress card in one line.

tsx
import { Onboarding7, onboarding7Demo } from "@/components/beste/block/onboarding7";

export default function OnboardingPage() {
  return <Onboarding7 {...onboarding7Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Onboarding7 } from "@/components/beste/block/onboarding7";

export default function OnboardingPage() {
  return (
    <Onboarding7
      badge={{ label: "Progress", variant: "secondary" }}
      heading="You're almost there!"
      description="Complete these tasks to finish setting up your account."
      tasks={[
        { id: "1", title: "Create your account", completed: true },
        { id: "2", title: "Verify your email", completed: true },
        { id: "3", title: "Connect your calendar", completed: false },
      ]}
      progressLabel="Setup Progress"
      primaryButton={{ label: "Continue", href: "/setup" }}
      secondaryButton={{ label: "Finish later", href: "/dashboard" }}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string; variant?: "default" | "secondary" | "outline" }Small badge above the heading
headingstringMain headline
descriptionstringSupporting copy below the heading
tasksTask[][]Checklist items, each with its own completion flag
progressLabelstringLabel to the left of the "X of Y completed" text
primaryButton{ label: string; href: string }Primary CTA, stretched to fill its half of the row
secondaryButton{ label: string; href: string }Secondary/outline CTA next to the primary one
classNamestringExtra classes for the outer <section>
ts
type Task = {
  id: string;
  title: string;
  completed: boolean;
};

Behavior notes

  • Completion is entirely data-driven: each task carries its own completed: boolean, there is no click handler to toggle a task, and no internal state in the component. Changing progress means changing the tasks prop from the outside.
  • The percentage is computed as Math.round((completedCount / totalCount) * 100) and drives both the shadcn Progress bar's value and a large centered {percentage}% label beneath it.
  • Completed tasks get a strikethrough label and a tinted border-primary/20 bg-primary/5 row; unfinished tasks keep the plain card border and background.
  • The checkmark inside a completed task's indicator is a hand-drawn inline <svg> path (M5 13l4 4L19 7), not a lucide-react Check icon like the rest of this block family uses.
  • If tasks is empty the component returns null rather than rendering an empty card.
  • primaryButton and secondaryButton are both sm:flex-1, so on wider screens they split the row evenly instead of sizing to their text.

More Onboarding blocks

View all Onboarding
PRO

onboarding12

Circular Progress with Checklist

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.

PRO

onboarding5

Horizontal Steps with Progress Line

Multi-step progress indicator with numbered circles connected by a progress line. Perfect for account setup wizards that show users their completion status.

PRO

onboarding39

Thirty Day Milestones

An onboarding section setting out four dated milestones as bordered cards, each closing on the figure it should hit, above a soft panel that floats a live progress metric on an image tile.

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

onboarding21

Onboarding Completion Screen

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.

FREE

onboarding9

Step Cards with Numbered Indicators

Animated step wizard with square numbered indicators and content cards for each step. Perfect for product walkthroughs that guide users through key features.