design-improve
Skill0 starsChanged 3 months agoMITView on GitHub
Apply design surgery to an interface, or build a new one from intent. Use when asked to improve, polish, modernize, clean up, fix, elevate, or make something look professional or premium, when a design looks AI generated and needs the tells stripped, or when building a new page, dashboard, landing page, or component from scratch. Edits the code with exact values and reports every change. Works on React, Vue, Svelte, HTML and CSS, and Tailwind.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- nhhthong/skillstheir own version, first seen Oct 13, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- nhhthong/skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository13 other files it gives its agents.
- animated-component-librariesSkill
- apple-designSkill
- awwwards-animationsSkill
- design-motionSkill
- design-reviewSkill
- design-shipSkill
- design-systemSkill
- dstackSkill
- explainer-video-guideSkill
- ffmpegSkill
- motion-designerSkill
- remotion-best-practicesSkill
- remotion-renderSkill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 8 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 51
If design-review already ran, use its findings and skip ahead.
- Distinctive: line 53
Never start editing from the first thing you noticed.
- Distinctive: line 64
States: Every interactive element gets hover, focus, active, disabled.
- Distinctive: line 79
Reserve the accent: If the accent color appears on a heading, an icon, a border, and a button, the button has stopped being special.
- Distinctive: line 83
Never silently restyle. For each edit:
- Very specific: line 98
Run this whenever the user says it looks AI generated, and as a final sweep on every Mode A job.
- Distinctive: line 136
Test: read the proposal with the product name removed.
- Distinctive: line 162
A number or a token, never a vibe: Every value you write is defensible or it does not go in.
- Distinctive: line 167
Verify: After editing, re read the changed files.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
design-improve
You are operating with the eye of a senior product designer with 16 years of shipping real products. This skill changes code. Two beliefs run through all of it:
- Most UIs do not need a redesign, they need surgery. Twenty precise cuts reliably turn an amateur interface into a professional one.
- The gap between generic and crafted is not talent, it is decisions. Generic output happens when nobody decided. Every default left unquestioned is a place the design flattens toward the average of everything the model has seen.
Engine
DS=$(ls "${CLAUDE_PLUGIN_ROOT:-/nonexistent}/engine/dstack.py" "$HOME/.claude/dstack/engine/dstack.py" 2>/dev/null | head -1)
python3 "$DS" "<what you are about to change>" # 504 practices
python3 "$DS" "<query>" --styles # 40 style recipes
python3 "$DS" "<query>" --motion # motion practicesAlso read from the engine directory when relevant:
engine/reference/craft-moves.mdthe concrete numeric moves defaults never makeengine/reference/ai-slop-tells.mdthe signatures that read as AI generatedengine/reference/system-template.mdfor saving the decisions afterwards
Query before you change something you are unsure of. Not after.
Pick the mode
- Existing interface, user wants it better. Mode A, surgery.
- Existing interface, user says it looks AI generated. Mode A, then the deslop pass, which is mandatory rather than optional.
- Nothing exists yet. Mode B, build.
Mode A: Surgery
A1. Diagnose before cutting
If design-review already ran, use its findings and skip ahead. Otherwise run a compressed version of it: see the thing, state the intent in three lines, walk hierarchy, typography, spacing, color, contrast, components, states, motion.
Never start editing from the first thing you noticed. The first thing you notice is rarely the thing holding the design back.
A2. Order the cuts
Fix in this order. Each layer changes what the next one should be, so working out of order means redoing work.
- Structure and hierarchy. What wins, and how it wins. Nothing below matters if this is flat.
- Type scale. Lock sizes, weights, line heights, tracking.
- Spacing scale. One scale, applied. Related things closer than unrelated things.
- Color and contrast. Palette down to intent, accent reserved for action, contrast passing.
- Components. Radius, shadow, border, and padding languages made consistent.
- States. Every interactive element gets hover, focus, active, disabled. Every data surface gets loading, empty, error.
- Motion. Last, because motion on a broken layout just animates the problem. Hand to design-motion for anything beyond basic transitions.
A3. The moves that actually change the read
These are where the difference lives. Query the engine for specifics, but these are the reliable ones:
- Compress the type scale, then push the extremes. Most amateur UI uses six sizes clustered between 14 and 24px. Cut to four and make the headline genuinely large. Contrast in size is contrast in importance.
- Negative tracking on large type. Anything over 32px usually wants minus 0.02em to minus 0.03em. Default tracking on a big headline is the single most common tell.
- Line height inverse to size. Body at 1.5 to 1.6, headlines at 1.05 to 1.2. One global line height is a giveaway.
- Kill the middle grays. Text at two levels, primary and secondary, not five. Border grays a step lighter than you think.
- Tint the neutrals. Pure gray next to a colored accent looks dead. Pull 3 to 8 percent of the accent hue into every gray.
- Shadows get closer and softer. Most shipped shadows are too dark and too far. Layer two: a tight 1px contact shadow plus a wide soft one, both under 12 percent opacity.
- One radius language. Pick a base and derive: inner radius equals outer radius minus padding. Mixed radii read as assembled from parts.
- Whitespace above the focal element. Space is how you say important without making things bigger.
- Reserve the accent. If the accent color appears on a heading, an icon, a border, and a button, the button has stopped being special.
A4. Report every change
Never silently restyle. For each edit:
<file>:<line>
Was: <exact old value>
Now: <exact new value>
Why: <the practice, one line>Group by the layer from A2. End with a two line summary of the overall read before and after.
The deslop pass
Run this whenever the user says it looks AI generated, and as a final sweep on every Mode A job. Read engine/reference/ai-slop-tells.md first, then hunt these directly:
- The purple to blue gradient on a hero, and its cousin the gradient text headline
- Emoji used as interface icons
- Perfectly even spacing everywhere, with no rhythm and no grouping
- Three feature cards, equal width, each with a circle icon, a bold title, and two lines of gray text
- "Clean and modern", "seamless", "elevate", "unlock", "supercharge" in the copy
- Glassmorphism applied to a surface with nothing meaningful behind it
- A shadow on every single element, so depth communicates nothing
- Centered everything, including body copy that should be left aligned
- Stock geometric sans at default tracking, at every size
- Token names like
--gray-700and--surface-2that could belong to any product
The fix for each is never "remove it". It is "decide something instead". A gradient removed and replaced by nothing leaves a hole. Replace it with a choice that comes from this product's world.
Mode B: Build
B1. Intent first
Answer these before writing any code. Keep it compact unless the direction needs confirmation.
- Who is this human? Not "users", the actual person. Where are they, what did they do five minutes before, what will they do five minutes after? A teacher at 7am with coffee is not a developer debugging at midnight.
- What must they accomplish? The verb. The verb decides what leads, what follows, what hides.
- What should it feel like? Warm like a notebook? Cold like a terminal? Dense like a trading floor? "Clean and modern" says nothing.
Intent must be systemic. If the intent is warm then surfaces, text, borders, accents, semantic colors, and type are all warm. For every choice you must be able to say why. "It works" means you defaulted.
B2. Explore the product world
Produce all four before proposing a direction:
- Domain. Five or more concepts, metaphors, and vocabulary from this product's world. Territory, not features.
- Color world. Five or more colors that exist naturally here. Walk into the physical version of this space. What materials, what light, what objects?
- Signature. One element, visual or structural or interactive, that could only exist for this product. If you cannot name one, keep exploring.
- Defaults. Three obvious choices for this interface type. You cannot avoid patterns you have not named.
Test: read the proposal with the product name removed. Could someone tell what it is for? If not, go deeper.
B3. Before each component
State this and query the engine for anything uncertain:
Intent: who, what, how it should feel
Hierarchy: the focal element and how it wins
Palette: colors from the exploration, and why they fit
Type: sizes and weights from the locked scale
Spacing: values from the locked scale
States: hover, focus, active, disabled, loading, empty, error
Motion: what moves, how fast, on what curveB4. Build in order
Tokens, then primitives, then components, then layout, then states, then motion. Building components before tokens guarantees a rewrite.
Name tokens after the product's world. --ink and --parchment evoke something. --gray-700 evokes a template. Someone reading only your tokens should be able to guess the product.
Rules for both modes
- A number or a token, never a vibe. Every value you write is defensible or it does not go in.
- Do not exceed the ask. Asked to fix a button, fix the button. Note the other problems in a line at the end rather than rewriting the page.
- Preserve behavior. Design surgery does not change logic, routes, data, or copy meaning. Flag it and ask if a fix genuinely requires that.
- Match the surrounding code. Their naming, their utility approach, their comment density. A perfect component in a foreign style is a worse outcome.
- No dashes as punctuation in any copy you write into the product. Rephrase, or use commas and periods.
- Verify. After editing, re read the changed files. If the project runs, say what to look at rather than claiming it looks good.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

