Claude-skills design-review

Review a web app or page for visual design quality — layout, typography, spacing, colour, hierarchy, consistency, interaction patterns, and responsive behaviour. Not a UX audit (that checks usability) — this checks whether it looks professional and polished. Produces a design findings report with screenshots. Triggers: 'design review', 'does this look good', 'review the design', 'check the layout', 'is this polished', 'visual review', 'design audit', 'make it look better', 'it looks off'.

install
source · Clone the upstream repo
git clone https://github.com/jezweb/claude-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/jezweb/claude-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/frontend/skills/design-review" ~/.claude/skills/jezweb-claude-skills-design-review && rm -rf "$T"
manifest: plugins/frontend/skills/design-review/SKILL.md
source content

Design Review

Review a web app or page for visual design quality. This is not a UX audit (usability, workflow, friction) — this checks whether the design is professional, consistent, and polished.

The goal: would a design-conscious person look at this and think "this is well made" or "this looks like a developer designed it"?

When to Use

  • Before showing something to a client or team
  • When something "looks off" but you can't pinpoint why
  • After building a feature, before calling it done
  • Periodic quality check on a shipped product
  • After a UX audit — this is the visual companion

Browser Tool Detection

Same as ux-audit — Chrome MCP, Playwright MCP, or playwright-cli.

URL Resolution

Same as ux-audit — prefer deployed/live over localhost.

What to Check

1. Layout and Spacing

CheckGoodBad
Consistent spacingSame gap between all cards in a grid, same padding in all sectionsSome cards have 16px gap, others 24px. Header padding differs from body
AlignmentLeft edges of content align vertically across sectionsHeading starts at one indent, body text at another, cards at a third
Breathing roomGenerous whitespace around content, elements don't feel crampedText touching container edges, buttons crowded against inputs
Grid disciplineContent follows a clear column gridElements placed freely, no underlying structure
Responsive proportionsSidebar/content ratio looks intentional at every widthSidebar takes 50% on tablet, content is squeezed
Vertical rhythmConsistent vertical spacing pattern (e.g. 8px/16px/24px/32px scale)Random spacing: 13px here, 27px there, 8px somewhere else

2. Typography

CheckGoodBad
HierarchyClear visual difference between h1 → h2 → h3 → bodyHeadings and body text look the same size/weight
Line lengthBody text 50-75 characters per lineFull-width text running 150+ characters — hard to read
Line heightBody text 1.5-1.7, headings 1.1-1.3Cramped text or excessive line height
Font sizesConsistent scale (e.g. 14/16/20/24/32)Random sizes: 15px, 17px, 22px with no relationship
Weight usageRegular for body, medium for labels, semibold for headings, bold sparinglyEverything bold, or everything regular with no hierarchy
TruncationLong text truncates with ellipsis, title attribute shows full textText overflows container, wraps awkwardly, or is cut off without ellipsis

3. Colour and Contrast

CheckGoodBad
Semantic colourUsing design tokens (bg-primary, text-muted-foreground)Raw Tailwind colours (bg-blue-500, text-gray-300)
Contrast ratioText meets WCAG AA (4.5:1 for body, 3:1 for large text)Light grey text on white, or dark text on dark backgrounds
Colour consistencySame blue means the same thing everywhere (primary = action)Blue means "clickable" in one place and "informational" in another
Dark modeAll elements visible, borders defined, no invisible textElements disappear, text becomes unreadable, images look wrong
Status coloursGreen=success, yellow=warning, red=error consistentlyGreen used for both success and "active" with different meanings
Colour overuse2-3 colours + neutralsRainbow of colours with no clear hierarchy

4. Visual Hierarchy

CheckGoodBad
Primary actionOne clear CTA per page, visually dominantThree equally styled buttons competing for attention
Squint testSquinting at the page, the most important element stands outEverything is the same visual weight — nothing draws the eye
Progressive disclosureMost important info visible, details available on interactionEverything shown at once — overwhelming
GroupingRelated items are visually grouped (proximity, borders, backgrounds)Related items scattered, unrelated items touching
Negative spaceIntentional empty space that frames contentEmpty space that looks accidental (uneven, trapped white space)

5. Component Consistency

CheckGoodBad
Button stylesOne primary style, one secondary, one destructive — used consistently5 different button styles across the app
Card stylesAll cards have the same border-radius, shadow, paddingSome cards rounded, some sharp, some with shadows, some without
Form inputsAll inputs same height, same border style, same focus ringMix of heights, border styles, focus behaviours
Icon styleOne icon family (Lucide, Heroicons), consistent size and strokeMixed icon families, different sizes, some filled some outlined
Border radiusConsistent radius scale (e.g. 4px inputs, 8px cards, 12px modals)Random radius values: 3px, 7px, 10px, 16px
ShadowOne or two shadow levels used consistentlyEvery component has a different shadow depth

6. Interaction Design

CheckGoodBad
Hover statesButtons, links, and clickable cards change on hoverNo hover feedback — user unsure what's clickable
Focus statesKeyboard focus visible on all interactive elementsFocus ring missing or invisible against background
Active statesNav items, tabs, sidebar links show current selectionActive item looks the same as inactive
TransitionsSubtle transitions on hover/focus (150-200ms ease)No transitions (jarring) or slow transitions (laggy)
Loading indicatorsSkeleton screens or spinners during async operationsContent pops in without warning, layout shifts
Disabled statesDisabled elements are visually muted, cursor changesDisabled buttons look clickable, no cursor change

7. Responsive Quality

CheckGoodBad
Mobile navClean hamburger/sheet menu, easy to tapDesktop nav squished into mobile, tiny tap targets
Image scalingImages fill containers proportionallyImages stretched, cropped badly, or overflowing
Table responsivenessHorizontal scroll on mobile, or stack to cardsTable wider than screen with no way to see columns
Touch targetsAt least 44x44px on mobileTiny links, close buttons, checkboxes
TabletLayout works at 768px (not just desktop and phone)Layout breaks at tablet widths, awkward gaps

Severity Guide

LevelMeaningExample
HighLooks broken or unprofessionalInvisible text in dark mode, buttons different heights inline
MediumLooks unpolishedInconsistent spacing, mixed icon styles, truncation without ellipsis
LowNitpick1-2px alignment, slightly different border-radius, shadow too strong

Output

Write findings to

.jez/artifacts/design-review.md
:

# Design Review: [App Name]
**Date**: YYYY-MM-DD
**URL**: [url]

## Overall Impression
[1-2 sentences — professional / unpolished / inconsistent / clean]

## Findings

### High
- **[issue]** at [page/component] — [what's wrong] → [fix]

### Medium
- **[issue]** at [page/component] — [what's wrong] → [fix]

### Low
- **[issue]** — [description]

## What Looks Good
[Patterns that are well-executed and should be preserved]

## Top 3 Fixes
1. [highest visual impact change]
2. [second]
3. [third]

Take screenshots of findings where the issue is visual (most of them).

Tips

  • Check dark mode AND light mode — most issues appear in one but not the other
  • The squint test is the fastest way to find hierarchy problems
  • Component inconsistency is the most common issue in dev-built UIs
  • "Looks off" usually means spacing — check margins and padding first
  • If you can't identify the issue, compare to a well-designed app in the same category