packs/sage-product/skills/ux-review/SKILL.md
Assess an existing UI three ways: reverse-engineer its design system from screenshots or a live URL (audit), benchmark it against category leaders (evaluate), and check it against usability heuristics (Nielsen, Norman, Krug). Merges the former ux-audit, ux-evaluate, and ux-heuristic-review skills.
npx skillsauth add xoai/sage ux-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.
Three assessment modes. Pick by intent, or run in sequence (audit → evaluate → heuristic review) for a full picture.
Extract the implicit design system from an existing page. Before you can improve a design, you need to understand what currently exists — not from the code, but from what the user sees.
Core Principle: Every shipped product has a design system, even if it was never documented. Colors were chosen. Typography was set. Spacing patterns emerged. Component shapes repeated. This skill makes the implicit explicit so the redesign can make intentional choices about what to keep, what to change, and what to unify.
Do NOT use for:
If screenshots don't already exist, capture them:
bash sage/runtime/tools/sage-screenshot.sh <url-or-localhost> \
--output .sage/work/<feature>/screenshots \
--label current \
--full-page \
--before
If the user provided a URL, also fetch the page content for structural analysis:
From the screenshots, identify:
## Colors
Primary: [color] — used for: [CTAs, links, active states]
Secondary: [color] — used for: [headings, accents]
Background: [color(s)] — used for: [page bg, section bgs, card bgs]
Text: [color(s)] — used for: [body, headings, muted/secondary]
Accent: [color(s)] — used for: [badges, highlights, alerts]
Semantic: success [color], error [color], warning [color]
Note inconsistencies: "Two different blues used for CTAs — #2563eb on hero, #3b82f6 on cards. Likely unintentional."
## Typography
Heading 1: [size estimate] / [weight] / [color]
Heading 2: [size estimate] / [weight] / [color]
Heading 3: [size estimate] / [weight] / [color]
Body: [size estimate] / [weight] / [color] / [line-height estimate]
Caption: [size estimate] / [weight] / [color]
Font family: [serif/sans-serif/identified family if recognizable]
Note: sizes are estimates from screenshots. Exact values come from code inspection if needed. The point is to identify the visual hierarchy, not the pixel values.
## Layout
Max content width: [estimate]
Grid system: [columns at desktop, tablet, mobile]
Section spacing: [gap between major sections]
Card spacing: [gap between cards/items]
Internal padding: [padding inside cards/sections]
## Responsive
Mobile: [what stacks, what hides, what changes]
Tablet: [how grid adapts]
Desktop: [full layout description]
Identify repeating UI components:
## Components
Buttons: [styles: primary, secondary, ghost — shapes, sizes]
Cards: [structure: image + title + desc + CTA? shadow? border-radius?]
Navigation: [type: sticky header? hamburger on mobile? mega menu?]
Hero: [pattern: text-left/image-right? full-width image? video?]
Social proof: [testimonials? logos? numbers? score displays?]
Forms: [input style, label position, error display]
Icons: [style: outlined? filled? library if recognizable?]
## Page Sections (in order)
1. [Section name] — [purpose] — [above/below fold on mobile]
2. [Section name] — [purpose]
3. ...
## CTA Strategy
Primary CTA: [text] — [placement] — [visual weight]
Secondary CTA: [text] — [placement]
CTA count: [total on page]
## Navigation
Header: [logo + nav items + CTA]
Footer: [columns, links, contact info]
Combine all extractions into .sage/work/<feature>/current-design-system.md:
# Current Design System: [page/product name]
**Audited from:** [URL or screenshots]
**Date:** [timestamp]
**Breakpoints reviewed:** mobile, tablet, desktop
## Colors
[from Step 2]
## Typography
[from Step 3]
## Spacing and Layout
[from Step 4]
## Components
[from Step 5]
## Information Architecture
[from Step 6]
## Consistency Issues Found
- [inconsistency 1]
- [inconsistency 2]
## Strengths
- [what works well visually]
## Weaknesses
- [what could be improved]
Show the document to the user: "Here's the current design system I extracted. Anything I missed or got wrong?"
MUST (violation = inaccurate audit):
SHOULD (violation = incomplete audit):
MAY (context-dependent):
Communication style: Evaluator language. Be specific and evidence-based. Every finding needs observable evidence and user impact. Thoroughness is more valuable than diplomacy.
Good UX audit output:
Before presenting your output, check each quality criterion above. For each, confirm it's met or note what's missing. Present your findings AND your self-assessment:
"Self-review: [X/Y criteria met]. [Note any gaps and why they exist.]"
Compare what you have against what the category expects. Not to copy competitors — to make intentional decisions about what to keep, evolve, and improve.
Core Principle: A redesign without evaluation is a reskin. Changing colors and fonts without understanding what works and what doesn't produces a different-looking version of the same problems. Evaluation grounds the redesign in evidence: what's working (keep it), what's convention (match it), what's below standard (fix it).
After both ux-audit (know what you have) and ux-research (know what the category does). Before ux-brief (translating evaluation into design decisions).
Read both artifacts:
.sage/work/<feature>/current-design-system.md (from ux-audit).sage/work/<feature>/category-benchmarks.md (from ux-research)If either is missing, the evaluation can't proceed. Run the missing skill first.
For each dimension (colors, typography, layout, components, information architecture), compare current state against category benchmarks and produce a classification:
## Colors
| Element | Current | Category Convention | Classification | Rationale |
|---------|---------|-------------------|----------------|-----------|
| Primary brand color | Orange #f97316 | Varies (each brand unique) | MUST KEEP | Brand identity — recognized by users |
| CTA color | Orange (same as brand) | Contrasting color from brand | SHOULD IMPROVE | CTA doesn't stand out from brand elements |
| Background | White #fff | White or light gray | SHOULD KEEP | Matches convention, no issue |
| Text color | #333 | #111-#333 range | SHOULD KEEP | Within convention range |
## Typography
| Element | Current | Category Convention | Classification | Rationale |
|---------|---------|-------------------|----------------|-----------|
| Hero heading size | ~28px mobile | 32-40px mobile | SHOULD IMPROVE | Below category standard, feels less impactful |
| Body text | 16px | 16-18px | SHOULD KEEP | Matches convention |
| Heading hierarchy | h1 → h3 (skips h2) | Sequential h1 → h2 → h3 | MUST IMPROVE | Accessibility violation, not just preference |
## Layout
| Element | Current | Category Convention | Classification | Rationale |
|---------|---------|-------------------|----------------|-----------|
| Hero pattern | Image grid + tagline | Clear value prop + single CTA | SHOULD IMPROVE | Category leaders lead with outcome, not feature showcase |
| CTA placement | Below fold on mobile | Above fold | SHOULD IMPROVE | Users must scroll to take action |
| Section count | 7 sections | 4-6 sections | MAY CHANGE | Slightly long but not critical |
## Components
| Element | Current | Category Convention | Classification | Rationale |
|---------|---------|-------------------|----------------|-----------|
| Course cards | Image + title + description | Image + title + key metric + CTA | SHOULD IMPROVE | Missing differentiating metric (e.g., "95% AI accuracy") |
| Testimonials | Text carousel | Photo + name + score + quote | SHOULD IMPROVE | Photo + score increases credibility |
| Bee mascot | Present throughout | N/A (unique to Prep) | MUST KEEP | Brand differentiator, recognized by users |
## Information Architecture
| Element | Current | Category Convention | Classification | Rationale |
|---------|---------|-------------------|----------------|-----------|
| First screen content | Brand tagline + animated images | Value prop + CTA + social proof | SHOULD IMPROVE | Category leaders answer "what is this?" and "why should I care?" above fold |
| Social proof position | Bottom half of page | Top half, near hero | SHOULD IMPROVE | 100K+ students is a powerful signal — it's buried |
| Navigation | Full nav with dropdowns | Simplified nav + prominent CTA | MAY CHANGE | Current works, but heavy for a landing page |
Use these four categories consistently:
MUST KEEP — Brand identity elements. Changing these confuses existing users.
SHOULD KEEP — Patterns that work and match conventions.
MAY CHANGE — Style elements where updating would freshen without breaking.
SHOULD IMPROVE — Elements that fall below category standards or have measurable problems.
Rank SHOULD IMPROVE items by impact:
## Priority Improvements
1. [Highest impact]: [description] — [why: conversion / accessibility / performance]
2. [High impact]: [description] — [why]
3. [Medium impact]: [description] — [why]
...
Impact factors:
Save to .sage/work/<feature>/design-evaluation.md:
# Design Evaluation: [page/product]
**Based on:** current-design-system.md + category-benchmarks.md
**Date:** [timestamp]
## Summary
[2-3 sentences: overall assessment, how current design compares to category]
## Classification Table
| Dimension | MUST KEEP | SHOULD KEEP | MAY CHANGE | SHOULD IMPROVE |
|-----------|-----------|-------------|------------|----------------|
| Colors | [count] | [count] | [count] | [count] |
| Typography | [count] | [count] | [count] | [count] |
| Layout | [count] | [count] | [count] | [count] |
| Components | [count] | [count] | [count] | [count] |
| IA | [count] | [count] | [count] | [count] |
## Detailed Evaluation
[from Step 2 — all dimension tables]
## Priority Improvements
[from Step 4 — ranked list]
Show to user: "Here's the evaluation. Before I create the design brief, I want to confirm: do you agree with the classifications? Anything I marked as MUST KEEP that you actually want to change, or vice versa?"
🔒 CHECKPOINT: This is where the user's input matters most. The classifications are proposals — the user decides.
MUST (violation = uninformed redesign):
SHOULD (violation = incomplete evaluation):
MAY (context-dependent):
Communication style: Analytical language. Justify classifications with evidence — benchmarks, conventions, principles. Evaluations should hold up if challenged by a stakeholder.
Good UX evaluation output:
Before presenting your output, check each quality criterion above. For each, confirm it's met or note what's missing. Present your findings AND your self-assessment:
"Self-review: [X/Y criteria met]. [Note any gaps and why they exist.]"
Evaluates the implementation against usability heuristics. Runs ALONGSIDE the
core quality-review skill at the review phase. When installed, this review
is mandatory — it cannot be skipped by the agent.
Evaluate the implementation against the four heuristics most likely to catch user-facing failures. Takes ~2 minutes per task.
Evaluate against all 10 Nielsen heuristics plus Norman's design principles. Takes ~10 minutes per major feature.
H2: Real-World Match — Does the interface use the user's language? Are icons and metaphors recognizable? Is information organized the way users think?
H4: Consistency — Are the same actions called the same thing everywhere? Do similar elements behave the same way? Does it follow platform conventions?
H6: Recognition over Recall — Are all available actions visible? Do forms show expected formats? Can users see previous selections when making new ones?
H7: Flexibility — Are there keyboard shortcuts for frequent actions? Can expert users bypass introductory steps? Does it remember preferences?
H8: Minimalism — Is there unnecessary text? Are visual elements serving a purpose? Is the visual hierarchy clear?
H10: Help — Is contextual help available for complex features? Are tooltips concise and useful?
In addition to Nielsen's heuristics, check:
Each finding gets a severity:
| Severity | Definition | Action | |----------|-----------|--------| | Catastrophic | User loses data or can't complete primary task | MUST fix before merge | | Major | User significantly confused or frustrated | SHOULD fix before merge | | Minor | User notices oddity but works around it | Fix in next iteration | | Cosmetic | Violates principle but minimal user impact | Note for polish |
## UX Heuristic Review: [feature name]
Date: [date]
Mode: [BUILD light / ARCHITECT full]
### Findings
1. [H9 - MAJOR] Error message on login form says "401 Unauthorized"
→ Should say: "Wrong email or password. Check your details and try again."
→ Fix: Update error handler in login-form.tsx
2. [H1 - CATASTROPHIC] No loading state on payment submission
→ User clicks "Pay" and sees no response for 3-5 seconds
→ Fix: Add loading spinner to submit button, disable during processing
### Summary
- Catastrophic: 1 (must fix)
- Major: 1 (should fix)
- GATE RESULT: FAIL (catastrophic finding blocks merge)
heuristic-evaluation.md — Full heuristic descriptions and checkpointsusability-principles.md — Krug's laws and Norman's principleserror-and-recovery-design.md — Error taxonomy for H5/H9 evaluationtesting
Root cause diagnosis with evidence, Reproducing test, Minimal patch
tools
Session resumption with context
tools
Configure Sage preset and project settings. Switch between base, startup, enterprise, or opensource constitution presets. Use when the user says "configure sage", "change preset", or "sage settings".
development
Brief (medium+ tasks), Spec, Implementation plan