Guide · 8 min read · Updated

How to Build a User Onboarding Flow in React

Onboarding is the stretch between “I signed up” and “this is useful”. Every extra field, unclear step, or blank screen in that stretch costs activations. The best flows ask only for what they need, show progress, and land the user on something that already works.

This guide covers each stage in order: authentication, collecting setup details, inviting a team, and the first screens a new account sees.

What you will build

  • Sign-up and sign-in screens with passwordless support
  • A step form that collects setup details without feeling long
  • A team invite step that handles validation and seats
  • A setup checklist and empty states that lead to first value

Step 1

Make sign-up nearly effortless

Offer the fewest fields possible: email plus a social or passwordless option is enough for most products. A one-time code flow avoids passwords entirely and works well on mobile, provided the code inputs accept paste and auto-advance.

Keep sign-in and sign-up on the same screen with a clear switch, so returning users aren't funneled into creating a second account.

Step 2

Collect setup details one decision at a time

Ask only for details that change what the user sees next, such as role, team size, or main goal. Show progress so the end is visible, allow going back without losing answers, and validate each step before moving on.

A one-question-per-screen form feels shorter than a long form with the same fields, especially on mobile.

Tip: Store answers as the user goes. If they close the tab on step three, bring them back to step three.

Step 3

Invite the team early

Products used by teams activate faster when the first user invites someone in the first session. Let people paste several emails at once, validate them as chips, pick a role, and see how many seats they're using.

Make the step skippable. Forced invites produce fake emails.

Step 4

Land on a guided first screen

After setup, show a short checklist of the actions that lead to first value, with progress that updates as tasks are completed. Pair it with empty states that explain what each area is for and offer the action that fills it.

Install the blocks from this guide

With a beUI Pro token configured, each command adds the block's source to your project through the shadcn CLI. You own the files and can edit them like any other component.

ShellTerminal
npx shadcn add @beui-pro/auth-split
npx shadcn add @beui-pro/auth-otp
npx shadcn add @beui-pro/animated-step-form
npx shadcn add @beui-pro/onboarding-steps
npx shadcn add @beui-pro/team-invite
npx shadcn add @beui-pro/onboarding-modal
npx shadcn add @beui-pro/empty-state-inbox

Launch checklist

  • Sign-up asks for an email and nothing else that can wait
  • Code inputs support paste and auto-advance
  • Every step shows progress and can go back
  • Partially completed onboarding resumes where it stopped
  • Team invites are optional and validated
  • New accounts never land on a blank screen

Frequently asked questions

How many onboarding steps should I have?
As few as you need to personalize the first screen, often three to five. If a question doesn't change what the user sees next, ask it later.
Should onboarding be a modal or full pages?
Use full pages for required setup before the product is usable, and a checklist or modal for optional steps once the user is inside the product.
Do these auth blocks include a backend?
No. They are UI blocks with form states, ready to connect to your auth provider or server actions, such as Auth.js, Clerk, Supabase, or your own API.
Are the onboarding blocks accessible?
They use labeled inputs, keyboard navigation, focus management between steps, and reduced-motion fallbacks. Test them with your own copy and validation rules.

Keep building