UI/UX Design Audit
Objective
Audit a web interface against 100+ rules covering accessibility, forms, animations, typography, images, performance, navigation, dark mode, and internationalization.
Audit categories
┌──────────────────────────────────────────────────────────────────┐
│ UI/UX AUDIT │
├──────────────────────────────────────────────────────────────────┤
│ │
│ 1. ACCESSIBILITY ARIA, contrast, focus, keyboard │
│ 2. FORMS Validation, feedback, autofill │
│ 3. ANIMATIONS Performance, reduced-motion, timing │
│ 4. TYPOGRAPHY Hierarchy, readability, responsive │
│ 5. IMAGES Alt text, lazy loading, formats │
│ 6. UI PERFORMANCE Layout shift, first paint, bundle │
│ 7. NAVIGATION Breadcrumbs, mobile menu, deep links │
│ 8. DARK MODE CSS variables, images, contrast │
│ 9. TOUCH INTERACTIONS Target size, swipe, gestures │
│ 10. INTERNATIONALIZATION RTL, dates, plurals, translations │
│ 11. RESPONSIVE Breakpoints, mobile-first, viewport │
│ │
└──────────────────────────────────────────────────────────────────┘
1. Accessibility
Critical rules
| # |
Rule |
Verification |
| A1 |
Minimum contrast 4.5:1 (normal text) |
Check CSS colors |
| A2 |
Minimum contrast 3:1 (large text, icons) |
Check CSS colors |
| A3 |
Labels on all form fields |
<label for=""> or aria-label |
| A4 |
Alt text on all informative images |
<img alt=""> non-empty |
| A5 |
Full keyboard navigation |
Tab, Enter, Escape, Arrow keys |
| A6 |
Visible focus on interactive elements |
:focus-visible style |
| A7 |
Correct ARIA roles |
role, aria-* attributes |
| A8 |
No purely visual content |
Text alternatives |
| A9 |
Logical heading structure |
h1 > h2 > h3, no skipping |
| A10 |
Skip to content link |
First focusable element |
Patterns to look for
# Images without alt
<img[^>]*(?<!alt=")[^>]*>
# Buttons without accessible text
<button[^>]*>(\s*<(svg|img|i)[^>]*>\s*)<\/button>
# Inputs without label
<input(?![^>]*aria-label)(?![^>]*id=["'][^"']*["'][^>]*)[^>]*>
# Insufficient contrast (light colors on light background)
color:\s*#[def][def][def]|color:\s*#[cdef]{6}
2. Forms
| # |
Rule |
Detail |
| F1 |
Inline validation (not only on submit) |
Show error on blur |
| F2 |
Descriptive error messages |
Not just "Invalid field" |
| F3 |
Autocomplete attributes |
autocomplete="email", "name", etc. |
| F4 |
Submit button disabled if invalid |
Or clear feedback |
| F5 |
Required field indicator |
* or explicit text |
| F6 |
Correct input type |
type="email", "tel", "number" |
| F7 |
Minimum font size 16px on mobile |
Avoids iOS zoom |
| F8 |
Loading state on submit |
Spinner or disabled |
3. Animations and transitions
| # |
Rule |
Detail |
| AN1 |
prefers-reduced-motion respected |
Disable animations on request |
| AN2 |
Duration < 400ms for micro-interactions |
Fast feedback |
| AN3 |
No flash/blink > 3Hz |
Epilepsy risk |
| AN4 |
CSS transitions preferred over JS |
GPU performance |
| AN5 |
will-change for heavy animations |
Compositor optimization |
/* prefers-reduced-motion pattern */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}
4. Typography
| # |
Rule |
Detail |
| T1 |
Clear visual hierarchy |
Distinct sizes, weights, colors |
| T2 |
Line length 50-75 characters |
max-width: 65ch |
| T3 |
Minimum line-height 1.5 for body text |
Readability |
| T4 |
No more than 2-3 fonts |
Visual consistency |
| T5 |
Minimum size 16px for body |
Mobile readability |
| T6 |
System font fallback defined |
font-family: 'Custom', system-ui, sans-serif |
5. Images
| # |
Rule |
Detail |
| I1 |
Descriptive alt text |
Not "image", not empty unless decorative |
| I2 |
Lazy loading |
loading="lazy" except above-the-fold |
| I3 |
Explicit dimensions |
width and height to avoid CLS |
| I4 |
Modern format (WebP, AVIF) |
With fallback |
| I5 |
Responsive images |
srcset and sizes |
| I6 |
Optimized compression |
< 100KB for UI images |
6. UI Performance
| # |
Rule |
Detail |
| P1 |
CLS < 0.1 |
No layout shift |
| P2 |
LCP < 2.5s |
Largest Contentful Paint |
| P3 |
FID < 100ms |
First Input Delay |
| P4 |
Skeleton/loading states |
No blank page |
| P5 |
Code splitting per route |
Bundles < 200KB gzip |
| P6 |
Inline critical CSS |
Fast above-the-fold |
7. Navigation
| # |
Rule |
Detail |
| N1 |
Breadcrumbs on deep pages |
User orientation |
| N2 |
Accessible mobile menu |
Hamburger + overlay |
| N3 |
Easy back navigation |
Predictable navigation |
| N4 |
Active page indication |
Menu highlight |
| N5 |
Useful 404 page |
Navigation links |
| N6 |
Working deep links |
Shareable URLs |
8. Dark Mode
| # |
Rule |
Detail |
| D1 |
CSS custom properties |
--color-bg, --color-text |
| D2 |
Adapted images |
No white images on dark background |
| D3 |
Sufficient contrast in dark |
Recheck ratios |
| D4 |
Smooth transition |
transition: background-color 0.2s |
| D5 |
Respect prefers-color-scheme |
Automatic detection |
9. Touch interactions
| # |
Rule |
Detail |
| TC1 |
Touch targets >= 44x44px |
Apple/Google minimum |
| TC2 |
Spacing between targets >= 8px |
Avoid tap errors |
| TC3 |
No hover-only interactions |
Touch alternatives |
| TC4 |
Intuitive swipe if used |
Natural direction |
10. Internationalization
| # |
Rule |
Detail |
| I18N1 |
Externalized text |
No hardcoded strings |
| I18N2 |
RTL support |
direction: rtl compatible |
| I18N3 |
Local date formats |
No hardcoded US format |
| I18N4 |
Plurals handled |
No "1 item(s)" |
11. Responsive & breakpoints
Mobile-first audit across the 7 breakpoints (320, 375, 425, 768, 1024, 1440, 2560px).
| # |
Rule |
Detail |
| R1 |
Viewport meta + mobile-first CSS |
min-width media queries, not max-width |
| R2 |
No fixed-pixel container widths |
Fluid layouts (flex/grid, %, max-width) |
| R3 |
Touch targets >= 44px, spacing >= 8px |
Shared with category 9 (Touch) |
| R4 |
Body font >= 16px, line-height >= 1.5 |
Mobile readability (shared with Typography) |
| R5 |
Responsive images (srcset, sizes, lazy) |
Shared with category 5 (Images) |
| R6 |
Forms usable on mobile |
Inputs >= 44px, correct type, right keyboard |
| R7 |
Portrait + landscape both tested |
No clipped/overflowing content |
Report a per-breakpoint OK/KO table (Mobile 320-425, Tablet 768, Desktop 1024-1440)
and list issues by breakpoint with severity. Test on real devices, not only DevTools.
Expected output
## UI/UX Audit: [Project name]
### Overall score: X/100
### Results by category
| Category | Score | Issues |
|-----------|-------|--------|
| Accessibility | X/10 | [N issues] |
| Forms | X/10 | [N issues] |
| Animations | X/10 | [N issues] |
| Typography | X/10 | [N issues] |
| Images | X/10 | [N issues] |
| UI Performance | X/10 | [N issues] |
| Navigation | X/10 | [N issues] |
| Dark Mode | X/10 | [N issues] |
| Touch | X/10 | [N issues] |
| i18n | X/10 | [N issues] |
| Responsive | X/10 | [N issues] |
### Critical issues
- [CRITICAL] [file:line] - Description
### Recommended improvements
- [IMPORTANT] [file:line] - Description
### Suggestions
- [SUGGESTION] - Description
Rules
- Check ALL categories, not just the obvious ones
- Prioritize issues by user impact
- Provide concrete solutions, not just findings
- Test on mobile AND desktop
1---2name: qa-design3description: UI/UX design audit and verification of web best practices, including responsive/mobile-first breakpoints. Trigger when the user wants to audit the design, verify the UI/UX, check responsive behaviour, or improve the user interface.4---56# UI/UX Design Audit78## Objective910Audit a web interface against 100+ rules covering accessibility, forms, animations, typography, images, performance, navigation, dark mode, and internationalization.1112## Audit categories1314```15┌──────────────────────────────────────────────────────────────────┐16│ UI/UX AUDIT │17├──────────────────────────────────────────────────────────────────┤18│ │19│ 1. ACCESSIBILITY ARIA, contrast, focus, keyboard │20│ 2. FORMS Validation, feedback, autofill │21│ 3. ANIMATIONS Performance, reduced-motion, timing │22│ 4. TYPOGRAPHY Hierarchy, readability, responsive │23│ 5. IMAGES Alt text, lazy loading, formats │24│ 6. UI PERFORMANCE Layout shift, first paint, bundle │25│ 7. NAVIGATION Breadcrumbs, mobile menu, deep links │26│ 8. DARK MODE CSS variables, images, contrast │27│ 9. TOUCH INTERACTIONS Target size, swipe, gestures │28│ 10. INTERNATIONALIZATION RTL, dates, plurals, translations │29│ 11. RESPONSIVE Breakpoints, mobile-first, viewport │30│ │31└──────────────────────────────────────────────────────────────────┘32```3334## 1. Accessibility3536### Critical rules3738| # | Rule | Verification |39|---|------|-------------|40| A1 | Minimum contrast 4.5:1 (normal text) | Check CSS colors |41| A2 | Minimum contrast 3:1 (large text, icons) | Check CSS colors |42| A3 | Labels on all form fields | `<label for="">` or `aria-label` |43| A4 | Alt text on all informative images | `<img alt="">` non-empty |44| A5 | Full keyboard navigation | Tab, Enter, Escape, Arrow keys |45| A6 | Visible focus on interactive elements | `:focus-visible` style |46| A7 | Correct ARIA roles | `role`, `aria-*` attributes |47| A8 | No purely visual content | Text alternatives |48| A9 | Logical heading structure | h1 > h2 > h3, no skipping |49| A10 | Skip to content link | First focusable element |5051### Patterns to look for5253```54# Images without alt55<img[^>]*(?<!alt=")[^>]*>5657# Buttons without accessible text58<button[^>]*>(\s*<(svg|img|i)[^>]*>\s*)<\/button>5960# Inputs without label61<input(?![^>]*aria-label)(?![^>]*id=["'][^"']*["'][^>]*)[^>]*>6263# Insufficient contrast (light colors on light background)64color:\s*#[def][def][def]|color:\s*#[cdef]{6}65```6667## 2. Forms6869| # | Rule | Detail |70|---|------|--------|71| F1 | Inline validation (not only on submit) | Show error on blur |72| F2 | Descriptive error messages | Not just "Invalid field" |73| F3 | Autocomplete attributes | `autocomplete="email"`, `"name"`, etc. |74| F4 | Submit button disabled if invalid | Or clear feedback |75| F5 | Required field indicator | `*` or explicit text |76| F6 | Correct input type | `type="email"`, `"tel"`, `"number"` |77| F7 | Minimum font size 16px on mobile | Avoids iOS zoom |78| F8 | Loading state on submit | Spinner or disabled |7980## 3. Animations and transitions8182| # | Rule | Detail |83|---|------|--------|84| AN1 | `prefers-reduced-motion` respected | Disable animations on request |85| AN2 | Duration < 400ms for micro-interactions | Fast feedback |86| AN3 | No flash/blink > 3Hz | Epilepsy risk |87| AN4 | CSS transitions preferred over JS | GPU performance |88| AN5 | `will-change` for heavy animations | Compositor optimization |8990```css91/* prefers-reduced-motion pattern */92@media (prefers-reduced-motion: reduce) {93 *, *::before, *::after {94 animation-duration: 0.01ms !important;95 transition-duration: 0.01ms !important;96 }97}98```99100## 4. Typography101102| # | Rule | Detail |103|---|------|--------|104| T1 | Clear visual hierarchy | Distinct sizes, weights, colors |105| T2 | Line length 50-75 characters | `max-width: 65ch` |106| T3 | Minimum line-height 1.5 for body text | Readability |107| T4 | No more than 2-3 fonts | Visual consistency |108| T5 | Minimum size 16px for body | Mobile readability |109| T6 | System font fallback defined | `font-family: 'Custom', system-ui, sans-serif` |110111## 5. Images112113| # | Rule | Detail |114|---|------|--------|115| I1 | Descriptive alt text | Not "image", not empty unless decorative |116| I2 | Lazy loading | `loading="lazy"` except above-the-fold |117| I3 | Explicit dimensions | `width` and `height` to avoid CLS |118| I4 | Modern format (WebP, AVIF) | With fallback |119| I5 | Responsive images | `srcset` and `sizes` |120| I6 | Optimized compression | < 100KB for UI images |121122## 6. UI Performance123124| # | Rule | Detail |125|---|------|--------|126| P1 | CLS < 0.1 | No layout shift |127| P2 | LCP < 2.5s | Largest Contentful Paint |128| P3 | FID < 100ms | First Input Delay |129| P4 | Skeleton/loading states | No blank page |130| P5 | Code splitting per route | Bundles < 200KB gzip |131| P6 | Inline critical CSS | Fast above-the-fold |132133## 7. Navigation134135| # | Rule | Detail |136|---|------|--------|137| N1 | Breadcrumbs on deep pages | User orientation |138| N2 | Accessible mobile menu | Hamburger + overlay |139| N3 | Easy back navigation | Predictable navigation |140| N4 | Active page indication | Menu highlight |141| N5 | Useful 404 page | Navigation links |142| N6 | Working deep links | Shareable URLs |143144## 8. Dark Mode145146| # | Rule | Detail |147|---|------|--------|148| D1 | CSS custom properties | `--color-bg`, `--color-text` |149| D2 | Adapted images | No white images on dark background |150| D3 | Sufficient contrast in dark | Recheck ratios |151| D4 | Smooth transition | `transition: background-color 0.2s` |152| D5 | Respect `prefers-color-scheme` | Automatic detection |153154## 9. Touch interactions155156| # | Rule | Detail |157|---|------|--------|158| TC1 | Touch targets >= 44x44px | Apple/Google minimum |159| TC2 | Spacing between targets >= 8px | Avoid tap errors |160| TC3 | No hover-only interactions | Touch alternatives |161| TC4 | Intuitive swipe if used | Natural direction |162163## 10. Internationalization164165| # | Rule | Detail |166|---|------|--------|167| I18N1 | Externalized text | No hardcoded strings |168| I18N2 | RTL support | `direction: rtl` compatible |169| I18N3 | Local date formats | No hardcoded US format |170| I18N4 | Plurals handled | No "1 item(s)" |171172## 11. Responsive & breakpoints173174Mobile-first audit across the 7 breakpoints (320, 375, 425, 768, 1024, 1440, 2560px).175176| # | Rule | Detail |177|---|------|--------|178| R1 | Viewport meta + mobile-first CSS | `min-width` media queries, not `max-width` |179| R2 | No fixed-pixel container widths | Fluid layouts (flex/grid, %, `max-width`) |180| R3 | Touch targets >= 44px, spacing >= 8px | Shared with category 9 (Touch) |181| R4 | Body font >= 16px, line-height >= 1.5 | Mobile readability (shared with Typography) |182| R5 | Responsive images (`srcset`, `sizes`, lazy) | Shared with category 5 (Images) |183| R6 | Forms usable on mobile | Inputs >= 44px, correct `type`, right keyboard |184| R7 | Portrait + landscape both tested | No clipped/overflowing content |185186Report a per-breakpoint OK/KO table (Mobile 320-425, Tablet 768, Desktop 1024-1440)187and list issues by breakpoint with severity. Test on real devices, not only DevTools.188189## Expected output190191```markdown192## UI/UX Audit: [Project name]193194### Overall score: X/100195196### Results by category197198| Category | Score | Issues |199|-----------|-------|--------|200| Accessibility | X/10 | [N issues] |201| Forms | X/10 | [N issues] |202| Animations | X/10 | [N issues] |203| Typography | X/10 | [N issues] |204| Images | X/10 | [N issues] |205| UI Performance | X/10 | [N issues] |206| Navigation | X/10 | [N issues] |207| Dark Mode | X/10 | [N issues] |208| Touch | X/10 | [N issues] |209| i18n | X/10 | [N issues] |210| Responsive | X/10 | [N issues] |211212### Critical issues213- [CRITICAL] [file:line] - Description214215### Recommended improvements216- [IMPORTANT] [file:line] - Description217218### Suggestions219- [SUGGESTION] - Description220```221222## Rules223224- Check ALL categories, not just the obvious ones225- Prioritize issues by user impact226- Provide concrete solutions, not just findings227- Test on mobile AND desktop