This skill should be used when the user says "fix the UI", "polish the interface", "clean up the design", "the UI looks rough", "make it look professional", "UI polish", "visual hierarchy is off", "spacing is inconsistent", "typography needs work", "colors clash", "improve readability", "remove AI slop", "make it look less AI-generated", "tighten up the design", or any request to audit and improve the visual quality of an existing interface.
How this skill is triggered — by the user, by Claude, or both
Slash command
/saas-frontend-designer:baseline-uiThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Systematically raise the visual quality floor of an existing interface. Most UIs don't need redesign — they need consistent application of foundational decisions. Run this as a sequential audit.
Systematically raise the visual quality floor of an existing interface. Most UIs don't need redesign — they need consistent application of foundational decisions. Run this as a sequential audit.
Fix in this exact order. Each step compounds on the previous.
Replace arbitrary spacing with Tailwind's 4px grid. Scan every p-, m-, gap-, space- class.
Red flags: arbitrary values like p-[13px], inconsistent padding between sibling elements, different gap values in similar grids.
Fix: Snap all spacing to the scale: 1 (4px), 2 (8px), 3 (12px), 4 (16px), 6 (24px), 8 (32px), 12 (48px), 16 (64px).
Rules:
p-4 (compact) or p-6 (spacious) — pick ONE per density levelspace-y-6 or space-y-8 for form groups, space-y-12 or space-y-16 for page sectionsgap-2 or gap-3gap-6 or gap-8px-4 sm:px-6 lg:px-8Every page needs exactly 4-5 distinct text levels. Scan for: same-size text everywhere, excessive bold, inconsistent font sizes.
Standard type scale:
Page title: text-2xl font-bold text-gray-900 tracking-tight
Section head: text-xl font-semibold text-gray-800
Subsection: text-base font-semibold text-gray-800
Body: text-sm text-gray-600 leading-relaxed
Caption/meta: text-xs text-gray-500
Common failures to fix:
font-normalleading-relaxed to body texttracking-tight on large headingsCount distinct colors used. If more than 5 (excluding semantic), reduce.
Target palette:
Fix pattern: Replace any non-standard color with the nearest gray or brand equivalent. Remove decorative color that doesn't communicate state or hierarchy.
Scan for mixed radius values. Apply per element type:
| Element | Radius | Class |
|---|---|---|
| Buttons | 6px | rounded-md |
| Inputs | 6px | rounded-md |
| Cards | 8px | rounded-lg |
| Badges/chips | full | rounded-full |
| Modals/sheets | 12px | rounded-xl |
| Avatars | full | rounded-full |
Shadows communicate elevation. Audit for: shadows on flat content, inconsistent shadow depth, missing shadows on floating elements.
Rules:
border border-gray-200 insteadshadow-sm or border border-gray-200 (not both)shadow-mdshadow-xlhover:shadow-md transition-shadowEvery clickable element needs all four states. Audit buttons, links, inputs, and cards.
Required states:
// Button states
className="
bg-blue-600 text-white // default
hover:bg-blue-700 // hover
focus:outline-none focus:ring-2 // focus
focus:ring-blue-500 focus:ring-offset-2
disabled:opacity-50 // disabled
disabled:cursor-not-allowed
transition-colors duration-150
"
// Input states
className="
border border-gray-300 // default
hover:border-gray-400 // hover
focus:border-blue-500 focus:ring-2 // focus
focus:ring-blue-500/20 focus:outline-none
disabled:bg-gray-50 disabled:text-gray-400 // disabled
"
Common misses: no focus ring, no disabled state, no hover on cards that are clickable, links with no underline-on-hover.
Scan every data-dependent view. If any view can show zero items, it needs an empty state. If data loads asynchronously, it needs a loading state.
Loading: Use Skeleton components matching the shape of real content. Never show a bare spinner for content areas.
Empty: Icon + headline + description + single action button. Never leave a blank white void.
Forms are the highest-friction UI. Audit every form for:
h-9 or h-10)htmlFor and id pairing on labels and inputs| Symptom | Fix |
|---|---|
| "Looks amateur" | Spacing grid + color reduction |
| "Hard to scan" | Typography hierarchy + section whitespace |
| "Feels cramped" | Increase padding + gap values by one step |
| "Colors clash" | Reduce to brand + grays + semantic |
| "Buttons look weak" | Add font-medium, ensure px-4 py-2 minimum |
| "Text hard to read" | Increase contrast (gray-600 min for body) + line height |
| "Inputs look flat" | Add border border-gray-300 + focus ring |
| "Cards feel heavy" | Replace thick borders with shadow-sm, lighter background |
| "Looks AI-generated" | Vary section layouts, reduce symmetry, add intentional whitespace |
AI-generated UIs have telltale patterns. Fix these to make output look human-crafted:
npx claudepluginhub moxywolfllc/moxywolf-plugins --plugin saas-frontend-designerCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.