Use when building, reshaping, or reviewing any web UI (landing page, hero, dashboard, component, marketing site) and it must look designed, not generated. Triggers — a UI that reads flat, generic, templated, or static; calling UI "done" from code/build/TypeScript without looking at a screenshot; deciding whether a design is good enough to ship; prototyping a new template or hero.
The non-negotiable quality bar a UI must clear before it counts as "done".
Core principle: Beauty does NOT come from basic generated code. It comes from
assembly — motion, supporting libraries, rhythm, contrast, depth, overall feel —
and it is judged by eye, not by code. A compiler cannot tell whether a UI is
beautiful; a green build proves nothing about design.
Violating the letter of this bar is violating the spirit of it. A
structurally-correct landing made of stacked correct sections still fails if it
reads as generated.
Clarify First — Hard Gate
Ask whenever ambiguous — one question at a time. Mirror the brainstorming
discipline: one focused question per message, prefer multiple-choice, don't overwhelm.
Keep asking until intent + demo surface are unambiguous; only then start building. "This
looks obvious, I'll just start" is the exact rationalization this gate exists to stop.
Ambiguous = an adjective-only brief ("modern / clean / bold") with no concrete
reference or compositional thesis — see references/pipeline.md Phase 0 gate. This text
Q&A locks WHAT (intent) and WHERE (demo surface); it is SEPARATE from Phase 0's Gu Offer
(references/pipeline.md), which resolves HOW-IT-LOOKS via generated specimens when no
reference exists — don't conflate the two.
Always present the demo-surface options and let the USER pick (never choose silently):
Option
What it is
Best when
HTML demo
Standalone static HTML/CSS mockup, throwaway
Fast look-and-feel exploration, greybox, or a Phase-0 direction specimen — medium-free artifacts
Page-route demo
A route on the dedicated demo server — same stack/framework as production (e.g. React), but a server SEPARATE from the production app; see references/pipeline.md "The review surface"
Reviewing Treatment / Motion / Final — in-stack so you judge the artifact that actually ships
Reconcile with Rule 0 + "The review surface" (references/pipeline.md): an HTML demo of
a React app is a DIFFERENT artifact — fine for greybox / direction specimens, but
Treatment / Motion / Final MUST be reviewed in-stack on the demo server (separate from
production, promote-then-clear), else you judge the wrong thing.
When to Use
Building or reshaping any web UI that needs to feel intentional, not templated.
Reviewing whether a design is good enough to ship.
Prototyping a new template, hero, or signature screen.
The UI works but reads flat / generic / static / one-note.
Use alongsidefrontend-design-direction (pick the direction) — this skill is
the gate the result must pass. Project-specific gate docs (e.g. a PRODUCTION-BAR)
implement this bar locally; this is the portable standard.
The Bar (check by eye on a rendered screenshot, not by reading code)
Concept & focal
ONE signature concept, statable in a single sentence. Can't? Direction is still blurry — stop and sharpen it.
Clear focal artifact in the hero (3D/canvas/art/chart/product), not text on an empty void. If the hero looks like every other hero, it fails.
Swap-test: swapping text + color must NOT turn it into a generic, interchangeable template. If it does, the design is too weak.
Assembly & craft (the non-negotiable layer)
Real craft assembled — motion library + custom/generated assets + smooth scroll + kinetic/magnetic interaction. NOT hand-rolled basic CSS.
Layered depth: background → blocks → detail → interaction → motion. Background carries emotion, not just a fill.
Motion with restraint: the right effect, right place, right rhythm — not many effects. ≥1 moment that makes the viewer stop.
De-stock — no element ships in its default skin
Every common element (grid, card, button, input, divider, badge, section) is CUSTOMIZED so it reads as authored, not framework/Dribbble default. A stock square grid, a flat default button, a plain card = unfinished.
Customize across the full toolbox, not one axis: animation, non-default color/gradient, shadow, blur, border/edge treatment, composition, and how SVG/icon/image/video are combined.
Take the cliché and bend it: square grid → crosshair-tick / scan / masked field; flat button → fill-sweep + arrow slide + micro-shadow; generic card → layered depth + signature hover. The recognizable base is fine; shipping it unbent is not.
Scroll is a design surface: smooth scroll, parallax at differing speeds, reveal-on-scroll — not the browser default jump.
Rhythm & hierarchy
Visual rhythm connects sections; every section earns its place (no filler, no Feature One / lorem / zeros).
CTA pops within a 3-second glance: one primary CTA + one dominant headline, the rest recedes.
Typography has personality + clear hierarchy (no safe defaults). Spacing is intentional, not machine-even. Accent used as a system (2–3 meaningful spots + consistent states).
States & responsive
Mobile is its own design, not a squished desktop. Hover / focus / responsive states are part of the design, not extras.
Workflow
The full build process is the canonical pipeline (Direction → Tokens → Skeleton →
Treatment → Motion → Harden, with Rule 0 — the eye-review gate governing every
phase). Read references/pipeline.md before building — don't work from memory.
Red Flags — STOP
Starting to build while direction OR demo surface is still ambiguous — STOP and ask (one question at a time), never infer. Only a typo / copy string / pre-specified value skips the gate. See "Clarify First — Hard Gate".
About to call UI "done" without looking at a screenshot/recording.
Can't describe the standout point in one sentence.
Hero is text on a void; everything centred, flat, one-note.
Shipping a stock element (square grid, default button, plain card) in its default skin.
Committing a generic skeleton (centred hero, 3-col grid, stacked sections) because composition got deferred to "treatment" — composition is STRUCTURE committed at generate-time, and Treatment can't un-generic it. Set it in Phase 2a (offer 2-3 divergent greyboxes, USER picks) before content. See references/pipeline.md Phase 2a + references/composition-recipes.md.
Accepting the median/default on any lever (tracking, leading, pure-black text, default radius) — set each on purpose. See references/treatment-levers.md.
Applying a design/treatment as final without the user's eye-review — an LLM can't judge beauty; render is for review, not for declaring done. See references/pipeline.md Rule 0.
Reviewing in a lower-fidelity medium than ships (an HTML mockup of a React app) — you'd judge the wrong artifact. Eye-review Treatment / Motion / Final in-stack; only a greybox is medium-free; a spike is ported back + re-reviewed in-stack. See references/pipeline.md Rule 0 + "The review surface".
Clearing a variant from the demo server before promoting the pick into the real artifact — the demo surface is ephemeral; promote first, then delete, else the decision is lost. See references/pipeline.md "The review surface".
Mobile is just the desktop squished.
Rationalizations → Reality
Excuse
Reality
"TypeScript/build passes, so it's done"
Compilers can't see beauty. Not done until a full-page screenshot is attractive.
"It's structurally correct"
Structurally-correct ≠ designed. Stacked correct sections still read as generated.
"Static CSS mockup is fine for now"
Static CSS-blob mockups are 'temporary/generic' — assemble the real craft layer before calling it the design.
"I'll add motion/assets later"
Motion + assembly ARE the design, not a finishing polish. Prototype rich + live first.
"Looks fine in the code/diff"
Judge by eye on a rendered screenshot, never by reading code.
"One big hero headline is enough"
If the hero looks like every other hero, it fails. Needs a focal artifact + signature concept.
"A standard grid / button / card is fine"
If an element looks like the framework or Dribbble default, it's not done. De-stock it with animation, color, shadow, blur, composition, or media — give it its own line.
"I'll set the tracking/leading/opacity to a sensible default"
The default IS the median that reads as generic. Each lever is a deliberate decision; surface the value as a treatment spec and let the user steer it.
"I applied the change, here's the result"
Applying then declaring done skips the eye-review gate. You can't judge beauty. Propose → user steers → apply → render → the user reviews. Never the agent's call.
"The skeleton is just structure; I'll make it look good in treatment"
Composition IS the macro aesthetic lever and is committed at generate-time — Treatment only decorates elements, it can't un-generic a centred-stack skeleton. Commit composition in Phase 2a (offer divergent greyboxes, user picks) before content.
"I'll mock it up in HTML to preview, then build the React version"
An HTML mockup of a React app is a DIFFERENT artifact — you'd review the wrong thing. Exceptions are medium-free: a greybox, and a Phase-0 gu/direction specimen (the generated cousin of a reference / mood-board) — both are fine in static HTML even for a React target. Spikes iterate standalone then port back + re-review in-stack; Treatment / Motion / Final are reviewed in-stack on a dedicated demo server.
"The direction is probably X, I'll just start"
Ambiguity means STOP and ask — one question at a time until intent + demo surface are locked. Never infer silently; only a typo / copy string / pre-specified value skips the gate.
Reference files (read on demand)
This SKILL.md is the lean gate. The depth lives in references/ — read the file
that matches what you're doing; don't work from memory:
When
Read
The build process + the eye-review gate (READ FIRST)
references/pipeline.md
Treating type/buttons; fonts; lever values; "looks unprocessed"
references/treatment-levers.md
An element looks stock (grid/button/card/nav/scroll)
references/de-stock-recipes.md
Adding motion, scroll, kinetic text
references/motion.md
Palette, accent system, depth
references/color.md
Composing the page; layout has gravity / rhythm / responsive
references/layout.md
Picking a composition archetype; skeleton reads generic
references/composition-recipes.md
Picking a lib for an effect
references/libraries.md
Logging / reading reference examples
references/gallery.md (+ screenshots/)
The user's personal taste fingerprint lives in the project memory
frontend-taste-profile.md — load it and design against it. When new references
arrive, distil the through-line into that memory and append entries to
references/gallery.md.
1---2name: frontend-design-bar3description: Use when building, reshaping, or reviewing any web UI (landing page, hero, dashboard, component, marketing site) and it must look designed, not generated. Triggers — a UI that reads flat, generic, templated, or static; calling UI "done" from code/build/TypeScript without looking at a screenshot; deciding whether a design is good enough to ship; prototyping a new template or hero.4---56# Frontend Design Bar78The non-negotiable quality bar a UI must clear before it counts as "done".910**Core principle:** Beauty does NOT come from basic generated code. It comes from11**assembly** — motion, supporting libraries, rhythm, contrast, depth, overall feel —12and it is **judged by eye, not by code**. A compiler cannot tell whether a UI is13beautiful; a green build proves nothing about design.1415**Violating the letter of this bar is violating the spirit of it.** A16structurally-correct landing made of stacked correct sections still fails if it17reads as generated.1819## Clarify First — Hard Gate2021<HARD-GATE>22Do NOT write code, scaffold, generate a skeleton, or apply any treatment until BOTH23are locked: (1) the DIRECTION/intent (idea — what/why), and (2) the DEMO SURFACE the24user will review on. If either is missing or ambiguous, STOP and ask — never infer25silently. Exception: edits with no design/behavior ambiguity and no new review surface26needed (typo, copy string, an already-specified value changed per explicit user27instruction) may proceed directly.28</HARD-GATE>2930**Ask whenever ambiguous — one question at a time.** Mirror the `brainstorming`31discipline: one focused question per message, prefer multiple-choice, don't overwhelm.32Keep asking until intent + demo surface are unambiguous; only then start building. "This33looks obvious, I'll just start" is the exact rationalization this gate exists to stop.3435_Ambiguous_ = an adjective-only brief ("modern / clean / bold") with no concrete36reference or compositional thesis — see `references/pipeline.md` Phase 0 gate. This text37Q&A locks WHAT (intent) and WHERE (demo surface); it is SEPARATE from Phase 0's Gu Offer38(`references/pipeline.md`), which resolves HOW-IT-LOOKS via generated specimens when no39reference exists — don't conflate the two.4041**Always present the demo-surface options and let the USER pick** (never choose silently):4243| Option | What it is | Best when |44| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |45| **HTML demo** | Standalone static HTML/CSS mockup, throwaway | Fast look-and-feel exploration, greybox, or a Phase-0 direction specimen — medium-free artifacts |46| **Page-route demo** | A route on the dedicated **demo server** — same stack/framework as production (e.g. React), but a server SEPARATE from the production app; see `references/pipeline.md` "The review surface" | Reviewing Treatment / Motion / Final — in-stack so you judge the artifact that actually ships |4748Reconcile with Rule 0 + "The review surface" (`references/pipeline.md`): an HTML demo of49a React app is a DIFFERENT artifact — fine for greybox / direction specimens, but50Treatment / Motion / Final MUST be reviewed in-stack on the demo server (separate from51production, promote-then-clear), else you judge the wrong thing.5253## When to Use5455- Building or reshaping any web UI that needs to feel intentional, not templated.56- Reviewing whether a design is good enough to ship.57- Prototyping a new template, hero, or signature screen.58- The UI works but reads flat / generic / static / one-note.5960**Use alongside** `frontend-design-direction` (pick the direction) — this skill is61the gate the result must pass. Project-specific gate docs (e.g. a `PRODUCTION-BAR`)62implement this bar locally; this is the portable standard.6364## The Bar (check by eye on a rendered screenshot, not by reading code)6566**Concept & focal**6768- [ ] ONE signature concept, statable in a single sentence. Can't? Direction is still blurry — stop and sharpen it.69- [ ] Clear focal artifact in the hero (3D/canvas/art/chart/product), not text on an empty void. If the hero looks like every other hero, it fails.70- [ ] Swap-test: swapping text + color must NOT turn it into a generic, interchangeable template. If it does, the design is too weak.7172**Assembly & craft (the non-negotiable layer)**7374- [ ] Real craft assembled — motion library + custom/generated assets + smooth scroll + kinetic/magnetic interaction. NOT hand-rolled basic CSS.75- [ ] Layered depth: background → blocks → detail → interaction → motion. Background carries emotion, not just a fill.76- [ ] Motion with restraint: the _right_ effect, right place, right rhythm — not many effects. ≥1 moment that makes the viewer stop.7778**De-stock — no element ships in its default skin**7980- [ ] Every common element (grid, card, button, input, divider, badge, section) is CUSTOMIZED so it reads as authored, not framework/Dribbble default. A stock square grid, a flat default button, a plain card = unfinished.81- [ ] Customize across the full toolbox, not one axis: animation, non-default color/gradient, shadow, blur, border/edge treatment, composition, and how SVG/icon/image/video are combined.82- [ ] Take the cliché and bend it: square grid → crosshair-tick / scan / masked field; flat button → fill-sweep + arrow slide + micro-shadow; generic card → layered depth + signature hover. The recognizable base is fine; shipping it unbent is not.83- [ ] Scroll is a design surface: smooth scroll, parallax at differing speeds, reveal-on-scroll — not the browser default jump.8485**Rhythm & hierarchy**8687- [ ] Visual rhythm connects sections; every section earns its place (no filler, no `Feature One` / lorem / zeros).88- [ ] CTA pops within a 3-second glance: one primary CTA + one dominant headline, the rest recedes.89- [ ] Typography has personality + clear hierarchy (no safe defaults). Spacing is intentional, not machine-even. Accent used as a system (2–3 meaningful spots + consistent states).9091**States & responsive**9293- [ ] Mobile is its own design, not a squished desktop. Hover / focus / responsive states are part of the design, not extras.9495## Workflow9697The full build process is the canonical pipeline (Direction → Tokens → Skeleton →98Treatment → Motion → Harden, with **Rule 0 — the eye-review gate** governing every99phase). Read `references/pipeline.md` before building — don't work from memory.100101## Red Flags — STOP102103- **Starting to build while direction OR demo surface is still ambiguous** — STOP and ask (one question at a time), never infer. Only a typo / copy string / pre-specified value skips the gate. See "Clarify First — Hard Gate".104- About to call UI "done" without looking at a screenshot/recording.105- Hand-rolling basic CSS instead of assembling motion lib + custom assets.106- Can't describe the standout point in one sentence.107- Hero is text on a void; everything centred, flat, one-note.108- Shipping a stock element (square grid, default button, plain card) in its default skin.109- **Committing a generic skeleton** (centred hero, 3-col grid, stacked sections) because composition got deferred to "treatment" — composition is STRUCTURE committed at generate-time, and Treatment can't un-generic it. Set it in Phase 2a (offer 2-3 divergent greyboxes, USER picks) before content. See `references/pipeline.md` Phase 2a + `references/composition-recipes.md`.110- **Accepting the median/default on any lever** (tracking, leading, pure-black text, default radius) — set each on purpose. See `references/treatment-levers.md`.111- **Applying a design/treatment as final without the user's eye-review** — an LLM can't judge beauty; render is for review, not for declaring done. See `references/pipeline.md` Rule 0.112- **Reviewing in a lower-fidelity medium than ships** (an HTML mockup of a React app) — you'd judge the wrong artifact. Eye-review Treatment / Motion / Final in-stack; only a greybox is medium-free; a spike is ported back + re-reviewed in-stack. See `references/pipeline.md` Rule 0 + "The review surface".113- **Clearing a variant from the demo server before promoting the pick** into the real artifact — the demo surface is ephemeral; promote first, then delete, else the decision is lost. See `references/pipeline.md` "The review surface".114- Mobile is just the desktop squished.115116## Rationalizations → Reality117118| Excuse | Reality |119| --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |120| "TypeScript/build passes, so it's done" | Compilers can't see beauty. Not done until a full-page screenshot is attractive. |121| "It's structurally correct" | Structurally-correct ≠ designed. Stacked correct sections still read as generated. |122| "Static CSS mockup is fine for now" | Static CSS-blob mockups are 'temporary/generic' — assemble the real craft layer before calling it the design. |123| "I'll add motion/assets later" | Motion + assembly ARE the design, not a finishing polish. Prototype rich + live first. |124| "Looks fine in the code/diff" | Judge by eye on a rendered screenshot, never by reading code. |125| "One big hero headline is enough" | If the hero looks like every other hero, it fails. Needs a focal artifact + signature concept. |126| "A standard grid / button / card is fine" | If an element looks like the framework or Dribbble default, it's not done. De-stock it with animation, color, shadow, blur, composition, or media — give it its own line. |127| "I'll set the tracking/leading/opacity to a sensible default" | The default IS the median that reads as generic. Each lever is a deliberate decision; surface the value as a treatment spec and let the user steer it. |128| "I applied the change, here's the result" | Applying then declaring done skips the eye-review gate. You can't judge beauty. Propose → user steers → apply → render → the user reviews. Never the agent's call. |129| "The skeleton is just structure; I'll make it look good in treatment" | Composition IS the macro aesthetic lever and is committed at generate-time — Treatment only decorates elements, it can't un-generic a centred-stack skeleton. Commit composition in Phase 2a (offer divergent greyboxes, user picks) before content. |130| "I'll mock it up in HTML to preview, then build the React version" | An HTML mockup of a React app is a DIFFERENT artifact — you'd review the wrong thing. Exceptions are medium-free: a greybox, and a **Phase-0 gu/direction specimen** (the generated cousin of a reference / mood-board) — both are fine in static HTML even for a React target. Spikes iterate standalone then port back + re-review in-stack; Treatment / Motion / Final are reviewed in-stack on a dedicated demo server. |131| "The direction is probably X, I'll just start" | Ambiguity means STOP and ask — one question at a time until intent + demo surface are locked. Never infer silently; only a typo / copy string / pre-specified value skips the gate. |132133## Reference files (read on demand)134135This SKILL.md is the lean gate. The depth lives in `references/` — read the file136that matches what you're doing; don't work from memory:137138| When | Read |139| --------------------------------------------------------------- | ------------------------------------------ |140| The build process + the eye-review gate (READ FIRST) | `references/pipeline.md` |141| Treating type/buttons; fonts; lever values; "looks unprocessed" | `references/treatment-levers.md` |142| An element looks stock (grid/button/card/nav/scroll) | `references/de-stock-recipes.md` |143| Adding motion, scroll, kinetic text | `references/motion.md` |144| Palette, accent system, depth | `references/color.md` |145| Composing the page; layout has gravity / rhythm / responsive | `references/layout.md` |146| Picking a composition archetype; skeleton reads generic | `references/composition-recipes.md` |147| Picking a lib for an effect | `references/libraries.md` |148| Logging / reading reference examples | `references/gallery.md` (+ `screenshots/`) |149150The user's personal taste fingerprint lives in the project memory151`frontend-taste-profile.md` — load it and design against it. When new references152arrive, distil the through-line into that memory and append entries to153`references/gallery.md`.
Run npx skillmds@latest add mxrsv/frontend-design-bar in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Use when building, reshaping, or reviewing any web UI (landing page, hero, dashboard, component, marketing site) and it must look designed, not generated. Triggers — a UI that reads flat, generic, templated, or static; calling UI "done" from code/build/TypeScript without looking at a screenshot; deciding whether a design is good enough to ship; prototyping a new template or hero. It is listed under Marketing & Growth on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
mxrsv (@mxrsv) published this skill. Their other Agent Skills are listed on their SkillMD profile.