Onboarding Flow

onboardingFeatures13 lines

A first-run walkthrough that shows once, with a persisted "seen it" flag and a real skip path.

Current — as published in v1.3.2. Written by hand for Onboarding Flow, not generated.

The rule

  • completed from useOnboarding() is boolean | undefinedundefined means "still loading from storage," not "not onboarded." Routing on completed === false before the load finishes sends every fresh install through onboarding twice; check for undefined first and render nothing (or a splash) until it resolves.
  • complete() runs on both finishing the last step and skipping. Skip is not "ask again next launch" — it is "user chose not to see this," and it should be persisted exactly the same way finishing is.
  • Step *content* (OnboardingStep[]) is a prop, not hardcoded in OnboardingFlow — add or reorder steps where the flow is rendered, not inside the component.

As each tool receives it

The same guidance, in the shape each editor reads. Cursor and Claude Code are written separately by hand; the rest are derived from the Cursor rule.

.cursor/rules/onboarding.mdchand-written for this tool
.cursor/rules/onboarding.mdc
---
description: Onboarding flow conventions
globs: ["src/features/onboarding/**/*.ts", "src/features/onboarding/**/*.tsx"]
alwaysApply: false
---

# Onboarding Flow

- `completed` from `useOnboarding()` is `boolean | undefined` — `undefined`
  means "still loading from storage," not "not onboarded." Routing on
  `completed === false` before the load finishes sends every fresh install
  through onboarding twice; check for `undefined` first and render nothing
  (or a splash) until it resolves.
- `complete()` runs on **both** finishing the last step and skipping. Skip is
  not "ask again next launch" — it is "user chose not to see this," and it
  should be persisted exactly the same way finishing is.
- Step *content* (`OnboardingStep[]`) is a prop, not hardcoded in
  `OnboardingFlow` — add or reorder steps where the flow is rendered, not
  inside the component.

What else this module writes

Selecting Onboarding Flow contributes more than a rule file — all of it merged with every other module you pick, with conflicts resolved rather than duplicated.

Dependencies
Depends on the rest of the stack — this module installs different packages depending on what else you select, so there is no single list to show.
Folders
src/features/onboarding/
Put this in your repo

Adds Onboarding Flow to a project this tool generated, without starting over. Files you have hand-edited are left alone.