Recipes · Flows

Onboarding flow

A four-step checklist that celebrates progress. Each step is skippable — but skipping is honest, not hidden.

Preview

The exact composition below is what ships in production apps built on Nova.

Get started

2 of 4
  • Create workspace
  • Invite your team
  • Connect data
  • Ship your first flow

Source

tsx
export function OnboardingCard({ steps, progress }) {
return (
<Card className="max-w-md p-5">
<div className="flex items-center justify-between">
<h3 className="font-semibold">Get started</h3>
<Badge variant="outline" size="sm">{progress.done} of {progress.total}</Badge>
</div>
<div className="mt-3 h-1.5 rounded-full bg-subtle overflow-hidden">
<div className="h-full bg-accent" style={{ width: `${(progress.done / progress.total) * 100}%` }} />
</div>
<ul className="mt-5 space-y-2">
{steps.map((s) => (
<StepRow key={s.id} step={s} />
))}
</ul>
</Card>
);
}

Anatomy

  • Progress bar always visible so users know how much is left.
  • Completed steps stay in the list (crossed out) — visible progress is motivating.
  • 'Skip for now' as a ghost button, not hidden in a menu.
  • Celebrate the final step with a confetti burst or a state-change badge.