| Say this |
What happens |
Needed? |
experience-status |
Orient — where the design thread is, what’s next |
Optional |
journey-mapping |
Map the user’s outcome: stages, emotions, pains |
Required |
content-design |
Set surface intent — what this screen says and for whom, plus per-surface copy goals and the brand register in its other two modes |
Required |
user-flow |
Build the screen inventory with per-screen state briefs |
Required |
creative-direction |
Anchor the aesthetic in persona and precedent |
Required |
design-system |
Resolve the system’s relationships and values from the direction and the incumbent system |
Conditional |
information-architecture |
Decide what goes where on each screen and how users stay oriented |
Required |
interaction-design |
Design states, feedback, and animation per screen |
Required |
ux-writing |
Characterize the product voice and write per-state UI copy keyed to the state matrix |
Optional |
experience-reviewer |
Independent cold review — forked context, read-only. A reviewer agent the design thread dispatches, described here rather than run like the skills above |
Required |
1. Map the customer journey
Type journey-mapping and describe the outcome you’re designing for — the user, the goal, and where the current experience breaks down.
journey-mapping
journey docs/design/journeys/onboarding.md
Stage 1 Aware finds product, expectations vague
Stage 2 First-session blank state, no direction, high drop-off
Stage 3 Value first export, relief, converts
- You decide: read the journey and redirect it now — a one-sentence correction here is cheaper than one after screens exist. The
approve-journey gate itself covers the journey and the screens derived from it, so it closes at the end of step 2.
- Output: a journey map with the outcome, the key failure modes, and the peak, dip, and end moments marked. Screens are derived next, by
user-flow.
- State: draft
The minimal viable thread
Four steps make the output coherent. Everything else in the pack sharpens them.
journey-mapping — the outcome and the failure modes
user-flow — the screen list and the per-screen briefs
- one craft pass per screen — at minimum
information-architecture, then
interaction-design
experience-reviewer — the cold review
experience-status tells you where you are on it. Walking the shorter thread
is a real choice, not a corner cut: what a skipped step costs is that its input
travels forward as an assumption nobody decided, which is why the four above
are the ones that stay.
Required in the say-this table above is not the same claim as membership
here. There it means the step is required for a complete thread — skipping it
leaves a named gap in the output. Here it means nothing downstream can
reconstruct the step’s input, so dropping it breaks the thread rather than
thinning it. content-design and creative-direction are Required in that
first sense and absent from this list in the second.
Pick the depth — explore is the default
The surface’s risk-tier decides how much of the shared experience contract
the thread owes and how many states each per-screen brief must handle. It is a
per-run choice: the same thread runs at one depth for a prototype and another
for a checkout flow.
explore — the default. 10 of the contract’s 32 fields. States: loading, empty, error, success, content, partial, disabled, keyboard-only, reduced-motion, high-zoom.
pilot — 25 fields. Adds first-run, no-results, blocked, large-data-set.
production — 32 fields. Adds offline, long-content.
Two states sit outside the ladder and bind at every tier once their trigger
fires: permission/denied on a surface behind authorization, and
destructive-confirmation on a primary action that is irreversible or destroys
data the user controls.
What explore drops, and what it never drops. Against production,
explore drops 22 contract fields and 6 states. It drops no state the shared
state-coverage map records as failing WCAG 2.2 AA when absent: all seven banded
accessibility-bearing states are already in the explore set, and the eighth
is destructive-confirmation, which is conditional. The quality floor’s
accessibility commitments hold at every tier — depth changes how much evidence
a surface owes, never whether someone can use it.
2. Derive the screen flow
Type user-flow. The agent sequences the screens implied by the journey and builds a per-screen brief for each, including the full state matrix.
user-flow
screens docs/design/screens/onboarding-flow.md
/onboarding/welcome → /onboarding/connect → /onboarding/done
States per screen: loading · empty · error · success · content · partial · disabled
Approve the journey and screen list? ›
- You decide: the
approve-journey gate closes here — you approve the journey and the screen list together, because the check that earns it is whether every screen traces to a moment in the journey.
- Output: an approved screen inventory with per-screen briefs, ready for the craft sequence.
- State: draft
3. Establish design intent
Type creative-direction to anchor the visual direction in persona, precedent, and platform conventions. Type design-system to resolve that direction into a buildable system.
design-system is conditional: run it when a direction exists and neither a completed design system nor a coherent incumbent system supplies every concrete value the surface needs.
creative-direction
direction docs/design/direction/onboarding.md
Goals Calm confidence, platform-native trust
Ref Linear's focused workspace; Notion's quiet hierarchy
Approve the aesthetic direction? ›
- You decide: approve the direction before screens are designed — a vague direction (“clean and modern”) is a rejection.
- Output: a named aesthetic direction and a resolved design system derived from it.
- State: draft
4. Design each screen
Type information-architecture; when the brief declares a surface genre, it
loads that genre’s method. Then type interaction-design per screen.
interaction-design [/onboarding/welcome]
screen docs/design/screens/onboarding/welcome.md
States: loading · empty · error · success · content · partial · disabled ✓
Motion: entrance · field-focus · submit-feedback ✓
- Output: a designed screen set with all states handled and quality floor met.
- State: draft
5. Write the screen copy
Type ux-writing to characterize the product’s voice and write the per-state strings for each screen, keyed to the state matrix user-flow produced. It loads the brand register from content-design when one exists.
ux-writing
voice docs/product/voice/onboarding.md
Connect screen / error "We couldn't reach your account. Check the address and try again."
Connect screen / empty "No accounts yet. Connect your first one to get started."
- You decide: read the voice and the strings now — a stiff or blaming error message is cheaper to fix before review than after.
- Output: a voice chart and one string per screen × state cell, blame-free and actionable.
- State: draft
6. Review independently
Ask for an independent review of the finished design set. The experience-reviewer agent is dispatched to do it — a reviewer role rather than a skill you type. It reads your design artifacts cold, with no authoring context, and returns findings across handle-all-states, accessibility, aesthetic fit, and cross-screen coherence.
independent review — findings returned in session
Blocker Welcome screen: empty state not designed
Concern Connect screen: error text has no recovery action
Nit "Get started" → "Connect your first account"
- You decide: act on Blockers before design feeds the build loop.
- Output: a review-clean design set ready for build.
- State: confirmed-write
What crosses to frontend engineering
Three artifacts leave this pack and are read by the frontend-engineering
pre-flight. Each path is relative to the design output directory this pack is
configured to write to.
| Artifact |
Path |
Written by |
| Aesthetic direction |
direction/<slug>.md |
creative-direction |
| Per-screen brief |
screens/<slug>/<screen>.md |
user-flow, enriched by interaction-design |
| Token taxonomy |
tokens/<slug>.md |
design-system |
A slot no artifact fills is not an error: the frontend pre-flight resolves that
axis from a lower rung of its visual-authority precedence and records which rung
supplied it.
Exception: a resolved direction beside a named-skipped token taxonomy, with no
incumbent system supplying the axis, holds and routes that axis upstream.
Ordinary genuinely open axes may still resolve from lower rungs.