ui-polish
Skill0 starsChanged 6 months agoMITView on GitHub
Upgrade a generic-looking UI into something a design-conscious team would ship. Enforces a real type scale, an 8-point spacing grid, semantic color tokens, full interaction states (hover/focus/disabled/loading/empty/error), and tasteful motion. Use when the user says "make this look good", "polish the UI", "improve the design", "this looks like AI slop", "make it look professional", or pastes a screenshot and says it looks off.
17 other projects use a version of this.
Adopted by
Most recently taken up by
- Markssuave/Markssuave-Agent-skillstheir own version, first seen Nov 8, 2026
- lukashouthoofd/cenekathontheir own version, first seen Nov 8, 2026
- trina-app/trina-axtheir own version, first seen Nov 8, 2026
- vijaysuperpositionist/skillstheir own version, first seen Nov 1, 2026
- cindyeme/ui-polishtheir own version, first seen Nov 1, 2026
- aictrl-dev/skillstheir own version, first seen Oct 22, 2026
Used with
Projects with it also use design.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
Microsoft AzureSkilldesign
Design rules and conventions for the API Center Portal. Use when editing detail pages, card components, badges, layout, navigation, sidebars, or headers. Covers badge styling, metadata placement, page navigation patterns, and layout alignment.
Also in 3 projects that use this
Other versions17 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 17
- trina-app/trina-ax★ 117same name
- felvieira/claude-skills-fv★ 27same name
- icons8/agent-skills★ 12same name
- The-Utopia-Studio/skills★ 6same name
- aictrl-dev/skills★ 3same name
- AhmedMerza/agent-skills★ 2same name
- AhmedMerza/claude-skills★ 2same name
- cindyeme/ui-polish★ 2same name
- jukrap/ai-agent-playbook★ 2same name
- lukashouthoofd/cenekathon★ 1same name
7 more not listed
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 repository16 other files it gives its agents.
- for-codex/AGENTS.mdAGENTS.md
- api-architectSkill
- browser-qaSkill
- code-auditorSkill
- doc-craftSkill
- git-flow-proSkill
- mcp-forgeSkill
- perf-hunterSkill
- refactor-masterSkill
- resilience-engineerSkill
- schema-architectSkill
- security-sentinelSkill
- ship-itSkill
- test-architectSkill
- threat-modelerSkill
- type-tightenerSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
17 rules. 0 are common, 9 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 14 edited versions we read keep these.
9
Distinctive
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 16
Do *not* trigger for: a11y-only requests (separate skill territory), pure animation work without a structural problem, or when the design …
- Very specific: line 23
Spacing: every margin/padding/gap is a multiple of 4 (preferably 8).
- Very specific: line 24
Color: every color comes from a token (color-bg-surface, color-text-muted) — not a raw hex inline.
- Very specific: line 25
States covered: every interactive element has explicit :hover, :focus-visible, :active, and :disabled.
- Distinctive: line 33
Read the current component.
- Distinctive: line 36
Alignment: do edges line up? Is there a grid?
- Very specific: line 55
States: add :hover, :focus-visible, :disabled.
- Very specific: line 60
If a dev server is running, use the preview tools (or Playwright via browser-qa) to:
- Distinctive: line 80
Default to a single accent color.
- Very specific: line 81
Use outline-offset: 2px for focus rings.
- Distinctive: line 85
Don't add shadows to fix unclear hierarchy.
- Very specific: line 86
Don't use transition: all.
- Distinctive: line 87
Don't reach for new fonts.
- Distinctive: line 88
Don't center-align everything.
- Distinctive: line 95
Check repo — uses Tailwind with a custom scale.
- Very specific: line 98
Add chart axis labels with the muted color token.
- Distinctive: line 99
Add a loading skeleton (one shimmer line at the right height) for when the metric is fetching.
“Common” is measured: kept by at least 6 in 10 of the 14 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
ui-polish — make the UI look like a real team shipped it
When to use this skill
Trigger when the visual quality of an interface is the bottleneck. Strong signals:
- "make this look better", "polish this page", "improve the design", "this looks AI-generated"
- A screenshot in the conversation with the user pointing out spacing, alignment, or visual hierarchy issues
- A new component just landed and the user wants it to match the rest of the system
Do not trigger for: a11y-only requests (separate skill territory), pure animation work without a structural problem, or when the design system is locked and the user is asking you to break it.
The output contract
Code changes that pass this checklist:
- Type scale: at most 6 sizes in use, geometric ratio (e.g. 12, 14, 16, 20, 24, 32). No
font-size: 13pxone-off. - Spacing: every margin/padding/gap is a multiple of 4 (preferably 8). No
margin: 17px. - Color: every color comes from a token (
color-bg-surface,color-text-muted) — not a raw hex inline. - States covered: every interactive element has explicit
:hover,:focus-visible,:active, and:disabled. Forms have loading + error + empty + success. - Density: deliberate. Marketing pages breathe. Dense data UIs are tight. Don't average.
- Motion: at most one purposeful transition per interaction (e.g. 150ms opacity on hover). No bouncy nonsense.
Workflow
1 — Diagnose before touching
Read the current component. Identify the actual problems, in priority order:
- Hierarchy: can the eye find the primary action in <1 second?
- Alignment: do edges line up? Is there a grid?
- Spacing: is there a rhythm, or are gaps random?
- Contrast: does text actually pass 4.5:1 against its background?
- States: what happens on hover, focus, disabled, loading, empty?
Name the top three problems out loud. Don't start editing until you can articulate what's wrong.
2 — Look at what already exists
- Is there a design system in the repo? (Tailwind config, shadcn/ui, Chakra, Radix, MUI?)
- What spacing scale is in
tailwind.config.{ts,js}or the equivalent? Use it. Don't introduce new tokens unless the user asks. - What components already exist? Reuse
<Button>from the library before hand-rolling one.
3 — Apply the fixes in this order
- Structure first: get the layout grid and visual hierarchy right. Use flex/grid; remove ad-hoc margins.
- Spacing: replace every margin/padding with a token value. Use
gapon flex/grid containers instead of margins on children. - Type: collapse every font size to the existing scale. Set deliberate weights — only
400,500,600,700unless the design system uses something else. - Color: replace inline hex with tokens. If you need a new shade, add it to the config, don't sprinkle.
- States: add
:hover,:focus-visible,:disabled. Replace fade-in with a real loading skeleton or spinner. Add empty states with a one-line "why this is empty + the next action". - Motion: one short transition per interaction.
transition: opacity 150ms easeis usually enough.
4 — Verify with the browser
If a dev server is running, use the preview tools (or Playwright via browser-qa) to:
- Screenshot the new state at desktop + mobile widths
- Tab through interactive elements and confirm focus rings are visible
- Hover over actionable items and confirm state change
Show the user the before/after screenshots. Don't just claim it looks better.
5 — Hand-off
Summarize what you changed in 5 bullets max:
- The structural fix (e.g. "switched to a 12-col grid")
- The spacing rule (e.g. "all margins now multiples of 8")
- The token usage (e.g. "replaced 6 inline hex with
color-text-*tokens") - The new states (e.g. "added loading skeleton, empty state, error inline")
- Anything that should be promoted to the design system
Patterns and anti-patterns
✅ Do:
- Steal mercilessly from existing top-tier UIs. Linear, Vercel, Stripe, Notion — study their spacing rhythm before inventing your own.
- Default to a single accent color. Two is brave. Three is a brand crisis.
- Use
outline-offset: 2pxfor focus rings; never setoutline: nonewithout a replacement. - Match line-height to font size: body 1.5x, headings 1.2x.
❌ Don't:
- Don't add shadows to fix unclear hierarchy. Fix the hierarchy.
- Don't use
transition: all. Be explicit about what animates. - Don't reach for new fonts. The existing one almost always works with better weight + spacing choices.
- Don't center-align everything. Left-align body copy. Always.
Example invocation
User pastes a screenshot of a dashboard card: "this looks like AI slop, make it look good"
- Diagnose: hierarchy is flat (label, value, delta are all the same weight), gaps are random (12, 17, 20px), the chart has no axis labels, focus state is missing on the time-range toggle.
- Check repo — uses Tailwind with a custom scale. Spacing tokens: 1, 2, 3, 4, 6, 8, 12.
- Restructure: bigger weight on the metric value (font-semibold, text-3xl), smaller muted label above (text-xs, text-muted-foreground, uppercase tracking-wide).
- Normalize: all gaps to
gap-2(8px) inside the card,gap-6(24px) between cards. - Add chart axis labels with the muted color token; add
:focus-visiblering to the time-range button. - Add a loading skeleton (one shimmer line at the right height) for when the metric is fetching.
- Show the user before/after, list the 5 changes.
See also
code-auditor— for finding hard-coded magic numbers and inline styles at scalebrowser-qa— to verify the polished UI doesn't break the user flowsrefactor-master— when polishing reveals that the component needs to be split
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.

