agentleFS
LucSenaLucSena/how-to-build-software/skills/onboarding-design/SKILL.md

onboarding-design

Skill0 starsChanged 44 days agoMITView on GitHub

Use when designing, building, or fixing what a new user experiences between sign-up and real value — first run, activation, aha moment, time-to-value, empty accounts, welcome screens, setup wizards, checklists, product tours, tooltips, personalization questions, sample data and templates, team invites and the invited teammate's first run, mobile first launch and permission timing, paywall placement in onboarding, lifecycle nudges, re-onboarding, and feature announcements. Covers activation metrics, setup/aha/habit moments, pattern selection, blueprints for B2B SaaS, B2C mobile, developer tools/APIs, marketplaces, and AI products, and event naming. Also use when the user says "users sign up but never come back", "add a product tour", "the dashboard is empty for new users", "activation is low", or "announce this feature". For sign-up and login forms use auth-flows; for pricing and paywall design use conversion-ux; for permission APIs use mobile-design.

2 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 9 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈9

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Never a dead end: Every empty screen explains itself and offers one action, a template, or labeled sample data.

    line 27
  2. Distinctive:

    Write outcome copy, not feature copy: "Send your first invoice and get paid faster", not "Welcome to the Invoices module" (Samuel Hulick: …

    line 64
  3. Distinctive:

    Notifications: ask when there is something to be reminded of ("Remind you at 9 pm for tomorrow's session?"), never on first launch.

    line 115
  4. Very specific:

    B2B/web products: no paywall or upgrade nag before the first win.

    line 116
  5. Distinctive:

    "New" badges expire: after first use or 14–30 days.

    line 154
  6. Distinctive:

    Every tour, survey, and checklist is skippable and dismissible.

    line 161
  7. Distinctive:

    No fake progress, fake "setting up your account" delays, or fake scarcity in welcome offers.

    line 162
  8. Distinctive:

    No confirmshaming on invite, notification, or trial screens ("No thanks, I like missing deadlines").

    line 163
  9. Distinctive:

    Never send invites from an uploaded address book without the user picking each recipient.

    line 164
  10. Very specific:

    Designing screens before the activation event: Write action ≥ N within T days first.

    line 170
  11. Distinctive:

    Personalization questions that do not branch: If two answers produce the same next screen, delete the question.

    line 176

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Onboarding Design

Onboarding is not a tour. It is the shortest honest path from sign-up to the user's first real result, and then to a habit. The best onboarding is a product that is usable without it (NN/g, Apple HIG); what remains is removing steps, filling empty screens with a way forward, and asking for things (account, data, permissions, money) only after the user has seen why. This skill starts from a measurable activation event and designs backwards from it, so the work is judged by retention, not by how many people clicked "Next".

Before you start

If .agents/project-context.md exists (or .claude/project-context.md), read it first and treat it as ground truth for stack, platforms, scale, design system, and constraints. Only ask for what it does not cover. If it does not exist and the task is larger than a quick fix, suggest running the project-context skill — but never block on it.

Then establish four facts: the product shape (B2B team product, B2C/mobile, developer tool/API, marketplace, AI product), the core action that delivers value, whether value is visible without the user's own data, and whether value needs other people (teammates, a counterparty). If retention data exists, get it; if not, say the activation event is a hypothesis.

Core principles

  1. Define activation before designing screens. Without action ≥ N within T days, every onboarding change is judged by taste.
  2. Reach a real result in the first session. Slow users abandon first, so time-to-value is the lever that moves activation most.
  3. Teach by doing, in context (pull), not by telling up front (push). NN/g found swipe-through tutorials did not improve task performance; people retain what they do.
  4. Ask for everything at the last responsible moment. Account after value where possible, permissions when the feature needs them, details when they change something, payment after a win.
  5. Never a dead end. Every empty screen explains itself and offers one action, a template, or labeled sample data.
  6. Every step is guilty until proven essential. Each question must change what the user sees next; otherwise cut it.
  7. Skippable, resumable, never repeated. Respect the user's time and intent; onboarding that traps people is a dark pattern.

Workflow

  • Write the activation event in the format below, plus setup, aha, and habit moments. Check: it names an action, a count, and a window, and it excludes sample-data actions.
  • Inventory the current path from sign-up to activation (screens, fields, waits, emails, permissions). Watch 5 real session recordings if they exist; each divergence from the intended path is a finding.
  • Mark each step essential / declares intent / administrative. Delete administrative steps; defer non-essential setup until after the aha moment.
  • Pick patterns with the selection table; pick the blueprint for the product shape (references/blueprints.md).
  • Design every first-run surface: welcome, empty states, checklist, first success, invite, permission asks, paywall (if any), return visit. Write real copy in outcome language.
  • Instrument one event per step plus activation, with is_sample flags (references/measurement.md).
  • Validate: walk the flow as a new user and as an invited teammate, on the smallest target device, skipping every optional step. Check against Anti-patterns and Gotchas; fix and repeat.

Activation first

Format: <core action> ≥ N times within T days of sign-up — the earliest measurable behavior that best separates retained from churned users. Start with a hypothesis, then confirm it against cohorts (method in references/measurement.md).

MomentMeaningExample (team roadmap tool)
SetupMust-have actions before value is possibleWorkspace created, one real project created
AhaFirst experience of the core valueSees the roadmap rendered and shares its link
HabitThe core action repeated enough to stickUpdates items in ≥ 3 of the first 14 days

(Setup/aha/habit framing: Reforge.)

Product shapeActivation event (template)Time-to-value measured as
B2B team product≥ 1 real core object AND ≥ 1 teammate active within 7 daysSign-up → first real object shared
B2C mobileCompleted the first core session on day 0 AND returned on ≥ 2 of days 1–7Install → first session completed
Developer tool / APIFirst successful authenticated call or deploy within 24 hTime to first call (TTFC) / first deploy
MarketplaceSupply: first listing live AND first sale; demand: first transactionSign-up → listing live / first purchase
AI productUsed an AI output in real work (copied, inserted, exported, sent) in the first sessionSign-up → first accepted output

Rules:

  • Solo-only activation undercounts churn risk in team products; include a collaboration event when value needs others.
  • "Sent a prompt", "completed the tour", and "visited 5 pages" are not activation; they are activity.
  • Write outcome copy, not feature copy: "Send your first invoice and get paid faster", not "Welcome to the Invoices module" (Samuel Hulick: people buy better versions of themselves).

Choosing patterns

Is value visible without the user's own data?
├─ yes (content, games, AI chat, templates) → product-first: drop them in, contextual hints
└─ no  (analytics, CRM, monitoring, payments)
   ├─ can it be faked safely? → labeled sample data / demo workspace + "Connect your data"
   └─ no → setup wizard for prerequisites ONLY, then empty states with one action each
Does value need other people?
└─ yes → invite AFTER the first solo win, framed around the object just created, skippable
Does it work without an account?
└─ yes → let them try first; ask to create an account to save or continue
PatternDefault useLimits
Empty state (explain + one CTA + template/import)Every list, board, dashboard on first useNever "No data" alone
Sample data / demo workspaceValue invisible until data existsLabeled "Sample", removable in one click, excluded from metrics
TemplatesBlank-canvas products (docs, design, dashboards, AI)3–6 matched to the declared goal; "Start blank" always available
Personalization questionSeveral distinct jobs or roles1–3 questions, each branches the flow, "Something else" option
Setup wizard / stepperMandatory prerequisites (install snippet, connect source, verify domain)Prerequisites only; progress shown; resumable
ChecklistSelf-serve product with several setup steps3–5 items (7 max), real actions, quick win first, dismissible, gone when done
Contextual hint (pull)A non-obvious feature, shown when the user reaches itOne at a time, dismissible, never re-shown
Product tourA genuinely novel interaction model≤ 3 steps, user-startable, skippable, never repeated
Try before account (delayed sign-up)Value can be shown without identityAsk when saving, sharing, or continuing
Progressive profilingDetails you need later (company size, phone, avatar)Ask when the answer is used, one at a time
Lifecycle email/pushStalled users, next-step nudgesTriggered by state, one next step, respects opt-outs
Human conciergeHigh-value B2B accounts, early marketplace supplyOffered, never forced

Details, copy, and do/avoid examples for each: references/patterns.md.

Blueprints

Pick the one matching the product shape; full flows with ASCII sketches, copy, and event names are in references/blueprints.md.

BlueprintShape of the first runThe trap to avoid
B2B SaaSSSO sign-up → join existing workspace or create → 1 question → land in a template/sample → first real object → success → invite → checklistInvitees dropped into the creator's welcome flow; duplicate workspaces for the same domain
B2C mobileInstant launch → value-first welcome → 1–3 goal questions → first session before account → "Save your progress" → (paywall, closable) → reminder soft-ask → home with "Continue"Permission prompts and account wall before any value
Developer tool / APIDocs readable without sign-up → keys injected into snippets → sandbox by default → "listening for your first request" → success in dashboard → go-live checklistGating docs; making developers copy keys between tabs
MarketplaceSupply first: staged seller checklist, drafts autosaved, verification before first payout; demand browses without an accountKYC before the first draft; account wall before browsing
AI productStarter prompts or a scoped first task tied to role → first output → "use it" action → honest limits → progressive capability disclosureBlank prompt box; activation measured as "sent a prompt"

Invited teammate (every team product): the invite names the inviter and the object ("Maya invited you to 'Q3 roadmap'"); accepting lands on that object, not a generic welcome; skip the personalization survey (the workspace is already set up); ask only name and avatar; show who else is here.

Permissions and paywall timing

  • Order on mobile: quick win → contextual permission → notification opt-in after value → habit. Both Apple and Android guidance put value first; request a permission at launch only if the app cannot function without it, and say why (HIG Onboarding; Android onboarding guidance).
  • iOS priming screen: if you show a custom screen before the system alert, it has one button ("Continue"/"Next", never "Allow") that opens the alert, with no close or skip that avoids it (Apple HIG privacy). The Android rationale may offer "Not now"; after repeated denials Android stops showing the dialog, so link to Settings instead.
  • Notifications: ask when there is something to be reminded of ("Remind you at 9 pm for tomorrow's session?"), never on first launch.
  • B2B/web products: no paywall or upgrade nag before the first win; upgrade prompts appear at a real limit or moment of value (conversion-ux).
  • Subscription mobile apps: RevenueCat reports most trials start on install day (82% in its 2025 report) and 55% of 3-day-trial cancellations happen on day 0 (2026 report), so many apps show a paywall inside onboarding after personalization. Treat that as a deliberate, tested trade-off, not a default: show value first (a personalized plan preview or first session), keep a visible close/"Continue free", state trial terms, and remind before charging.

Platform details: references/mobile-onboarding.md and mobile-design.

Anti-patterns

Anti-patternWhy it failsFix
Forced multi-step tour on first loadPush help, forgotten, delays value (NN/g)Contextual hints; optional tour ≤ 3 steps
Feature carousel before the appDid not improve task performance in NN/g testing; makes the app look complexOne welcome screen or a preview of real content
Account wall before any valueLoses people before they see the product (Android guidance)Let them try; ask to save progress
Asking company size, role, phone, avatar up frontAdministrative frictionMinimum fields; progressive profiling later
Permission or notification prompt at launchDenied without context; hard to recoverAsk at the moment of need, after value
Blank dashboard or empty tableDead endEmpty state + sample/template + one CTA
Tour re-shown every loginTrains dismissalPersist "seen" per user and per feature; keep it in Help
Questions whose answers change nothingFriction dressed as personalizationBranch on every answer or delete it
Checklist of "watch the tour" itemsMeasures nothingItems are real setup actions that lead to the aha
Paywall or upgrade nag inside setup (B2B)Interrupts the straight line; no value to anchor priceUpgrade after activation, at a limit
Invite step before the first solo winNothing to invite people toInvite framed around the object just created
Logo splash or ad as launch screenSlows launch (HIG Launching)Launch screen mirrors the first screen
Tour completion as the success metricVanity metricActivation rate, time-to-activate, D7/W4 retention

Measurement

  • Funnel per step from sign-up to activation; fix the steepest drop, not the first step.
  • Core metrics: activation rate, time-to-activate (median and p75, not mean), D1/D7/D30 retention (consumer/mobile) or W1/W4/W8 (B2B), all by weekly sign-up cohort and source. Onboarding completion is a diagnostic only.
  • Events: object_action in snake_case, past tense (project_created, invite_sent), with properties for variants ({source, step, is_sample}); one onboarding_step_viewed/completed/skipped family with a step property rather than one event name per screen.
  • Guardrails: an activation gain with lower D30 retention or paid conversion pulled forward low-intent users.
  • Benchmarks are for sanity checks only. Lenny Rachitsky's 2022 survey of 500+ products reported average activation 34% (median 25%); the only target that matters is beating the last cohort.

Tracking-plan template, activation discovery, and more benchmarks with attribution: references/measurement.md.

Returning users and feature announcements

  • Restore state on return (HIG Launching): same screen, scroll position, drafts.
  • After a long gap (for example 30+ days): one "Welcome back — here's what changed" card and "Pick up where you left off"; never replay first-run onboarding.
  • Tier announcements: major capability → one in-app modal + email + changelog; normal feature → "New" dot on the nav item and an inline banner where it applies; small improvement → changelog only. Interrupt only when a change would confuse someone who stumbles on it (moved navigation).
  • "New" badges expire after first use or 14–30 days. Put "What's new" in the help or account menu with an unread dot.
  • Role changes (viewer → admin) get a short mini-onboarding for the new capabilities.
  • Measure adoption as % of active accounts using the feature within 30 days of exposure; Pendo's 2019 report (a vendor) found most features rarely or never used, so measure before building more.

Ethics

The ethics floor from STYLE.md applies. In onboarding specifically:

  • Every tour, survey, and checklist is skippable and dismissible; skipping never blocks the product.
  • No fake progress, fake "setting up your account" delays, or fake scarcity in welcome offers.
  • No confirmshaming on invite, notification, or trial screens ("No thanks, I like missing deadlines").
  • Never send invites from an uploaded address book without the user picking each recipient.
  • Marketing consent is separate and unchecked; notification reminders use the time the user chose and are easy to change.
  • Sample data is labeled; demo numbers are never presented as real results.

Gotchas

  • Designing screens before the activation event. Write action ≥ N within T days first; then every screen answers "does this get them there faster?"
  • Counting sample-data actions as activation. Flag is_sample: true and exclude it, or the metric lies.
  • One flow for creators and invitees. Invitees need to land on the shared object with no setup questions.
  • Porting the Android "Not now" soft-ask to iOS. Apple allows a single "Continue" button on a priming screen.
  • Adding a tour to fix a confusing UI. Fix the UI; a tour is a symptom (NN/g: skip onboarding when possible).
  • Quoting benchmarks as goals. Vendor figures (Userpilot, Chameleon, Pendo, RevenueCat) are directional and must carry "as reported by <vendor>, <year>".
  • Personalization questions that do not branch. If two answers produce the same next screen, delete the question.
  • Lifecycle emails on a calendar only. Trigger them from state ("stalled at step 3 for 24 h"), and link straight into that step.
  • Undismissable checklists. They become banner blindness and annoy activated users; hide on completion or dismissal.
  • Collecting billing or KYC before the first draft in marketplaces and platforms; require it before the first payout or live use.

Output format

Product shape: <…> · Core action: <…> · Value visible without own data: yes/no · Needs others: yes/no
Activation: <action ≥ N within T days> · Setup: <…> · Aha: <…> · Habit: <…> · TTV target: <…>
Path (numbered): 1. <screen — purpose — primary CTA — copy> …
Removed/deferred steps: <step — why>
First-run surfaces: welcome · empty states · checklist items · success moment · invite · permission asks · paywall (if any)
Invitee path: <…>
Events: <event{props}> … · Funnel: <steps> · Guardrails: <metrics>
Returning users / announcements: <…>
Ethics check: pass / <items changed>

For audits: findings as Fix now / High impact / Test ideas, each marked Observed / Inferred / Not checked.

References

FileRead when
references/blueprints.mdDesigning a full first run for a B2B SaaS, B2C mobile app, developer tool/API, marketplace, or AI product, including the invited teammate; you need ASCII sketches, copy, and event names.
references/patterns.mdImplementing a specific pattern: welcome screen, empty state, sample data, templates, checklist, tour, hint, personalization, delayed sign-up, progressive profiling, lifecycle email, celebration.
references/measurement.mdDefining or validating the activation event, writing a tracking plan, naming events, building the funnel, reading cohorts, or quoting a benchmark.
references/mobile-onboarding.mdDesigning first launch on iOS/Android: launch screen, welcome, account timing, permission and notification asks, paywall placement in subscription apps.
references/case-studies.mdPersuading a team, or looking for a real example of a pattern (Duolingo, Trello, Slack, Linear, Notion, Headspace, Stripe, Vercel, PostHog, NN/g studies).

Related skills

  • auth-flows — the sign-up, login, SSO, passkey, and verification screens that precede onboarding.
  • conversion-ux — pricing pages, paywall anatomy, trials, and upgrade prompts after activation.
  • interaction-design — empty, loading, and error states, microcopy, and toasts used in every first-run screen.
  • mobile-design — permission priming mechanics, notification channels, and platform differences.
  • dashboard-design — the home dashboard new users land on and its empty/not-set-up widget states.
  • ux-principles — dark-pattern law, cognitive load, and lightweight usability testing of the flow.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.