Ask an agent for a landing page and you get the same templated hero, the same three
feature cards, the same indigo gradient. Ask for a product screen and half its states are missing, with
prototype code passed off as production. design replaces both with a controlled process: name the
register — whether the design IS the product (a brand site built to be remembered) or SERVES
it (a dashboard trusted on sight) — route to the one job that fits, then produce a distinctive,
state-complete artifact with exact tokens. Experience design for websites, web apps, iOS, and Android.
# one skill, two registers — the register sets the bar/design set a visual direction for a studio's landing page — pick a macrostructure, one bold move
/design design an onboarding flow for a budgeting app — state-complete, iOS first
Not a fixed pipeline — a router. Enter at whatever job you have: "set a visual direction for
this landing page" pulls direction plus its craft leaves; "critique this dashboard" jumps straight to the
critique gate; "map this checkout" runs one journey. Every route selects the smallest sufficient
reference set — one primary job, at most one surface overlay, only the concerns that matter — and nothing
unrelated is loaded.
/design a studio landing page — macrostructure, one bold move → the router composes the smallest sufficient set:
3 of 21 references loaded → a distinctive artifact → validate → handoff · nothing unrelated is read
The skill operates standalone — invoked alone it runs the full loop; given compatible
upstream artifacts it builds on them without silently overriding established decisions.
identify the primary jobPick the one design job the request is really about — research, a journey, information architecture, an interaction spec, visual direction, a craft leaf, a prototype, a design system, a critique, or a handoff. → SKILL.md
add at most one surface overlayWebsite, web app, iOS, or Android — the surface picks the register (design IS the product vs design SERVES it) and the platform numbers. Add more than one only when the task explicitly compares platforms.
add only the concerns that matterAccessibility and content design come in as overlays when the request materially involves them — not by default.
read fully, then produceRead each selected reference completely, then emit the design artifact with exact values — tokens, sizes, spacing, timings — and the full state set, not adjectives.
validate & hand offCheck the artifact against the goal, constraints, and edge states; record assumptions and risks; emit a compact handoff when downstream implementation is expected.
The critique route is a scored gate with a binary verdict — a fail routes back to the craft reference that owns the problem. And a visual verdict requires rendered evidence: with no build viewed, the skill says "code-level pass, not an art review" rather than signing off on appearance.
Register first
Before any craft, the skill names the register — per surface, not per project. It's the
single decision that sets the bar for everything after, and the audience picks it, not taste. Get it
wrong and a dashboard tries to be memorable, or a landing page settles for competent.
design IS the product
distinctiveness is the bar
Brand sites, landing pages, portfolios, launch microsites — anything whose job is to be noticed and remembered.
Take the aesthetic risk; type can be a character; one signature element carries the boldness.
Pick a macrostructure and a committed aesthetic lane, set the premium↔information dial, and spend expressive type on one signature — never the reflexive templated hero.
design SERVES the product
earned familiarity is the bar
Dashboards, app shells, settings, dense daily tools — a fluent Linear/Figma user must trust and operate it on sight.
Surprise is a cost. This register inverts several defaults: fixed rem over fluid, proven patterns over novelty.
Every interactive component gets its full state set; Inter / SF Pro is a legitimate pick, not a tell.
One bold move, then restraint. The shared trait of Linear, Stripe, and
Vercel is restraint, not a look — spend boldness in one place per section and keep everything else quiet.
Two bold moves compete; zero reads generic.
Before the pixels
Most of the work lands before a single pixel is styled. The upstream jobs — research,
journeys, and information architecture — decide what's true, what path a person takes, and
where everything lives. Skip them and you get a pretty screen answering the wrong question.
research
"When I'm reviewing my budget mid-month, I want to see what's left — so I can stop before I overspend."
observedinferredassumed
jobs · interviews · surveys · usability · design-DNA — every finding marked by its evidence.
journeys · breadboard
Place Budget overview
Add expense → Expense sheet
[ remaining · this month ]Place Expense sheet
Save → Overview
edges empty · loading · error · offline
Structure before pixels — every affordance names a destination; edges are required steps.
information architecture
Home
├ Budgetslist + detail
├ Expenseslist + detail
└ Settings
objects Budget ─< Expense
nav ≤7 · any item < 3 clicks
An OOUX object model, a sitemap, a navigation model — the load-bearing layer beneath every surface.
Every coded artifact carries one label — disposabledesign-referenceproduction-candidate — so prototype code is never passed off as production.
A design system is a contract — layered tokens (primitive → semantic → component) plus a DESIGN.md / PRODUCT.md a team and its engineers build against.
The craft, in exact values
When direction is set, the craft leaves carry it — each with precise tokens, not adjectives.
Typography, color, layout, motion, interaction states, and depth are separate references the router
loads only when the job needs them. A sample of what each one decides:
typography · the scale
Ag39 h1
Ag31 h2
Ag25 h3
Ag20 lead
Ag16 body
ratio 1.25 major third · ≤5 sizes · display caps ≤88px · measure 66ch · 2+1 families
color · OKLCH, owned
accent hue 293 · hover L−0.03 · active L−0.05 · accent ≤5% of the viewport
every element in eight states — plus empty for every data region; focus designed separately (:focus-visible), border width constant across states.
imagery & depth · elevation
xssmmdlgxl
one light source, light & diffuse — heavy black shadows read dated; on dark, build elevation from lighter surfaces, not shadow.
The non-negotiable laws
These universal invariants govern every reference — the load-bearing ones, condensed.
Register firstName the register per surface before craft — design IS the product (brand, marketing) vs design SERVES it (dashboards, app shells). The audience picks the aesthetic, not taste; the serve register legitimately inverts several distinctiveness defaults.
Design the full state setDefault, hover, focus, active, disabled, loading, error, success — plus empty for every data region. Missing states are the usual gap between a mock and a real product.
One bold move, then restraintSpend one bold move per section or page and keep everything else quiet. Two bold moves compete; zero reads generic.
Real content, real lengthsUse the longest realistic string, the empty case, the overflow case. Never fabricate metrics, logos, testimonials, or decorative data.
Label the maturityEvery coded artifact is disposable, design-reference, or production-candidate. Never present prototype code as production-ready without engineering, accessibility, and quality review.
Accessibility floors are constraintsContrast, target size, focus order, and reduced-motion hold even when the accessibility reference is never opened.
A visual verdict needs rendered evidenceWhen no build was viewed, the skill states "code-level pass, not an art review" rather than signing off on appearance — and it preserves established product, brand, and architecture constraints, reporting any conflict rather than silently overriding it.
Pick by job
The SKILL.md is a router — load only the reference your current job needs. A condensed cut of the primary-job table:
I need to…
Read
Plan or synthesize UX research — interviews, surveys, usability, design-DNA
Full table — plus the surface and concern overlays: SKILL.md.
Complementary, not duplicated: production frontend build (frontend-skill), system architecture and feasibility (architecture-skill), acquisition and SEO (marketing-skill), independent audits and release verification (quality-skill), and product strategy and metrics (product-skill) are separate skills in the digital-product-skill family that this one hands off to.
The critique gate
Critique is its own route — a scored review, not a vibe check, kept strictly separate from fixing.
The bar isn't "does the grid align" but "would a design lead at Linear or Apple put their name on this?"
It judges against the design's own intent, then returns a binary verdict and a Before/After/Why
punch-list — never a patch.
GOAny P0, or a P1 you can't immediately fix, is NO-GO. Round 1 never signs off.
Honesty rule: most shipped interfaces score 20–32 — a 38 means you aren't looking hard
enough. And a visual verdict requires rendered evidence: with no build viewed, the skill reports a
"code-level pass, not an art review" rather than signing off on appearance.
Reference map
21 references, grouped by facet — primary jobs, surface overlays, and concern overlays. Every one is
copy-pasteable rather than abstract; the whole point of the router is that you never read all of them at once.
The skill owns experience intent, not production code — so a route that expects downstream
work ends in a handoff: a package an engineer who was never in the room can build from. It ships
tokens twice (a structured JSON block for tooling and a human design map), a motion plan with exact
curves and durations, and a compact handoff.yaml companion for pipeline routing.
The handoff is the seam with the rest of the digital-product-skill
family. design hands the approved intent to frontend-skill to implement, and recommends
architecture, marketing, quality, or product when the job calls for them —
it recommends, never auto-invokes.
The package targets at least Level 4 on a 1–5 maturity ladder
(screenshot → annotated → interactive spec → full spec → integrated). When cutting scope, it never cuts
error states or accessibility.
Start here
Install once. It's a plain SKILL.md router — no flags, no config, no scripts —
so it activates on design language ("design an onboarding flow", "set a visual direction for this app",
"critique this dashboard", "spec the states for this form") rather than a fixed command.
# skills.sh ecosystem
npx skills add gabros20/design-skill
# clone + installer (per-host targets)
git clone https://github.com/gabros20/design-skill && cd design-skill
./install.sh codex # or: claude | agents | cursor | antigravity | opencode | grok | hermes | all# use/design set a visual direction for a fintech dashboard — name the register, one bold move
/design critique this checkout against its intent — scored, go/no-go verdict
The same install runs on any Agent Skills
host. Codex installs to ${CODEX_HOME:-$HOME/.codex}/skills; agents
remains a separate cross-agent installation target.
install targets by host
host
install target
command
Claude Code
~/.claude/skills
./install.sh claude
Codex
${CODEX_HOME:-$HOME/.codex}/skills
./install.sh codex
Cross-agent path
~/.agents/skills
./install.sh agents
Cursor CLI
~/.cursor/skills
./install.sh cursor
Antigravity (IDE + agy)
~/.gemini/…/skills
./install.sh antigravity
opencode
~/.config/opencode/skills
./install.sh opencode
Grok Build
~/.grok/skills
./install.sh grok
Hermes
~/.hermes/skills
./install.sh hermes
Prefer npx skills add gabros20/design-skill when you have Node — it maps supported clients itself.