Accessibility Audit skill

Accessibility audit skill for scanning, fixing, and verifying WCAG 2.2 Level A and AA compliance across React, Next.js, Vue, Angular, Svelte, and plain HTML codebases.

by alirezarezvani · MIT license · GitHub ↗
INSTALL
mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/alirezarezvani/claude-skills/tar.gz/19392f7a0826 \
  | tar -xz -C ~/.claude/skills --strip-components=4 claude-skills-19392f7a0826/engineering-team/a11y-audit/skills/a11y-audit
Copies only this folder into ~/.claude/skills/a11y-audit, pinned to commit 19392f7 · ✓ run on 25 Sep 2026: all 16 files
Download ZIPOnly this folder · 16 files · 37.7 KB

Files of Accessibility Audit

Files 16 files
Show the full text212 lines
namedescription
a11y-auditAccessibility audit skill for scanning, fixing, and verifying WCAG 2.2 Level A and AA compliance across React, Next.js, Vue, Angular, Svelte, and plain HTML codebases. Use when auditing accessibility, fixing a11y violations, checking color contrast, generating compliance reports, or integrating accessibility checks into CI/CD pipelines.

Accessibility Audit

WCAG 2.2 Accessibility Audit and Remediation Skill

Description

The a11y-audit skill provides a complete accessibility audit pipeline for modern web applications. It implements a three-phase workflow -- Scan, Fix, Verify -- that identifies WCAG 2.2 Level A and AA violations, generates exact fix code per framework, and produces stakeholder-ready compliance reports.

For every violation it finds, it provides the precise before/after code fix tailored to your framework (React, Next.js, Vue, Angular, Svelte, or plain HTML).

What this skill does:

  1. Scans your codebase for every WCAG 2.2 Level A and AA violation, categorized by severity (Critical, Major, Minor)
  2. Fixes each violation with framework-specific before/after code patterns
  3. Verifies that fixes resolve the original violations and introduces no regressions
  4. Reports findings in a structured format suitable for developers, PMs, and compliance stakeholders
  5. Integrates into CI/CD pipelines to prevent accessibility regressions

Features

Feature Description
Full WCAG 2.2 Scan Checks all Level A and AA success criteria across your codebase
Framework Detection Auto-detects React, Next.js, Vue, Angular, Svelte, or plain HTML
Severity Classification Categorizes each violation as Critical, Major, or Minor
Fix Code Generation Produces before/after code diffs for every issue
Color Contrast Checker Validates foreground/background pairs against AA and AAA ratios
Compliance Reporting Generates stakeholder reports with pass/fail summaries
CI/CD Integration GitHub Actions, GitLab CI, Azure DevOps pipeline configs
Keyboard Navigation Audit Detects missing focus management and tab order issues
ARIA Validation Checks for incorrect, redundant, or missing ARIA attributes
Severity Definitions
Severity Definition Example SLA
Critical Blocks access for entire user groups Missing alt text, no keyboard access to navigation Fix before release
Major Significant barrier that degrades experience Insufficient color contrast, missing form labels Fix within current sprint
Minor Usability issue that causes friction Redundant ARIA roles, suboptimal heading hierarchy Fix within next 2 sprints

Usage

Quick Start
# Scan entire project
python scripts/a11y_scanner.py /path/to/project

# Scan with JSON output for tooling
python scripts/a11y_scanner.py /path/to/project --json

# Check color contrast for specific values
python scripts/contrast_checker.py --fg "#777777" --bg "#ffffff"

# Check contrast across a CSS/Tailwind file
python scripts/contrast_checker.py --file /path/to/styles.css
Slash Command
/a11y-audit                    # Audit current project
/a11y-audit --scope src/       # Audit specific directory
/a11y-audit --fix              # Audit and auto-apply fixes
/a11y-audit --report           # Generate stakeholder report
/a11y-audit --ci               # Output CI-compatible results
Three-Phase Workflow

Phase 1: Scan -- Walk the source tree, detect framework, apply rule set.

python scripts/a11y_scanner.py /path/to/project --format table

Phase 2: Fix -- Apply framework-specific fixes for each violation.

See references/framework-a11y-patterns.md for the complete fix patterns catalog.

Phase 3: Verify -- Re-run the scanner to confirm fixes and check for regressions.

python scripts/a11y_scanner.py /path/to/project --baseline audit-baseline.json

Example: React Component Audit

