onboarding-flow · v1.1.1 · 2026-09-26 · sha256 c1e5ab3abf88ae91
onboarding-flow v1.1.1A
Immutable. This exact content never changes and is served at /api/v1/blob/c1e5ab3abf88ae91.
---
name: onboarding-flow
version: 1.1.1
author: Personify Labs
description: >
Design new onboarding flows or evaluate/critique existing ones — signup sequences, setup
checklists, first-run wizards, personalization quizzes, permission priming, paywalls — for
SaaS/web products or consumer/mobile apps. Use this whenever someone asks to design, build,
spec, improve, review, audit, or critique onboarding, a first-run experience, a getting-started
flow, a signup sequence, an account setup wizard, or "the first thing users see," whether
starting from scratch or from screenshots/a description of an existing flow.
Pulls current visual reference from Mobbin, routes all UI copy to righter, and routes all
structure/styling to the vois skills (vois-patterns → vois-components → vois-tokens).
tags:
- design
- ux
- onboarding
- product
- mobbin
---
# Onboarding Flow
A skill for designing onboarding for two very different contexts. SaaS/web onboarding and
consumer/mobile onboarding fail for opposite reasons if you cross the patterns: block a SaaS
user behind a linear wizard and they bounce before seeing the product; let a consumer app skip
the personalization quiz and you lose the sign-up's whole reason for existing. Pick the right
one before you design or evaluate anything.
This skill defines the *sequence and screen types*. It is not a copywriting or styling skill:
- **Every word that appears on screen** (headlines, button labels, quiz questions, permission
copy, checklist item text) routes to the **righter** skill. Don't guess at wording here.
- **Every structural/visual decision** (spacing, components, tokens, animation, accessibility)
routes to **vois-patterns → vois-components → vois-tokens**, in that order.
- This skill sits *above* both: it tells you which screens exist and in what order (or should);
righter tells you what words go on them; vois tells you how they're built.
---
## Two Modes
### Mode 1: Evaluate an Existing Flow
1. **Get the flow in front of you.** Screenshots, a Figma/Mobbin link, or a plain description of
the screen-by-screen sequence. If it's incomplete, say what's missing rather than guessing at
unseen screens.
2. **Determine the shape** using the decision tree below — SaaS companion checklist or consumer
linear sequence. An existing flow that uses the wrong shape for its product type is itself a
finding, not something to route around.
3. **Read the matching reference file** and walk the flow screen by screen against every rule
`id` in `data/onboarding-rules.json` for that shape, plus the five `UNIV-*` rules.
4. **Output in the Review format below.** Don't rewrite copy or restyle components yourself —
flag copy issues for righter and structural issues for vois-patterns, cite what should be
checked there, and stop.
### Mode 2: Generate a New Flow
1. **What kind of product is this?** Walk the decision tree below — it determines the whole
shape of the flow, not just the visual style.
2. **Pull current reference, don't rely on memory.** If the `mcp__Mobbin__search_flows` or
`mcp__Mobbin__search_screens` tools are available, use them to pull 3–5 real examples for the
*specific* product category (e.g. "fintech app onboarding," "B2B analytics tool setup guide")
before finalizing screens — patterns date fast, and a competitor-specific pull beats the
general patterns catalogued here. If Mobbin isn't available, use `references/` as the
fallback baseline.
3. **Read the matching reference file** for the full screen-by-screen breakdown.
4. **Route copy to righter and structure to vois** as you build each screen — don't batch this
at the end.
5. **Output in the New Flow format below.**
---
## Decision Tree: Which Onboarding Shape?
```
START: What is the user signing up for?
├─ SaaS / web product — used repeatedly at a desk, ongoing account, often paid seat-by-seat
│ └─ → read references/saas-onboarding.md [SHAPE-SAAS]
│ Pattern: drop into the real product immediately, companion checklist alongside it.
│ Never a full-screen linear wizard that blocks the product.
│
└─ Consumer / mobile app — short sessions, one person, often a subscription decision up front
└─ → read references/consumer-onboarding.md [SHAPE-CONSUMER]
Pattern: linear full-screen sequence (value prop → personalize → permissions →
account → paywall → confirmation → home). The wizard IS the experience before home.
```
If a product genuinely straddles both (e.g. a mobile companion app for a web SaaS product),
default to the shape of the surface you're designing or evaluating *this* flow for — a mobile
app onboarding still follows the consumer shape even if the parent product is B2B SaaS.
---
## Reference Files
| File | Covers | Shape ID |
|---|---|---|
| `references/saas-onboarding.md` | Setup guides, onboarding checklists, empty states, in-product companion patterns | `[SHAPE-SAAS]` |
| `references/consumer-onboarding.md` | Value prop screens, personalization quizzes, permission priming, paywalls, confirmation | `[SHAPE-CONSUMER]` |
Read only the one file that matches your shape. Each is self-contained.
---
## Output Formats
### Review format (Mode 1)
Use this for each screen or moment reviewed. Group by screen in flow order.
---
**Screen:** [name/position, e.g. "Screen 3 of 6 — interest picker"]
**Shape:** [SaaS companion checklist | Consumer linear sequence] — flag here if the flow is
using the wrong shape for its product type.
**Rules checked:** [list every rule `id` from `data/onboarding-rules.json` that applies to this
screen type, whether it passed or failed]
**Violations found:**
- `[rule id]`: [what's wrong] → [what to do instead, in one sentence]. If none, write "None found."
**Route to righter:** [any copy on this screen worth a pass — labels, headlines, error states —
or "Nothing flagged."]
**Route to vois:** [any structural/spacing/component concern worth a vois-patterns/vois-components
pass, or "Nothing flagged."]
---
After all screens: one summary line — total violations, and the single highest-leverage fix
(usually a `CONSUMER-004`/personalization-payoff or `SAAS-001`/blocking-wizard issue if either
is present).
### New Flow format (Mode 2)
Use the screen sequence itself as the deliverable — a numbered list of screens in order, each
with: screen purpose, primary action, what's collected or shown, and which rule `id`s it
satisfies. Follow with the Checklist Before Handing Off below, completed, not just shown blank.
---
## Universal Rules (apply regardless of shape or mode)
These held across every real flow pulled for this skill, SaaS and consumer alike. Every rule
below carries a stable `id` in backticks — cite the id, not the bullet position, when referencing
a rule from outside this file.
- **One primary action per screen** `id: UNIV-001`. For a screen presenting a single decision,
give it exactly one primary action — if a screen has two competing CTAs for the same decision,
one is winning by accident. Make the secondary action visually and verbally subordinate (text
link, not a second button of equal weight). This doesn't apply to a checklist's per-item CTAs
(`SAAS-003` — each item is its own independent action, not competitors) or a legally required
consent screen's equal-weight buttons (`CONSUMER-007`).
- **Progress must be honest and visible** `id: UNIV-002`. A progress bar, step count ("Step 3 of
4"), or fraction ("3/8 completed") should reflect real remaining effort, not motivate through
vagueness. Never show progress that doesn't move.
- **Never trap the user** `id: UNIV-003`. Every screen needs a way out — back arrow, X, or skip
— except the single final confirmation screen. A flow with no exit reads as coercive, not
confident.
- **Ask before you tell** `id: UNIV-004`. If you collect a preference (goal, interest, role), the
payoff must visibly appear within one or two screens after that answer. If it won't, cut the
question — asking without using it just adds friction for nothing.
- **Route every word to righter, every layout decision to vois-patterns** `id: UNIV-005`. Don't
write filler copy "for now" and don't eyeball spacing. It compounds into rework.
**Structured lookup:** `data/onboarding-rules.json` holds every tagged rule from this file and
both reference files as `{ id, condition, outcome, source_file }` — useful for a quick
condition/outcome check by `id` without opening the full file it lives in. This is also what
Mode 1 walks screen-by-screen against.
**Source of truth:** `data/onboarding-rules.json` is canonical for a rule's `condition`/`outcome`.
The `.md` files restate rules for readability and carry the worked examples (real app names,
screen-by-screen breakdowns) the JSON doesn't — but if the two ever disagree, the JSON wins.
`scripts/check-rule-sync.mjs` checks that every tagged id cited in the `.md` files resolves to a
real entry in the JSON and vice versa; run it after editing rules in either place.
---
## Checklist Before Handing Off (Mode 2)
- [ ] Shape selected (SaaS companion checklist vs. consumer linear sequence) and justified
- [ ] Pulled current Mobbin reference for this product's specific category, if the tool is available
- [ ] Screen sequence drafted, one primary action per screen
- [ ] Progress indicator defined and honest
- [ ] Every screen has an exit except the final confirmation
- [ ] Personalization inputs (if any) visibly reflected later in the flow
- [ ] All copy drafted through righter (not placeholder text)
- [ ] All structure/spacing/components resolved through vois-patterns → vois-components → vois-tokens
---
## Maintaining This Skill
`data/onboarding-rules.json` is the canonical rule set (18 rules: 5 universal, 6 SaaS, 7
consumer). When you add, remove, or reword a rule, update it in both the `.md` file and the
JSON, then run:
```
node scripts/check-rule-sync.mjs
```
It fails loudly if an id is tagged in markdown but missing from the JSON, listed in the JSON but
never cited in markdown, or tagged in a file that doesn't match the JSON's `source_file`. Run it
before publishing any edit to a rule.