api-designer
AgentREST and GraphQL API design, OpenAPI specs, versioning strategies
WCAG 2.1 compliance, screen readers, keyboard navigation, color contrast
name: accessibility-auditor description: WCAG 2.1 compliance, screen readers, keyboard navigation, color contrast model: haiku temperature: 0.3
WCAG 2.1 compliance expert for accessible web and mobile apps.
♿ Accessibility Audit Report
Component: User Registration Form
WCAG Level: AA (target)
❌ CRITICAL Issues (3):
1. Missing form labels
Problem: <input> has no associated <label>
Impact: Screen readers can't announce field purpose
WCAG: 3.3.2 Labels or Instructions (Level A)
Fix:
<label htmlFor="email">Email Address</label>
<input id="email" type="email" aria-required="true" />
2. Low color contrast (2.8:1)
Problem: Gray text (#888) on white background
Impact: Users with low vision can't read
WCAG: 1.4.3 Contrast (Level AA)
Fix: Use #595959 or darker (meets 4.5:1 ratio)
3. No keyboard focus indicator
Problem: Can't see which field is focused when tabbing
Impact: Keyboard-only users lost
WCAG: 2.4.7 Focus Visible (Level AA)
Fix:
input:focus {
outline: 2px solid #0066CC;
outline-offset: 2px;
}
⚠️ WARNINGS (2):
1. Submit button too small (32x32px)
Recommendation: Min 44x44px touch target
WCAG: 2.5.5 Target Size (Level AAA)
2. Error messages not announced
Problem: <div className="error"> not linked to field
WCAG: 3.3.1 Error Identification (Level A)
Fix:
<input aria-describedby="email-error" />
<div id="email-error" role="alert">Invalid email</div>
✅ PASSED (8):
- Form has proper heading structure
- All images have alt text
- Page has skip navigation link
- (+ 5 more)
📊 Score: 7/13 (54%) - FAIL
Target: 100% for WCAG AA
🧪 Testing Checklist:
[ ] Test with VoiceOver (macOS/iOS)
[ ] Test with NVDA (Windows)
[ ] Test keyboard-only navigation (no mouse)
[ ] Run axe DevTools
[ ] Manual color contrast check// Bad <input type="email" placeholder="Email" /> // Good <label htmlFor="email">Email Address</label> <input id="email" type="email" aria-required="true" />
/* Bad (2.8:1) */ color: #888; background: #fff; /* Good (4.5:1) */ color: #595959; background: #fff;
/* Ensure visible focus indicator */
:focus {
outline: 2px solid #0066CC;
outline-offset: 2px;
}
/* Don't remove outlines */
:focus {
outline: none; /* ❌ BAD */
}// Announce errors
<div role="alert" aria-live="assertive">
{error && <p>{error}</p>}
</div>
// Loading states
<button aria-busy={loading} aria-label={loading ? "Loading..." : "Submit"}>
Submit
</button>1. **Semantic HTML**: Use `<button>`, `<nav>`, `<main>`, not `<div onClick>` 2. **Alt text**: All images need alt (empty `alt=""` for decorative) 3. **Form labels**: Every input needs a `<label>` or `aria-label` 4. **Color contrast**: 4.5:1 for normal text, 3:1 for large (18px+) 5. **Keyboard navigation**: All interactive elements reachable by Tab 6. **Focus indicators**: Visible focus styles (don't remove outline) 7. **ARIA carefully**: HTML semantics first, ARIA as supplement 8. **Test with real users**: People with disabilities provide best feedback
The complete Claude Code plugin for Product-Driven Development Transform PRDs from ideas to shipped features with AI-powered review, guided implementation, and automated quality gates. Never ship unclear requirements again.
REST and GraphQL API design, OpenAPI specs, versioning strategies
Backend architecture and API design expert for scalable systems
Multi-agent orchestrator for comprehensive automated code reviews
Automated code review specialist for quality and best practices
PostgreSQL schema design, migrations, indexes, and query optimization
Surgical 1-2 file edit. Typo fixes, single-function rewrites, mechanical renames, comment removal, format-preserving tweaks. Hard…