// BEFORE: src/components/ProductCard.tsx
function ProductCard({ product }) {
  return (
    <div onClick={() => navigate(`/product/${product.id}`)}>
      <img src={product.image} />
      <div style={{ color: '#aaa', fontSize: '12px' }}>{product.name}</div>
      <span style={{ color: '#999' }}>${product.price}</span>
    </div>
  );
}
# WCAG Severity Issue
1 1.1.1 Critical <img> missing alt attribute
2 2.1.1 Critical <div onClick> not keyboard accessible
3 1.4.3 Major Color #aaa on white fails contrast (2.32:1, needs 4.5:1)
4 1.4.3 Major Color #999 on white fails contrast (2.85:1, needs 4.5:1)
5 4.1.2 Major Interactive element missing role and accessible name
// AFTER: src/components/ProductCard.tsx
function ProductCard({ product }) {
  return (
    <a href={`/product/${product.id}`} className="product-card"
       aria-label={`View ${product.name} - $${product.price}`}>
      <img src={product.image} alt={product.imageAlt || product.name} />
      <div style={{ color: '#595959', fontSize: '12px' }}>{product.name}</div>
      <span style={{ color: '#767676' }}>${product.price}</span>
    </a>
  );
}

See references/examples-by-framework.md for Vue, Angular, Next.js, and Svelte examples.

Tools Reference

a11y_scanner.py
Usage: python scripts/a11y_scanner.py <path> [options]

Options:
  --json                  Output results as JSON
  --format {table,csv}    Output format (default: table)
  --severity {critical,major,minor}  Filter by minimum severity
  --framework {react,vue,angular,svelte,html,auto}  Force framework (default: auto)
  --baseline FILE         Compare against previous scan results
  --report                Generate stakeholder report
  --output FILE           Write results to file
  --quiet                 Suppress output, exit code only
  --ci                    CI mode: non-zero exit on critical issues
contrast_checker.py
Usage: python scripts/contrast_checker.py [options]

Options:
  --fg COLOR              Foreground color (hex)
  --bg COLOR              Background color (hex)
  --file FILE             Scan CSS file for color pairs
  --tailwind DIR          Scan directory for Tailwind color classes
  --json                  Output results as JSON
  --suggest               Suggest accessible alternatives for failures
  --level {aa,aaa}        Target conformance level (default: aa)

Common Pitfalls

Pitfall Correct Approach
role="button" on a <div> Use native <button> -- includes keyboard handling for free
tabindex="0" on everything Only interactive elements need focus; use native elements
aria-label on non-interactive elements Use aria-labelledby pointing to visible text
display: none for screen reader hiding Use .sr-only class instead
Color alone to convey meaning Add icons, text labels, or patterns alongside color
Placeholder as only label Always provide a visible <label>
outline: none without replacement Always provide a visible focus indicator via focus-visible
Empty alt="" on informational images Informational images need descriptive alt text
Skipping heading levels (h1 -> h3) Heading levels must be sequential
onClick without onKeyDown Add keyboard support or prefer native elements
Ignoring prefers-reduced-motion Wrap animations in @media (prefers-reduced-motion: no-preference)
Skill Relationship
senior-frontend Frontend patterns used in a11y fixes
code-reviewer Include a11y checks in code review workflows
senior-qa Integration of a11y testing into QA processes
playwright-pro Automated browser testing with accessibility assertions
epic-design WCAG 2.1 AA compliant animations and scroll storytelling
tdd-guide Test-driven development patterns for a11y test cases

Reference Documentation

Reference Description
wcag-quick-ref.md WCAG 2.2 Level A & AA criteria quick reference
wcag-22-new-criteria.md New WCAG 2.2 success criteria (Focus Appearance, Target Size, etc.)
aria-patterns.md ARIA patterns, keyboard interaction, and live regions
framework-a11y-patterns.md Framework-specific fix patterns (React, Vue, Angular, Svelte, HTML)
color-contrast-guide.md Color contrast checker details, Tailwind palette mapping, sr-only class
ci-cd-integration.md GitHub Actions, GitLab CI, Azure DevOps, pre-commit hook configs
audit-report-template.md Stakeholder-ready audit report template
testing-checklist.md Manual testing checklist (keyboard, screen reader, visual, forms)
examples-by-framework.md Full audit examples for Vue, Angular, Next.js, and Svelte

Resources

