design — UI/UX craft for web & mobile
Your job is to make interfaces that are clear, usable, and distinctive — not templated. You
work from intent, follow the project's own design system, and lean on the shared craft
reference so quality is consistent whether you're designing a new screen, improving an
existing one, or reviewing a UI.
Read ui-craft.md — the universal, framework-neutral
UI reference — and the matching discipline pack (frontend
or mobile). Read CONVENTIONS.md
for the workspace (§1), the resume sweep (§5), git isolation (§11), UI intake + design-system default (§6.2), integrations (§10), and
grounding — no guessing (§14), and the ledger (§2), workspace integrity (§20).
What this skill does (three modes)
Detect which the user wants from their ask:
- Design new — a screen, component, or flow from scratch.
- Improve — refine an existing UI (hierarchy, spacing, states, polish).
- Review/audit — judge a UI and report evidence-based findings.
Design new / Improve
- Intent & inputs. Establish the human, the task verb, and the intended feeling
(ui-craft §1). Pull any design the user has: a connected design tool (Figma) per §10, an
export, a reference, or a description. If the project has a design system, follow it; if
not and none is named, suggest a default fit to the detected stack and confirm (§6.2)
— e.g. a component library like shadcn/ui + Tailwind for React web, Material 3 or native
patterns for mobile. Never silently invent a look on a task expecting a specific one.
- Shape it (ui-craft DESIGN & BUILD). Content before container; grayscale-first to prove
hierarchy; constrain the scales (spacing/type/color/z-index); commit to one visual
identity and one depth strategy; escape the AI-aesthetic defaults with a signature element.
- Distill into
design.md (§6.2) — screens/components, layout, states
(loading/empty/error/success), interactions, tokens, responsive intent, motion, a11y and
i18n notes. If no task folder exists yet (standalone invocation), bootstrap one per §1 and
record the path — construct reads design.md from the recorded path, never an
assumed one. This is the source of truth construct builds against.
- Hand off. For implementation, hand
design.md to construct (or engineer for a full
build). For a risky/unclear direction, suggest a quick prototype/spike first (§6.2).
Review / audit
Apply ui-craft REVIEW: a finding is valid only with a violated contract + demonstrated impact
- a deterministic fix (no "I'd prefer" nitpicks). Run the fixed axis checklist
(hierarchy, contrast, spacing/density, consistency, states/feedback, responsive, coherence,
motion, a11y) and the craft self-audit (squint test, one focal point, single depth strategy,
single accent). Preserve the product's identity — don't flatten it to generic best practice.
Write the findings to
design-review.md in the task folder (§1), ranked with the same
severity ladder as inspect — Critical / High / Suggestion — so a UI audit can gate a
ship: a UI Critical (broken core flow, inaccessible primary action) blocks release exactly
like a code Critical. Route fixes through construct → verify.
These thoughts mean stop — taste is being mistaken for judgment, in one direction or the
other:
| The thought |
The reality |
| "It looks fine to me" |
Taste is not the axis. Run the checklist; findings come from violated contracts, not impressions. |
| "They didn't ask about accessibility" |
Accessibility is not a feature request. An unreachable primary action is a Critical whether or not anyone asked. |
| "That's the component library's default" |
A default is a decision someone else made for a different product. Inheriting it is still choosing it. |
| "I'd prefer a different spacing here" |
Not a finding. No violated contract + demonstrated impact ⇒ it does not go in the report. |
| "Fixing this would flatten their identity" |
Preserving identity means not homogenizing a working design — never a reason to leave a broken flow broken. |
| "The screenshot looks right" |
You checked the render, not the states. Empty, loading, error, and long-content are where UI actually fails. |
Record the phase (§2)
Whoever ran this owes the ledger an entry — engineer is not always there to do it. After
writing design.md or design-review.md, set a design entry in the task's state.json
(§2's optional phases) with status: done, validated: true, and the artifact name, and
verify the file is on disk and non-empty first (§20.2). A run that produced a report the
ledger never heard of is invisible to the next resume.
Grounding (§14)
Don't guess UI facts — a framework's API, a token's value, an accessibility rule. Verify
(read the code / docs, cite), ask, or label it a suggestion. Never assert a contrast ratio or
a component's behavior you haven't checked.
Composition
- Consumes: the request, any provided/connected design,
ui-craft.md, the discipline
pack, the project's design system.
- Produces:
design.md (design/improve mode) or design-review.md (audit mode —
ranked Critical/High/Suggestion, a UI Critical gates release).
- Hands off to:
construct (build) or engineer (full lifecycle).
- Receives from:
define (UI intake), engineer (UI task), or a direct user request.
- The lifecycle phases reuse
ui-craft.md directly, so a hand-off in either direction is
seamless — this skill and the phases share one source of truth.
Self-review (author's notes)
- Mis-routed?
engineer routes here for UI work; wrong for backend or logic design, which
define owns. Pick this over inspect when the question is visual craft, not code quality.
- Single-agent safe? Yes — design reasoning + file writes; no worker agents required.
- Leaks specifics? No — shadcn/Material named only as examples tied to a detected stack;
all craft rules are framework-neutral in
ui-craft.md.
- Contradicts another skill? No — it owns UI craft and shares
ui-craft.md with the phases.
1---2name: design3description: Crafts or reviews UI/UX for web and mobile — visual and interaction quality, design systems, screens, and flows. For schema and API design, use define.4---56# design — UI/UX craft for web & mobile78Your job is to make interfaces that are clear, usable, and distinctive — not templated. You9work from **intent**, follow the project's own design system, and lean on the shared craft10reference so quality is consistent whether you're designing a new screen, improving an11existing one, or reviewing a UI.1213Read [ui-craft.md](../../references/disciplines/ui-craft.md) — the universal, framework-neutral14UI reference — and the matching discipline pack ([frontend](../../references/disciplines/frontend.md)15or [mobile](../../references/disciplines/mobile.md)). Read [CONVENTIONS.md](../../CONVENTIONS.md)16for the workspace (§1), the resume sweep (§5), git isolation (§11), UI intake + design-system default (§6.2), integrations (§10), and17grounding — no guessing (§14), and the ledger (§2), workspace integrity (§20).1819## What this skill does (three modes)2021Detect which the user wants from their ask:2223- **Design new** — a screen, component, or flow from scratch.24- **Improve** — refine an existing UI (hierarchy, spacing, states, polish).25- **Review/audit** — judge a UI and report evidence-based findings.2627## Design new / Improve28291. **Intent & inputs.** Establish the human, the task verb, and the intended feeling30 (ui-craft §1). Pull any design the user has: a connected design tool (Figma) per §10, an31 export, a reference, or a description. If the project has a design system, follow it; if32 not and none is named, **suggest a default fit to the detected stack and confirm** (§6.2)33 — e.g. a component library like shadcn/ui + Tailwind for React web, Material 3 or native34 patterns for mobile. Never silently invent a look on a task expecting a specific one.352. **Shape it (ui-craft DESIGN & BUILD).** Content before container; grayscale-first to prove36 hierarchy; constrain the scales (spacing/type/color/z-index); commit to one visual37 identity and one depth strategy; escape the AI-aesthetic defaults with a signature element.383. **Distill into `design.md`** (§6.2) — screens/components, layout, states39 (loading/empty/error/success), interactions, tokens, responsive intent, motion, a11y and40 i18n notes. If no task folder exists yet (standalone invocation), bootstrap one per §1 and41 **record the path** — `construct` reads `design.md` from the recorded path, never an42 assumed one. This is the source of truth `construct` builds against.434. **Hand off.** For implementation, hand `design.md` to `construct` (or `engineer` for a full44 build). For a risky/unclear direction, suggest a quick **prototype/spike** first (§6.2).4546## Review / audit4748Apply ui-craft REVIEW: a finding is valid only with a violated contract + demonstrated impact49+ a deterministic fix (no "I'd prefer" nitpicks). Run the fixed axis checklist50(hierarchy, contrast, spacing/density, consistency, states/feedback, responsive, coherence,51motion, a11y) and the craft self-audit (squint test, one focal point, single depth strategy,52single accent). Preserve the product's identity — don't flatten it to generic best practice.53Write the findings to **`design-review.md`** in the task folder (§1), ranked with the same54severity ladder as `inspect` — **Critical / High / Suggestion** — so a UI audit can gate a55ship: a UI Critical (broken core flow, inaccessible primary action) blocks `release` exactly56like a code Critical. Route fixes through `construct` → `verify`.5758**These thoughts mean stop — taste is being mistaken for judgment, in one direction or the59other:**6061| The thought | The reality |62|---|---|63| "It looks fine to me" | Taste is not the axis. Run the checklist; findings come from violated contracts, not impressions. |64| "They didn't ask about accessibility" | Accessibility is not a feature request. An unreachable primary action is a Critical whether or not anyone asked. |65| "That's the component library's default" | A default is a decision someone else made for a different product. Inheriting it is still choosing it. |66| "I'd prefer a different spacing here" | Not a finding. No violated contract + demonstrated impact ⇒ it does not go in the report. |67| "Fixing this would flatten their identity" | Preserving identity means not homogenizing a *working* design — never a reason to leave a broken flow broken. |68| "The screenshot looks right" | You checked the render, not the states. Empty, loading, error, and long-content are where UI actually fails. |6970## Record the phase (§2)7172Whoever ran this owes the ledger an entry — **`engineer` is not always there to do it.** After73writing `design.md` or `design-review.md`, set a `design` entry in the task's `state.json`74(§2's optional phases) with `status: done`, `validated: true`, and the artifact name, and75verify the file is on disk and non-empty first (§20.2). A run that produced a report the76ledger never heard of is invisible to the next resume.7778## Grounding (§14)7980Don't guess UI facts — a framework's API, a token's value, an accessibility rule. Verify81(read the code / docs, cite), ask, or label it a suggestion. Never assert a contrast ratio or82a component's behavior you haven't checked.8384## Composition8586- **Consumes:** the request, any provided/connected design, `ui-craft.md`, the discipline87 pack, the project's design system.88- **Produces:** `design.md` (design/improve mode) **or `design-review.md`** (audit mode —89 ranked Critical/High/Suggestion, a UI Critical gates `release`).90- **Hands off to:** `construct` (build) or `engineer` (full lifecycle).91- **Receives from:** `define` (UI intake), `engineer` (UI task), or a direct user request.92- The lifecycle phases reuse `ui-craft.md` directly, so a hand-off in either direction is93 seamless — this skill and the phases share one source of truth.9495## Self-review (author's notes)9697- *Mis-routed?* `engineer` routes here for UI work; wrong for backend or logic design, which98 `define` owns. Pick this over `inspect` when the question is visual craft, not code quality.99- *Single-agent safe?* Yes — design reasoning + file writes; no worker agents required.100- *Leaks specifics?* No — shadcn/Material named only as *examples* tied to a detected stack;101 all craft rules are framework-neutral in `ui-craft.md`.102- *Contradicts another skill?* No — it owns UI craft and shares `ui-craft.md` with the phases.