Claude Skills Guide

Claude Code Automated Accessibility Audit Workflow

Manually auditing applications for WCAG compliance takes hours that most development teams don’t have. This guide shows you how to build an automated accessibility audit workflow using Claude Code that catches issues early, integrates smoothly into your development process, and helps you maintain compliance without slowing down delivery.

Why Automate Accessibility Audits?

Traditional accessibility testing relies heavily on manual screen reader testing, keyboard navigation checks, and visual inspections. While these remain important, they happen too late in the development cycle and are difficult to scale. Automated accessibility testing shifts left—catching issues during development when they’re cheapest to fix.

An automated workflow with Claude Code offers several advantages:

Setting Up Your Accessibility Audit Skills

Before building your workflow, ensure Claude Code has the right skills loaded. The /frontend-design skill provides accessibility-aware component generation, while /axe skill (if available) handles automated testing integration.

# Verify your skills are installed by listing the skills directory
ls ~/.claude/skills/ | grep -E "frontend|axe|accessibility"

If you don’t have these skills, you can load them from the Claude Skills marketplace or create a custom accessibility skill that matches your team’s standards.

Building the Core Audit Workflow

The foundation of your automated workflow uses axe-core, the standard engine for automated accessibility testing. Here’s how to integrate it with Claude Code:

// accessibility-audit.js
const AxeBuilder = require('@axe-core/playwright').default;
const { chromium } = require('playwright');

async function runAccessibilityAudit(url) {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  
  const builder = new AxeBuilder(page);
  const results = await builder.analyze();
  
  await browser.close();
  return results;
}

runAccessibilityAudit('http://localhost:3000')
  .then(results => {
    console.log(`Found ${results.violations.length} violations`);
    results.violations.forEach(v => {
      console.log(`- ${v.id}: ${v.description}`);
    });
  });

This script forms the backbone of your audit process. Run it against your development server to get immediate results.

Integrating with Claude Code Prompts

The real power comes from integrating these checks into your Claude Code prompts. Create a CLAUDE.md file in your project that defines your accessibility standards:

# Accessibility Requirements

All components must pass WCAG 2.1 AA standards. Before writing any component:

1. Use semantic HTML elements (header, nav, main, footer)
2. Include proper ARIA labels where semantic elements aren't sufficient
3. Ensure keyboard navigation works for all interactive elements
4. Verify color contrast meets 4.5:1 for normal text
5. Add alt text to all meaningful images

After implementing, run: npx playwright test --grep "accessibility"

When Claude Code reads this file before working on components, it automatically follows accessibility best practices.

Automated Component Review

For component-level audits, use Claude Code to review your React, Vue, or other framework components. Here’s a practical prompt:

Review this component for accessibility issues. Check for:
- Missing or incorrect ARIA attributes
- Improper heading hierarchy
- Missing form labels
- Keyboard accessibility
- Color contrast problems
- Missing focus indicators

Provide a list of issues with severity and suggested fixes.

Claude Code will analyze the component and provide specific, actionable feedback. This is particularly valuable for complex interactive components like modals, dropdowns, and data tables.

CI/CD Integration

To truly automate your workflow, integrate accessibility testing into your continuous integration pipeline. Here’s a GitHub Actions workflow example:

name: Accessibility Audit
on: [push, pull_request]

jobs:
  a11y-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm ci
      - run: npm run build
      - run: npm start &
      - name: Run axe accessibility tests
        run: npx playwright test --grep "accessibility"
      - name: Generate audit report
        if: failure()
        run: npm run a11y-report

This workflow runs accessibility tests on every push and pull request, blocking merges when critical issues are found.

Handling Common Accessibility Issues

Your automated workflow should catch these frequent issues:

Missing Form Labels

// Bad - no label
<input type="email" placeholder="Email" />

// Good - proper labeling
<label htmlFor="email">Email</label>
<input id="email" type="email" placeholder="Email" />

Improper Button Elements

// Bad - div as button
<div onClick={handleSubmit}>Submit</div>

// Good - semantic button
<button type="submit">Submit</button>

Missing Alt Text

// Bad - no alt text
<img src="chart.png" />

// Good - descriptive alt
<img src="chart.png" alt="Sales chart showing 40% growth" />

Focus Management

// Modal should trap focus
useEffect(() => {
  const modal = document.getElementById('modal');
  const focusableElements = modal.querySelectorAll(
    'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
  );
  focusableElements[0].focus();
}, []);

Creating a Custom Claude Skill for Accessibility

For teams with specific requirements, create a custom accessibility skill. Here’s a template:

# Accessibility Review Skill

## Triggers
- On file changes to components/
- When requested to review code

## Actions
1. Analyze component for WCAG 2.1 AA violations
2. Check semantic HTML usage
3. Verify ARIA implementation
4. Test keyboard navigation paths
5. Review color contrast ratios
6. Generate fix suggestions

## Output Format
Provide issues in this structure:
- Issue ID and description
- WCAG success criterion violated
- Code location
- Suggested fix with corrected code

Save this as skills/accessibility-review.md and Claude Code will automatically apply it when reviewing components.

Measuring and Tracking Progress

An effective workflow includes metrics tracking. Store audit results over time to identify trends:

// Track audit history
const auditHistory = [];

function recordAudit(results, timestamp) {
  auditHistory.push({
    timestamp,
    totalViolations: results.violations.length,
    critical: results.violations.filter(v => v.impact === 'critical').length,
    serious: results.violations.filter(v => v.impact === 'serious').length,
    moderate: results.violations.filter(v => v.impact === 'moderate').length,
  });
}

// Generate progress report
function generateReport() {
  const firstAudit = auditHistory[0];
  const latestAudit = auditHistory[auditHistory.length - 1];
  
  console.log(`Accessibility Progress:
    Started with: ${firstAudit.totalViolations} violations
    Current: ${latestAudit.totalViolations} violations
    Reduction: ${((firstAudit.totalViolations - latestAudit.totalViolations) / firstAudit.totalViolations * 100).toFixed(1)}%
  `);
}

This helps justify accessibility work to stakeholders by showing measurable improvement over time.

Best Practices for Sustainable Workflows

Building an accessibility audit workflow is a journey. Here are tips to make it sustainable:

Conclusion

An automated accessibility audit workflow with Claude Code transforms accessibility from a periodic chore into an integral part of your development process. By catching issues early, enforcing standards consistently, and measuring progress over time, you build products that work for everyone while maintaining development velocity.

Start with the basic audit script, integrate it into your Claude Code prompts, and progressively add more sophisticated checks as your team grows comfortable with the workflow. The investment pays dividends in compliance, user satisfaction, and reduced remediation costs.

Built by theluckystrike — More at zovo.one