1---
2name: "a11y-audit"
3description: "Accessibility audit skill for scanning, fixing, and verifying WCAG 2.2 Level A and AA compliance across React, Next.js, Vue, Angular, Svelte, and plain HTML codebases. Use when auditing accessibility, fixing a11y violations, checking color contrast, generating compliance reports, or integrating accessibility checks into CI/CD pipelines."
4---
5 
6# Accessibility Audit
7 
8WCAG 2.2 Accessibility Audit and Remediation Skill
9 
10## Description
11 
12The a11y-audit skill provides a complete accessibility audit pipeline for modern web applications. It implements a three-phase workflow -- Scan, Fix, Verify -- that identifies WCAG 2.2 Level A and AA violations, generates exact fix code per framework, and produces stakeholder-ready compliance reports.
13 
14For every violation it finds, it provides the precise before/after code fix tailored to your framework (React, Next.js, Vue, Angular, Svelte, or plain HTML).
15 
16**What this skill does:**
17 
181. **Scans** your codebase for every WCAG 2.2 Level A and AA violation, categorized by severity (Critical, Major, Minor)
192. **Fixes** each violation with framework-specific before/after code patterns
203. **Verifies** that fixes resolve the original violations and introduces no regressions
214. **Reports** findings in a structured format suitable for developers, PMs, and compliance stakeholders
225. **Integrates** into CI/CD pipelines to prevent accessibility regressions
23 
24## Features
25 
26| Feature | Description |
27|---------|-------------|
28| **Full WCAG 2.2 Scan** | Checks all Level A and AA success criteria across your codebase |
29| **Framework Detection** | Auto-detects React, Next.js, Vue, Angular, Svelte, or plain HTML |
30| **Severity Classification** | Categorizes each violation as Critical, Major, or Minor |
31| **Fix Code Generation** | Produces before/after code diffs for every issue |
32| **Color Contrast Checker** | Validates foreground/background pairs against AA and AAA ratios |
33| **Compliance Reporting** | Generates stakeholder reports with pass/fail summaries |
34| **CI/CD Integration** | GitHub Actions, GitLab CI, Azure DevOps pipeline configs |
35| **Keyboard Navigation Audit** | Detects missing focus management and tab order issues |
36| **ARIA Validation** | Checks for incorrect, redundant, or missing ARIA attributes |
37 
38### Severity Definitions
39 
40| Severity | Definition | Example | SLA |
41|----------|-----------|---------|-----|
42| **Critical** | Blocks access for entire user groups | Missing alt text, no keyboard access to navigation | Fix before release |
43| **Major** | Significant barrier that degrades experience | Insufficient color contrast, missing form labels | Fix within current sprint |
44| **Minor** | Usability issue that causes friction | Redundant ARIA roles, suboptimal heading hierarchy | Fix within next 2 sprints |
45 
46## Usage
47 
48### Quick Start
49 
50```bash
51# Scan entire project
52python scripts/a11y_scanner.py /path/to/project
53 
54# Scan with JSON output for tooling
55python scripts/a11y_scanner.py /path/to/project --json
56 
57# Check color contrast for specific values
58python scripts/contrast_checker.py --fg "#777777" --bg "#ffffff"
59 
60# Check contrast across a CSS/Tailwind file
61python scripts/contrast_checker.py --file /path/to/styles.css
62```
63 
64### Slash Command
65 
66```
67/a11y-audit # Audit current project
68/a11y-audit --scope src/ # Audit specific directory
69/a11y-audit --fix # Audit and auto-apply fixes
70/a11y-audit --report # Generate stakeholder report
71/a11y-audit --ci # Output CI-compatible results
72```
73 
74### Three-Phase Workflow
75 
76**Phase 1: Scan** -- Walk the source tree, detect framework, apply rule set.
77 
78```bash
79python scripts/a11y_scanner.py /path/to/project --format table
80```
81 
82**Phase 2: Fix** -- Apply framework-specific fixes for each violation.
83 
84> See [references/framework-a11y-patterns.md](references/framework-a11y-patterns.md) for the complete fix patterns catalog.
85 
86**Phase 3: Verify** -- Re-run the scanner to confirm fixes and check for regressions.
87 
88```bash
89python scripts/a11y_scanner.py /path/to/project --baseline audit-baseline.json
90```
91 
92## Example: React Component Audit
93 
94```tsx
95// BEFORE: src/components/ProductCard.tsx
96function ProductCard({ product }) {
97 return (
98 <div onClick={() => navigate(`/product/${product.id}`)}>
99 <img src={product.image} />
100 <div style={{ color: '#aaa', fontSize: '12px' }}>{product.name}</div>
101 <span style={{ color: '#999' }}>${product.price}</span>
102 </div>
103 );
104}
105```
106 
107| # | WCAG | Severity | Issue |
108|---|------|----------|-------|
109| 1 | 1.1.1 | Critical | `<img>` missing `alt` attribute |
110| 2 | 2.1.1 | Critical | `<div onClick>` not keyboard accessible |
111| 3 | 1.4.3 | Major | Color `#aaa` on white fails contrast (2.32:1, needs 4.5:1) |
112| 4 | 1.4.3 | Major | Color `#999` on white fails contrast (2.85:1, needs 4.5:1) |
113| 5 | 4.1.2 | Major | Interactive element missing role and accessible name |
114 
115```tsx
116// AFTER: src/components/ProductCard.tsx
117function ProductCard({ product }) {
118 return (
119 <a href={`/product/${product.id}`} className="product-card"
120 aria-label={`View ${product.name} - $${product.price}`}>
121 <img src={product.image} alt={product.imageAlt || product.name} />
122 <div style={{ color: '#595959', fontSize: '12px' }}>{product.name}</div>
123 <span style={{ color: '#767676' }}>${product.price}</span>
124 </a>
125 );
126}
127```
128 
129> See [references/examples-by-framework.md](references/examples-by-framework.md) for Vue, Angular, Next.js, and Svelte examples.
130 
131## Tools Reference
132 
133### a11y_scanner.py
134 
135```
136Usage: python scripts/a11y_scanner.py <path> [options]
137 
138Options:
139 --json Output results as JSON
140 --format {table,csv} Output format (default: table)
141 --severity {critical,major,minor} Filter by minimum severity
142 --framework {react,vue,angular,svelte,html,auto} Force framework (default: auto)
143 --baseline FILE Compare against previous scan results
144 --report Generate stakeholder report
145 --output FILE Write results to file
146 --quiet Suppress output, exit code only
147 --ci CI mode: non-zero exit on critical issues
148```
149 
150### contrast_checker.py
151 
152```
153Usage: python scripts/contrast_checker.py [options]
154 
155Options:
156 --fg COLOR Foreground color (hex)
157 --bg COLOR Background color (hex)
158 --file FILE Scan CSS file for color pairs
159 --tailwind DIR Scan directory for Tailwind color classes
160 --json Output results as JSON
161 --suggest Suggest accessible alternatives for failures
162 --level {aa,aaa} Target conformance level (default: aa)
163```
164 
165## Common Pitfalls
166 
167| Pitfall | Correct Approach |
168|---------|------------------|
169| `role="button"` on a `<div>` | Use native `<button>` -- includes keyboard handling for free |
170| `tabindex="0"` on everything | Only interactive elements need focus; use native elements |
171| `aria-label` on non-interactive elements | Use `aria-labelledby` pointing to visible text |
172| `display: none` for screen reader hiding | Use `.sr-only` class instead |
173| Color alone to convey meaning | Add icons, text labels, or patterns alongside color |
174| Placeholder as only label | Always provide a visible `<label>` |
175| `outline: none` without replacement | Always provide a visible focus indicator via `focus-visible` |
176| Empty `alt=""` on informational images | Informational images need descriptive alt text |
177| Skipping heading levels (h1 -> h3) | Heading levels must be sequential |
178| `onClick` without `onKeyDown` | Add keyboard support or prefer native elements |
179| Ignoring `prefers-reduced-motion` | Wrap animations in `@media (prefers-reduced-motion: no-preference)` |
180 
181## Related Skills
182 
183| Skill | Relationship |
184|-------|-------------|
185| **senior-frontend** | Frontend patterns used in a11y fixes |
186| **code-reviewer** | Include a11y checks in code review workflows |
187| **senior-qa** | Integration of a11y testing into QA processes |
188| **playwright-pro** | Automated browser testing with accessibility assertions |
189| **epic-design** | WCAG 2.1 AA compliant animations and scroll storytelling |
190| **tdd-guide** | Test-driven development patterns for a11y test cases |
191 
192## Reference Documentation
193 
194| Reference | Description |
195|-----------|-------------|
196| [wcag-quick-ref.md](references/wcag-quick-ref.md) | WCAG 2.2 Level A & AA criteria quick reference |
197| [wcag-22-new-criteria.md](references/wcag-22-new-criteria.md) | New WCAG 2.2 success criteria (Focus Appearance, Target Size, etc.) |
198| [aria-patterns.md](references/aria-patterns.md) | ARIA patterns, keyboard interaction, and live regions |
199| [framework-a11y-patterns.md](references/framework-a11y-patterns.md) | Framework-specific fix patterns (React, Vue, Angular, Svelte, HTML) |
200| [color-contrast-guide.md](references/color-contrast-guide.md) | Color contrast checker details, Tailwind palette mapping, sr-only class |
201| [ci-cd-integration.md](references/ci-cd-integration.md) | GitHub Actions, GitLab CI, Azure DevOps, pre-commit hook configs |
202| [audit-report-template.md](references/audit-report-template.md) | Stakeholder-ready audit report template |
203| [testing-checklist.md](references/testing-checklist.md) | Manual testing checklist (keyboard, screen reader, visual, forms) |
204| [examples-by-framework.md](references/examples-by-framework.md) | Full audit examples for Vue, Angular, Next.js, and Svelte |
205 
206## Resources
207 
208- [WCAG 2.2 Specification](https://www.w3.org/TR/WCAG22/)
209- [WAI-ARIA Authoring Practices 1.2](https://www.w3.org/WAI/ARIA/apg/)
210- [Deque axe-core Rules](https://github.com/dequelabs/axe-core/blob/develop/doc/rule-descriptions.md)
211- [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y)
212