Comprehensive UI audit skill for accessibility, performance, and UX best practices. Inspired by Vercel's web-design-guidelines.
When to Use
Trigger on these requests:
"Review my UI"
"Check accessibility"
"Audit design"
"Review UX"
"Check my site against best practices"
"Fix accessibility issues"
Rule Categories (100+ Rules)
🔴 Critical — Accessibility
Rule
Description
a11y-aria-labels
All interactive elements have aria-label
a11y-semantic-html
Use <button>, <nav>, <main>, <article> instead of <div>
a11y-keyboard-nav
Focusable elements are keyboard navigable
a11y-lang-attr
<html> has lang attribute
a11y-color-contrast
Text has ≥4.5:1 contrast ratio
a11y-image-alt
All images have alt text
a11y-form-labels
All form inputs have associated labels
a11y-error-messages
Form errors are announced to screen readers
🟡 High — Focus & Interaction
Rule
Description
focus-visible
Custom focus styles use :focus-visible, not :focus
focus-trap
Modals trap focus within the dialog
skip-link
Page has skip-to-content link
touch-target
Touch targets ≥44x44px
tap-highlight
tap-highlight-color disabled on mobile
🟢 Medium — Forms & Validation
Rule
Description
form-autocomplete
Inputs use autocomplete attribute
form-validation
Inline validation on blur, not on submit
form-error-style
Errors are red, visible, and specific
form-required-mark
Required fields are visually marked
🔵 Medium — Animation & Motion
Rule
Description
motion-reduced
prefers-reduced-motion respected
motion-safe
Animations use transform/opacity only
motion-duration
No animation exceeds 300ms
no-autooplay
Videos/animations require user interaction
🟣 Low-Medium — Typography
Rule
Description
typo-curly-quotes
Use " and " (curly quotes), not straight
typo-ellipsis
Use … (ellipsis char), not three dots
typo-tabular-nums
Numbers in tables use tabular-nums
typo-line-height
Body text has line-height ≥1.5
⚫ Low — Performance
Rule
Description
perf-lazy-load
Images below fold use loading="lazy"
perf-preconnect
Third-party origins use <link rel="preconnect">
perf-font-display
Web fonts use font-display: swap
perf-no-layout-shift
Images have explicit width/height
🔘 Low — Dark Mode & Theming
Rule
Description
theme-color-scheme
<meta> includes color-scheme
theme-dark-mode
Dark mode styles use prefers-color-scheme or CSS vars
theme-toggle
Theme switcher is accessible and visible
🏁 Low — Images & Media
Rule
Description
img-width-height
All images have explicit dimensions
img-srcset
Responsive images use srcset
img-format
Use WebP/AVIF over JPEG/PNG when possible
video-captions
Videos have captions/subtitles
Navigation & State
Rule
Description
nav-url-state
URL reflects current state
nav-deep-link
Sections are linkable via hash
state-no-flash
No flash of unstyled content (FOUC)
How to Audit
1. Scan the codebase for HTML/React/Vue components
2. Check against each rule category above
3. Report findings grouped by severity
4. Provide specific code fixes for each issue
1---2name: web-design-guidelines3description: Web Design Guidelines4---56# Web Design Guidelines78Comprehensive UI audit skill for accessibility, performance, and UX best practices. Inspired by Vercel's web-design-guidelines.910## When to Use1112Trigger on these requests:13- "Review my UI"14- "Check accessibility"15- "Audit design"16- "Review UX"17- "Check my site against best practices"18- "Fix accessibility issues"1920## Rule Categories (100+ Rules)2122### 🔴 Critical — Accessibility2324| Rule | Description |25|------|-------------|26| `a11y-aria-labels` | All interactive elements have `aria-label` |27| `a11y-semantic-html` | Use `<button>`, `<nav>`, `<main>`, `<article>` instead of `<div>` |28| `a11y-keyboard-nav` | Focusable elements are keyboard navigable |29| `a11y-lang-attr` | `<html>` has `lang` attribute |30| `a11y-color-contrast` | Text has ≥4.5:1 contrast ratio |31| `a11y-image-alt` | All images have `alt` text |32| `a11y-form-labels` | All form inputs have associated labels |33| `a11y-error-messages` | Form errors are announced to screen readers |3435### 🟡 High — Focus & Interaction3637| Rule | Description |38|------|-------------|39| `focus-visible` | Custom focus styles use `:focus-visible`, not `:focus` |40| `focus-trap` | Modals trap focus within the dialog |41| `skip-link` | Page has skip-to-content link |42| `touch-target` | Touch targets ≥44x44px |43| `tap-highlight` | `tap-highlight-color` disabled on mobile |4445### 🟢 Medium — Forms & Validation4647| Rule | Description |48|------|-------------|49| `form-autocomplete` | Inputs use `autocomplete` attribute |50| `form-validation` | Inline validation on blur, not on submit |51| `form-error-style` | Errors are red, visible, and specific |52| `form-required-mark` | Required fields are visually marked |5354### 🔵 Medium — Animation & Motion5556| Rule | Description |57|------|-------------|58| `motion-reduced` | `prefers-reduced-motion` respected |59| `motion-safe` | Animations use `transform`/`opacity` only |60| `motion-duration` | No animation exceeds 300ms |61| `no-autooplay` | Videos/animations require user interaction |6263### 🟣 Low-Medium — Typography6465| Rule | Description |66|------|-------------|67| `typo-curly-quotes` | Use `"` and `"` (curly quotes), not straight |68| `typo-ellipsis` | Use `…` (ellipsis char), not three dots |69| `typo-tabular-nums` | Numbers in tables use `tabular-nums` |70| `typo-line-height` | Body text has line-height ≥1.5 |7172### ⚫ Low — Performance7374| Rule | Description |75|------|-------------|76| `perf-lazy-load` | Images below fold use `loading="lazy"` |77| `perf-preconnect` | Third-party origins use `<link rel="preconnect">` |78| `perf-font-display` | Web fonts use `font-display: swap` |79| `perf-no-layout-shift` | Images have explicit `width`/`height` |8081### 🔘 Low — Dark Mode & Theming8283| Rule | Description |84|------|-------------|85| `theme-color-scheme` | `<meta>` includes `color-scheme` |86| `theme-dark-mode` | Dark mode styles use `prefers-color-scheme` or CSS vars |87| `theme-toggle` | Theme switcher is accessible and visible |8889### 🏁 Low — Images & Media9091| Rule | Description |92|------|-------------|93| `img-width-height` | All images have explicit dimensions |94| `img-srcset` | Responsive images use `srcset` |95| `img-format` | Use WebP/AVIF over JPEG/PNG when possible |96| `video-captions` | Videos have captions/subtitles |9798### Navigation & State99100| Rule | Description |101|------|-------------|102| `nav-url-state` | URL reflects current state |103| `nav-deep-link` | Sections are linkable via hash |104| `state-no-flash` | No flash of unstyled content (FOUC) |105106## How to Audit107108```markdown1091. Scan the codebase for HTML/React/Vue components1102. Check against each rule category above1113. Report findings grouped by severity1124. Provide specific code fixes for each issue113```114115## Example Audit Output116117```markdown118## 🔴 Critical Issues Found: 3119120### a11y-aria-labels121**File:** `Button.tsx:12`122```tsx123// ❌ Missing124<button onClick={handleClick}>Click</button>125126// ✅ Fixed127<button onClick={handleClick} aria-label="Submit form">Submit</button>128```129130## 🟡 Medium Issues Found: 5131...132```133134## Reference Files135136For detailed rule implementations, see:137- `rules/a11y-aria-labels.md`138- `rules/motion-reduced.md`139- `rules/focus-visible.md`140141---142143*Part of SWAL Skills — swal/iberi22*
Run npx skillmds@latest add iberi22/web-design-guidelines in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Web Design Guidelines It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
iberi22 (@iberi22) published this skill. Their other Agent Skills are listed on their SkillMD profile.