skills/ui-polish-review/SKILL.md
Use when reviewing any web or app interface for visual quality — walks through Refactoring UI principles covering hierarchy, spacing, typography, color, depth, images, and finishing touches to elevate design from amateur to professional.
npx skillsauth add ahmedhamadto/software-forge ui-polish-reviewInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A structured visual design audit methodology based on Refactoring UI by Adam Wathan and Steve Schoger. Guides you through 7 sequential phases to systematically evaluate and improve the visual quality of any web or application interface, transforming rough or inconsistent designs into polished, professional ones.
Work through each phase sequentially. At each phase:
front-end-design/refactoring-ui/ for detailed guidanceCRITICAL / HIGH / MEDIUM / LOW / INFOIf the application does not have a relevant surface for a phase (e.g., no user-uploaded images), acknowledge and skip with rationale.
digraph audit_phases {
rankdir=TB;
node [shape=box, style=rounded];
p1 [label="Phase 1\nVisual Hierarchy"];
p2 [label="Phase 2\nLayout & Spacing"];
p3 [label="Phase 3\nTypography"];
p4 [label="Phase 4\nColor"];
p5 [label="Phase 5\nDepth & Shadows"];
p6 [label="Phase 6\nImages & Icons"];
p7 [label="Phase 7\nFinishing Touches"];
report [label="UI Polish\nReport", shape=note];
p1 -> p2 -> p3 -> p4 -> p5 -> p6 -> p7 -> report;
}
Reference: front-end-design/refactoring-ui/ch02-hierarchy-is-everything.md
Goal: Verify that the interface communicates a clear, intentional visual hierarchy so users instantly know what is most important, secondary, and tertiary.
Questions to ask:
Tests to run:
# Find font-size declarations without corresponding weight/color differentiation
# Red flag: many different font-sizes but uniform font-weight and color
grep -rn "font-size" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
# Find multiple primary-styled buttons on the same screen (hierarchy violation)
grep -rn "btn-primary\|variant=\"primary\"\|variant='primary'\|type=\"primary\"\|isPrimary\|button.*primary" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue"
# Check for destructive actions given excessive visual prominence
grep -rn "btn-danger\|variant=\"destructive\"\|variant=\"danger\"\|bg-red-\|bg-destructive" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue"
# Find label-heavy patterns that might be unnecessary
grep -rn "label.*:\|<label\|<Label" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue"
Visual inspection checklist:
Finding template:
[SEVERITY] Visual Hierarchy: [description]
Affected: [component/screen]
Issue: [what breaks the hierarchy]
Impact: [how it confuses or overwhelms users]
Fix: [specific recommendation — e.g., "reduce secondary text to #666, use font-weight 400"]
Reference: front-end-design/refactoring-ui/ch03-layout-and-spacing.md
Goal: Verify the interface uses a consistent, systematic spacing scale and that layout decisions support content readability and visual grouping.
Questions to ask:
Tests to run:
# Search for arbitrary padding/margin values not on a standard 4px or 8px scale
# Red flags: odd numbers, values like 13, 17, 21, 37, 43
grep -rn "padding:\s*[0-9]\+px\|margin:\s*[0-9]\+px\|gap:\s*[0-9]\+px" --include="*.css" --include="*.scss"
grep -rn "p-\[.*px\]\|m-\[.*px\]\|gap-\[.*px\]" --include="*.tsx" --include="*.jsx" --include="*.html"
# Check for max-width constraints on text containers (readability)
grep -rn "max-width\|max-w-\|prose\|container" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
# Find hardcoded spacing values that might be arbitrary
grep -rn "13px\|17px\|21px\|37px\|43px\|51px\|67px\|73px\|81px" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
# Check for consistent use of spacing utilities (Tailwind)
grep -rn "p-[0-9]\|m-[0-9]\|gap-[0-9]\|space-[xy]-[0-9]" --include="*.tsx" --include="*.jsx" --include="*.html"
Visual inspection checklist:
Finding template:
[SEVERITY] Layout & Spacing: [description]
Affected: [component/screen]
Issue: [arbitrary value, inconsistent spacing, unconstrained width]
Current: [what it is now — e.g., "padding: 13px"]
Fix: [nearest scale value — e.g., "use padding: 12px (3 on 4px scale) or 16px (4 on 4px scale)"]
Reference: front-end-design/refactoring-ui/ch04-designing-text.md
Goal: Verify the interface uses a disciplined, limited type system with proper line height, line length, and font weight management.
Questions to ask:
Tests to run:
# Count distinct font-size values in use (too many = no type scale)
grep -rn "font-size:" --include="*.css" --include="*.scss" | grep -oP "\d+px" | sort -u
# Check for Tailwind text size classes
grep -rn "text-\(xs\|sm\|base\|lg\|xl\|2xl\|3xl\|4xl\|5xl\|6xl\|7xl\|8xl\|9xl\)" --include="*.tsx" --include="*.jsx" --include="*.html"
# Find line-height values — check for consistency and proportionality
grep -rn "line-height:" --include="*.css" --include="*.scss" | grep -oP "[\d.]+" | sort -u
# Find center-aligned text on potentially long content (readability issue)
grep -rn "text-align:\s*center\|text-center" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
# Count distinct font-weight values (too many = inconsistent)
grep -rn "font-weight:" --include="*.css" --include="*.scss" | grep -oP "\d+" | sort -u
# Check for font-weight Tailwind classes
grep -rn "font-\(thin\|extralight\|light\|normal\|medium\|semibold\|bold\|extrabold\|black\)" --include="*.tsx" --include="*.jsx" --include="*.html"
# Find arbitrary font sizes that suggest no type scale
grep -rn "font-size:\s*\(13\|15\|17\|19\|21\|22\|23\|25\|26\|27\|28\|29\|31\|32\|33\|34\|35\)px" --include="*.css" --include="*.scss"
Visual inspection checklist:
Finding template:
[SEVERITY] Typography: [description]
Affected: [component/screen]
Issue: [e.g., "23 distinct font sizes in use — no type scale"]
Impact: [inconsistency, poor readability, lack of rhythm]
Fix: [e.g., "consolidate to a 10-step type scale: 12, 14, 16, 18, 20, 24, 30, 36, 48, 60"]
Reference: front-end-design/refactoring-ui/ch05-working-with-color.md
Goal: Verify the interface uses a defined, systematic color palette with proper contrast, tinted greys, and consistent application.
Questions to ask:
Tests to run:
# Count unique color values to find ad-hoc colors
grep -rn "#[0-9a-fA-F]\{3,8\}" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx" | grep -oP "#[0-9a-fA-F]{3,8}" | sort -u
# Search for pure greys (should be warm/cool tinted instead)
grep -rn "#333\b\|#444\b\|#555\b\|#666\b\|#777\b\|#888\b\|#999\b\|#aaa\b\|#bbb\b\|#ccc\b\|#ddd\b\|#eee\b" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
grep -rn "#333333\|#444444\|#555555\|#666666\|#777777\|#888888\|#999999\|#aaaaaa\|#bbbbbb\|#cccccc\|#dddddd\|#eeeeee" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
# Check for CSS custom properties / design tokens for colors (good sign)
grep -rn "--color\|--primary\|--secondary\|--accent\|--grey\|--gray\|--neutral" --include="*.css" --include="*.scss"
# Check for Tailwind color usage patterns
grep -rn "text-gray-\|bg-gray-\|border-gray-" --include="*.tsx" --include="*.jsx" --include="*.html"
# Find potential low-contrast text (light colors on white backgrounds)
grep -rn "color:\s*#[a-fA-F0-9]\{6\}" --include="*.css" --include="*.scss"
# Check for opacity-based text de-emphasis (preferred on colored backgrounds)
grep -rn "opacity:\|text-opacity-\|\/[0-9]\{1,2\}\b" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
Visual inspection checklist:
Finding template:
[SEVERITY] Color: [description]
Affected: [component/screen]
Issue: [e.g., "47 unique hex values — no defined palette" or "#666 pure grey used for body text"]
Contrast: [ratio if applicable — e.g., "2.8:1 (fails WCAG AA 4.5:1 requirement)"]
Fix: [e.g., "define a 9-shade grey palette with warm tint: #f8f7f6 to #1c1917"]
Reference: front-end-design/refactoring-ui/ch06-creating-depth.md
Goal: Verify the interface uses shadows and depth consistently, from a single light source, and avoids overusing borders where shadows or spacing would create cleaner separation.
Questions to ask:
Tests to run:
# Count and compare border vs box-shadow usage
grep -rn "box-shadow:" --include="*.css" --include="*.scss"
grep -rn "border:" --include="*.css" --include="*.scss"
grep -rn "shadow-\(sm\|md\|lg\|xl\|2xl\)" --include="*.tsx" --include="*.jsx" --include="*.html"
grep -rn "border\b" --include="*.tsx" --include="*.jsx" --include="*.html"
# Check shadow values for consistency (should reuse the same set)
grep -rn "box-shadow:" --include="*.css" --include="*.scss" | grep -oP "box-shadow:.*?;" | sort -u
# Check for CSS custom properties for shadows (good sign)
grep -rn "--shadow\|--elevation" --include="*.css" --include="*.scss"
# Find border-top/bottom used as dividers (could often be spacing or background instead)
grep -rn "border-top:\|border-bottom:\|border-b\b\|border-t\b\|divide-" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
# Check for inconsistent shadow directions (offset-x should typically be 0)
grep -rn "box-shadow:" --include="*.css" --include="*.scss"
Visual inspection checklist:
Finding template:
[SEVERITY] Depth & Shadows: [description]
Affected: [component/screen]
Issue: [e.g., "12 unique shadow values with inconsistent x-offsets" or "borders used for all separation"]
Fix: [e.g., "define 5 shadow levels as CSS variables: --shadow-sm through --shadow-2xl, all with 0 x-offset"]
Reference: front-end-design/refactoring-ui/ch07-working-with-images.md
Goal: Verify that images and icons are handled professionally -- controlled aspect ratios, consistent icon styles, readable text on images, and designed empty/placeholder states.
Questions to ask:
Tests to run:
# Check for object-fit usage on images (good sign for controlled aspect ratios)
grep -rn "object-fit:\|object-cover\|object-contain\|object-fill" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
# Check for aspect-ratio controls
grep -rn "aspect-ratio:\|aspect-\(square\|video\|auto\)" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
# Find img tags without explicit sizing (layout shift risk)
grep -rn "<img\|<Image" --include="*.tsx" --include="*.jsx" --include="*.html"
# Check for alt text on images
grep -rn "alt=\"\"\|alt=''" --include="*.tsx" --include="*.jsx" --include="*.html"
# Search for icon libraries in use — check for mixed styles
grep -rn "lucide\|heroicons\|font-awesome\|material-icons\|phosphor\|tabler\|feather" --include="*.tsx" --include="*.jsx" --include="*.ts" --include="*.js"
# Check for empty state handling
grep -rn "empty\|no-data\|no-results\|placeholder\|fallback\|skeleton" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue"
# Check for text-on-image readability techniques
grep -rn "text-shadow\|backdrop\|overlay\|bg-black/\|bg-gradient-\|from-black\|bg-opacity" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
Visual inspection checklist:
Finding template:
[SEVERITY] Images & Icons: [description]
Affected: [component/screen]
Issue: [e.g., "user avatars stretch when non-square images are uploaded"]
Fix: [e.g., "add object-fit: cover with a 1:1 aspect ratio container, provide a default avatar SVG fallback"]
Reference: front-end-design/refactoring-ui/ch08-finishing-touches.md
Goal: Elevate the interface from "functional" to "polished" with the small details that distinguish professional design from amateur work.
Questions to ask:
Tests to run:
# Check for loading/skeleton states
grep -rn "skeleton\|shimmer\|loading\|spinner\|Loader\|isLoading\|isPending" --include="*.tsx" --include="*.jsx" --include="*.html" --include="*.vue"
# Check for error boundary / error state handling
grep -rn "error\|Error\|ErrorBoundary\|error-message\|toast\|notification\|alert" --include="*.tsx" --include="*.jsx"
# Check for consistent border-radius (should be from a defined set)
grep -rn "border-radius:" --include="*.css" --include="*.scss" | grep -oP "\d+px" | sort -u
grep -rn "rounded-\(sm\|md\|lg\|xl\|2xl\|3xl\|full\|none\)" --include="*.tsx" --include="*.jsx" --include="*.html"
# Check for transitions/animations
grep -rn "transition:\|animation:\|@keyframes\|transition-\|animate-\|motion\|framer-motion\|spring" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
# Check for accent/decorative elements
grep -rn "border-top:\s*[0-9].*solid\|border-left:\s*[0-9].*solid\|accent\|highlight\|decoration" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
# Check for focus-visible states (interaction polish)
grep -rn "focus-visible\|focus:\|:focus\|outline:" --include="*.css" --include="*.scss" --include="*.tsx" --include="*.jsx"
Final consistency checklist:
border-radius drawn from a consistent set of values (not 15 different radii)?Finding template:
[SEVERITY] Finishing Touches: [description]
Affected: [component/screen]
Issue: [e.g., "empty state shows 'No data' text with no illustration or CTA"]
Fix: [e.g., "add an illustration, a descriptive message, and a primary action button to guide the user"]
| Severity | Criteria | Examples | |----------|----------|---------| | CRITICAL | Broken layout, inaccessible contrast, content unreadable or unusable | Text contrast below 3:1, content overflows viewport, images distort or break layout, text overlaps other elements | | HIGH | No visual hierarchy, arbitrary spacing, no type scale, no color system | All text same size/weight/color, random pixel values throughout, 50+ unique colors with no palette, everything competing for attention | | MEDIUM | Inconsistent shadows, pure greys, mixed icon styles, no defined elevation system | Shadows from different light sources, #666 pure grey body text, half outline / half solid icons, inconsistent border-radius | | LOW | Missing finishing touches, minor inconsistencies, could-be-better details | No skeleton loading states, empty states show only "No data", some hover states missing, slightly inconsistent spacing | | INFO | Polish suggestions, opportunities to elevate, nice-to-have improvements | Could add accent borders for visual interest, transitions could be smoother, micro-interactions would enhance the experience |
| Mistake | Fix | |---------|-----| | Relying on font size alone for hierarchy | Use the three-tool approach: size + weight + color/contrast together | | Using pure greys (#333, #666, #999) | Tint your greys warm (yellowish) or cool (bluish) for a more polished feel | | Arbitrary spacing values (17px, 23px) | Adopt a spacing scale (4, 8, 12, 16, 24, 32, 48, 64) and never deviate | | Too many font sizes | Define a type scale of 8-12 sizes and use only those | | Borders everywhere for separation | Replace borders with spacing, background contrast, or subtle shadows | | Center-aligning long text | Left-align any text that runs more than 2-3 lines | | Neglecting empty states | Design every zero-content state with illustration, message, and CTA | | Inconsistent icons (mixed outline and solid) | Pick one icon family and one style; use it everywhere | | Making destructive actions visually prominent | De-emphasize destructive actions; make the safe/primary action dominant | | Skipping loading and error state design | Design skeleton screens, error messages, and transition states deliberately |
Generate the UI polish report:
# UI Polish Review Report: [Application/Component Name]
**Date:** [date]
**Reviewer:** [name]
**Scope:** [what was reviewed — screens, components, pages]
## Executive Summary
[1-2 paragraph summary of overall visual quality and key improvement areas]
## Design System Status
| Dimension | Status | Notes |
|-----------|--------|-------|
| Spacing Scale | Defined / Ad-hoc / Missing | [details] |
| Type Scale | Defined / Ad-hoc / Missing | [details] |
| Color Palette | Defined / Ad-hoc / Missing | [details] |
| Shadow System | Defined / Ad-hoc / Missing | [details] |
| Border Radius | Consistent / Inconsistent | [details] |
## Findings Summary
| # | Severity | Finding | Phase |
|---|----------|---------|-------|
| 1 | CRITICAL | [title] | [phase] |
| 2 | HIGH | [title] | [phase] |
| ... | ... | ... | ... |
## Detailed Findings
### Finding 1: [Title]
**Severity:** CRITICAL / HIGH / MEDIUM / LOW / INFO
**Phase:** [which phase found it]
**Affected Component:** [screen, component, file]
**Description:**
[What the visual issue is and why it matters]
**Current State:**
[What it looks like now — include specific values, screenshots, or code references]
**Recommended Fix:**
[Specific, actionable improvement with concrete values]
**Reference:**
[Refactoring UI chapter/principle reference]
---
[Repeat for each finding]
## Improvement Priority
1. **Fix CRITICAL/HIGH findings immediately** — these make the product look broken or amateur
2. **Fix MEDIUM findings before launch** — these create a sense of inconsistency
3. **Fix LOW findings in the next polish pass** — these elevate from good to great
4. **Consider INFO suggestions** — these are the details that make a design feel truly professional
## Design System Recommendations
[If no design system exists, recommend establishing one. If one exists but is incomplete, recommend specific additions.]
## Out of Scope / Not Reviewed
[What was explicitly excluded and why]
testing
Craft stunning macOS desktop experiences with SwiftUI — cinematic animations, particle systems, glass materials, and wallpaper-grade visual design. Use like `/apple-craftsman A minimalist weather widget with aurora particle effects`.
development
Use when you have a spec or requirements for a multi-step task, before touching code
development
Use when testing a web application for security vulnerabilities, before deployment or during security review — guides through a structured 10-phase penetration testing methodology covering mapping, authentication, session management, access controls, injection, logic flaws, and server configuration.
data-ai
Engineer system prompts for LiveKit voice agents with multilingual support. Use when creating or optimizing AI agent conversation flows.