Skip to content
Development
Command

/unhappy

State-first design pass — inventories and implements all non-happy states (loading, empty, error, partial, conflict, offline) before the happy path, and refactors impossible boolean state to proper state machines. Use when starting a new screen, reviewing an existing one for

From plugin
ui-craft
45925 skills2 agents25 commands1 hook
+1
> /plugin marketplace add educlopez/ui-craft
> /plugin install ui-craft@ui-craft

Command definition

unhappy.md
description: State-first design pass — inventories and implements all non-happy states (loading, empty, error, partial, conflict, offline) before the happy path, and refactors impossible boolean state to proper state machines. Use when starting a new screen, reviewing an existing one for edge-case gaps, or when the user says "handle the error state" / "add loading states" / "what happens when data is missing".
argument-hint: "[file or component path]"

Design every non-happy state for the UI at `$ARGUMENTS`. Load the `ui-craft` skill and read `references/state-design.md`.

**Step 1 — Inventory.** List every data source and interactive surface in the target. For each, enumerate its states:

| Surface | idle | loading | empty | error | partial | conflict | offline | |---------|------|---------|-------|-------|---------|----------|---------|

Mark each cell as **designed** (exists in code), **missing** (must add), or **N/A** (not applicable — e.g., a read-only view has no conflict state).

**Step 2 — Fill the missing states.** For each missing state, either stub it inline or add a follow-up task comment. Use `references/state-design.md` for:

  • Skeleton sizing (match final layout, 200ms delay, 5s upper bound)
  • Empty-state copy (why empty + next action + visual)
  • Error-state contract (specific cause + one-click recovery + support ID)
  • Offline handling (queue writes + reconcile on reconnect)

**Step 3 — Audit the happy path.** Flag every spot where the happy path assumes resource presence without checking. Fix with early-returns, state guards, or discriminated-union state handling. Booleans like `isLoading && !error && data` that allow impossible states are findings — refactor to a proper state machine or reducer.

**Step 4 — Optimistic UI + reconciliation.** For offline-likely actions (saves, sends, edits, toggles), implement optimistic UI with reconciliation on reconnect. Queue writes locally. Surface any rejected writes — never swallow them.

**Knob gating (CRAFT_LEVEL):**

| CRAFT_LEVEL | Required states to stub | |-------------|-------------------------| | ≤ 4 | idle, loading, error | | 5-7 | idle, loading, empty, error, success | | 8+ | all six — add partial, conflict, offline |

If `CRAFT_LEVEL` is unknown, default to 7.

**Convergence note:** To iterate until all required states are present, load `skills/ui-craft/references/loops.md` and run preset `state-coverage` (budget = the default loop budget defined in loops.md): after stubbing the highest-priority missing required state, re-inventory until all knob-required states are present or budget exhausted. Emit the pre-flight cost notice before iteration 1.

**Output:** edit the code directly. After each file, print the Review Format table from SKILL.md:

| Before | After | Why | | --- | --- | --- | | no loading state on `<ProjectList>` | skeleton rows matching final layout, 200ms delay | prevents "is it broken?" perception; avoids CLS | | generic "Error" toast | inline error with specific cause + retry + support ID | recoverability (heuristic 9) |

One row per state added. No full diffs.

**Next step:** `/harden` — implement the states you just designed (rung 1).

Read more
@educlopez
Ships withui-craft

Ship designer-grade UI by default. A design engineering system for AI coding agents — install it as a skill or as the ui-craft CLI, and your agent starts designing like it has taste. Ask for a dashboard, get one you'd put in production.

45930 skills2 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
459
Star history of educlopez/ui-craft on GitHub, a chart by star-history.com

Other commands on ui-craft.

adapt

adapt

Command

Responsive layout pass covering breakpoints, touch targets, safe areas, and fluid type. Use when the UI has layout or touch…

@educlopez@educlopezInstall Command
animate

animate

Command

Motion design pass — adds purposeful animations or removes excessive ones, respecting MOTION_INTENSITY and the project's…

@educlopez@educlopezInstall Command
audit

audit

Command

Technical UI audit — a11y, performance, responsive. Produces a prioritized findings table.

@educlopez@educlopezInstall Command
bolder

bolder

Command

Amplify personality — raises layout variance and motion, strengthens typography and one signature detail, without slop. Use when…

@educlopez@educlopezInstall Command
brief

brief

Command

Write or update the project's durable design brief at .ui-craft/brief.md.

@educlopez@educlopezInstall Command
clarify

clarify

Command

UX copy review across buttons, errors, empty states, and form hints — critiques by default, applies only on request. Use when…

@educlopez@educlopezInstall Command

More commands from other plugins.

build
Auto-invoked

build

Command

Implement tasks incrementally — build, test, verify, commit. Add "auto" to run the whole plan in one approved pass.

@addyosmani@addyosmaniInstall Command