Ui web
Generate slop-free UI for React + Tailwind + shadcn/ui. Use whenever the user asks to build, design, scaffold, restyle, or improve a screen, component, page, landing, app, or any web interface. Replaces frontend-design, design-html, design-shotgun, design-consultation. Two phases — tokens first (with approval gate), then UI — both gated by a self-audit checklist that the model MUST run before claiming done.From its SKILL.md
npx -y skills add rshzrh/ui-design-skills --skill ui-webAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 1 command, including `pnpm lint:design`.
SKILL.md
6.9 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it
ui-web — Slop-Free Web UI Skill
You are generating production-grade web UI in React + TypeScript + Tailwind. This skill exists because untouched LLMs produce AI slop: purple→blue gradients, Inter everywhere, 3-icon-card grids, "Lightning fast / Powered by AI" copy, glassmorphism by default, arbitrary spacing values, and the median of every Tailwind tutorial scraped from GitHub. This skill replaces guesses with constraints.
The non-negotiable rule: NEVER use a buzzword in place of a token. Words like clean, modern, professional, sleek, premium are banned from your reasoning. Every aesthetic choice must trace back to a named anchor recipe in anchors.md and a token in the project's tailwind.config.ts.
Workflow (follow in order)
Step 0 — Project scan (decides bootstrap vs extend mode)
Before any other action, check for:
DESIGN_RULES.md # at repo root → if exists, you are in EXTEND mode
tailwind.config.{ts,js} # → if exists with custom theme, you are in EXTEND mode
app/globals.css # check for CSS custom properties / tokens
src/styles/tokens.css
- If
DESIGN_RULES.mdexists: read it. Read the existingtailwind.config.*. Skip to Step 3 (Phase 2: UI). Use only existing tokens. NEVER add new colors/spacing/radii without asking. - If tokens exist but no
DESIGN_RULES.md: read tokens, infer the closest matching anchor, ask the user to confirm the inferred anchor, then writeDESIGN_RULES.mdand proceed to Phase 2. - If neither exists: you are in bootstrap mode. Continue to Step 1.
Step 1 — Intake (interactive, bootstrap only)
Use AskUserQuestion to gather, in this order:
- Anchor pick — show the 8 recipes from
anchors.md(one-line summary each). Let the user pick 1–3. If 2–3, ask which is primary and which contributes type vs color vs motion. - Ban menu — show the 8 ban patterns from
ban-patterns.mdwith the 3 default-on items pre-checked. Confirm. - Project context:
- Content density: airy / balanced / dense
- Primary surface: marketing site / app / docs / dashboard / mobile-web
- Dark mode: required / optional / none
- Brand color (if any): hex value or "derive from anchor"
Do NOT ask vibe questions ("how should it feel?"). Ask only the questions above.
Step 2 — Phase 1: tokens (gated)
Generate, in this order:
tailwind.config.ts— extendthemeusing the chosen anchor's recipe. Use the template attemplates/tailwind.config.ts.tmpl. Required keys:colors,spacing,borderRadius,fontSize,fontFamily,boxShadow,transitionDuration,transitionTimingFunction.app/globals.css(orsrc/index.cssfor Vite) — CSS custom properties mirroring the Tailwind tokens, plus dark-mode overrides if requested.eslint.config.jspatch — enable the slop-blocking lint rules fromtemplates/eslint.slop.cjs.tmpl. Add alint:designscript topackage.json.DESIGN_RULES.mdat repo root — filltemplates/DESIGN_RULES.md.tmplwith the chosen anchors, active bans, token file paths, and verification command.CLAUDE.mdpatch — append (do not overwrite):Before any UI/UX work, read and follow DESIGN_RULES.md.
Then run the Token Audit from verification.md and print the PASS/FAIL table to the user. Do not proceed to Phase 2 until the user approves.
Step 3 — Phase 2: UI
Generate the requested screen/component using only tokens from the config. Follow:
component-anatomy.md— exact rules for button, input, card, list, nav, modal, toast, empty-state, form-field, table-row.motion.md— easing curves and durations.copy-voice.md— every string is real, contextual copy. No lorem ipsum, no filler.icons-imagery.md— icon library, sizing, alignment. No emoji bullets in serious UI.
Then run the UI Audit from verification.md AND pnpm lint:design (or npm/yarn equivalent). Print the audit table. Fix every FAIL before claiming done.
Files in this skill
| File | When to read |
|---|---|
anchors.md | Step 1, before showing the user choices. ALWAYS read fully — never quote from memory. |
ban-patterns.md | Step 1, when showing ban menu. Step 2 and 3, when verifying. |
component-anatomy.md | Step 3, before writing any component. |
motion.md | Step 3, when adding any transition or animation. |
copy-voice.md | Step 3, before writing any user-facing string. |
icons-imagery.md | Step 3, when choosing icons or images. |
verification.md | After Step 2 (Token Audit) and after Step 3 (UI Audit). MANDATORY — do not skip. |
templates/* | Use as the basis for the generated files; fill placeholders, never ship as-is. |
Hard rules (the model must obey these always)
- No arbitrary values. Forbidden:
mt-[13px],w-[372px],text-[#3a4f6b],rounded-[7px]. Every value must be a token intailwind.config.ts. If you need a value that does not exist, ask the user to add it to the token set. - No buzzwords in code or comments. Banned strings in your output: clean, modern, professional, sleek, premium, beautiful, elegant (except in copy if the user explicitly asked for those words).
- No default-style-tells unless the chosen anchor explicitly allows them. Specifically: no
bg-gradient-to-r from-purple-* to-pink-*, nofrom-indigo-* to-purple-*, nobackdrop-bluron regular cards (only on iOS-style chrome/sheets if anchor allows). - No filler copy. No lorem ipsum. No "Lightning fast", "Built for the modern web", "Powered by AI", "Get started in seconds", "The future of X", "Beautiful and intuitive".
- Touch targets ≥ 44px on any control intended for tap.
- Focus rings always visible. Never
focus:outline-nonewithout an explicit replacement. - Every async surface has empty + loading + error states. No exceptions.
- Dark mode parity. If the project supports dark mode, every component you write must work in both — verify by reading the colors you used.
- You must run the verification checklist before responding "done". Print the audit table to the user.
What this skill is NOT
- Not a magic-aesthetic generator. You still have to pick an anchor and follow it.
- Not a copy generator. Phase 2 stops and asks for real copy when needed.
- Not a brand-design tool. Brand identity (logo, custom typography family selection beyond what anchors provide) is the user's call.
- Not a replacement for design review with humans. The audit table is a floor, not a ceiling.
What ships with it: 10 files
42.9 KB alongside SKILL.md
templates/
- DESIGN_RULES.md.tmpl2.4 KB
- eslint.slop.cjs.tmpl2.6 KB
- tailwind.config.ts.tmpl3.1 KB
- anchors.md10.1 KB
- ban-patterns.md5.4 KB
- component-anatomy.md6.0 KB
- copy-voice.md3.8 KB
- icons-imagery.md3.1 KB
- motion.md2.1 KB
- verification.md4.5 KB
Gives 0 of the 12 instructions most design frontend skills give in ~1.7k tokens
Counted across 1,179 of the 2,086 authors here whose files we hold, read 2026-09-06
- Commit to a bold aesthetic directionin 31 of 1179, across 24 files
- Prefer component composition over inheritancein 28 of 1179, across 14 files
- Animate only transform and opacity propertiesin 27 of 1179, across 22 files
- Memoize expensive computations with useMemoin 26 of 1179, across 13 files
- Use semantic HTML elementsin 24 of 1179, across 23 files
- Virtualize long lists for performancein 21 of 1179, across 10 files
- Use CSS variables for design tokensin 20 of 1179, across 14 files
- Implement loading, empty, and error statesin 20 of 1179
- Lazy load heavy components with Suspensein 19 of 1179, across 8 files
- Respect prefers-reduced-motion media queriesin 18 of 1179, across 10 files
- Prioritize CSS-only animations for HTMLin 18 of 1179, across 16 files
- Use compound components for related UI elementsin 18 of 1179, across 7 files
Said here and by no other author read
- Ask user to select design anchors and ban patterns
- Extend tailwind config using chosen anchor recipes
- Generate CSS custom properties mirroring tailwind tokens
- Enable slop-blocking lint rules in eslint config
- Run token audit and wait for user approval
- Build components using only defined design tokens
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.