Cuihua A11y Checker

v1.0.0

♿ AI-powered accessibility (a11y) checker. Automatically detect WCAG violations, generate ARIA labels, test keyboard navigation, and ensure your app is acces...

0· 204·0 current·0 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for supermario11/cuihua-a11y-checker.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Cuihua A11y Checker" (supermario11/cuihua-a11y-checker) from ClawHub.
Skill page: https://clawhub.ai/supermario11/cuihua-a11y-checker
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Required binaries: node
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install cuihua-a11y-checker

ClawHub CLI

Package manager switcher

npx clawhub@latest install cuihua-a11y-checker
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description (WCAG checks, ARIA generation, keyboard and contrast testing) match the provided SKILL.md and the included a11y-checker.js, which implements file scanning and heuristic checks for images, buttons, forms, and headings.
Instruction Scope
SKILL.md instructs scanning project files (examples target src/components). The runtime code recursively reads directories and files, and only processes files with .jsx, .tsx or .html extensions — behaviour is within the stated purpose. The instructions do not ask for unrelated system credentials or external endpoints.
Install Mechanism
No install spec; the skill is instruction/code-only and requires the node binary. No remote downloads or package installs are specified.
Credentials
No environment variables, credentials, or config paths are required. The tool only reads local files it is pointed at; requested privileges are proportional to an on‑disk scanner.
Persistence & Privilege
always is false and the skill does not request permanent presence or modify other skills/system configuration. It performs local scanning only and does not persist global state.
Assessment
This skill appears coherent and implements a simple local accessibility scanner. It will read files under whatever path you give it (recurses directories and inspects .jsx/.tsx/.html files) and prints detected issues; it does not contact external services or require secrets. Before installing or invoking: (1) review the small a11y-checker.js if you want to verify behavior (source is included), (2) avoid pointing it at directories with sensitive proprietary or credential-bearing files if you don't want their filenames/snippets included in reports, and (3) if you plan to let the agent invoke skills autonomously, be aware the agent could be instructed to scan arbitrary paths — consider limiting invocation or reviewing outputs before sharing externally.

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

Binsnode
latestvk97e4gvffdwr29gm3sztmm0hdx83hjh5
204downloads
0stars
1versions
Updated 1mo ago
v1.0.0
MIT-0

cuihua-a11y-checker ♿

Build accessible apps for everyone

AI-powered accessibility assistant that ensures your app works for all users:

  • WCAG 2.1 compliance
  • 🎯 Auto-fix common issues
  • ⌨️ Keyboard navigation testing
  • 🎨 Color contrast validation
  • 📱 Screen reader optimization

Why Accessibility Matters

  • 🌍 15% of population has disabilities
  • ⚖️ Legal requirement in many countries
  • 📈 Better UX for everyone
  • 🔍 Better SEO (search engines love semantic HTML)

Quick Start

"Check accessibility of src/components"

Output:

♿ Accessibility Report
━━━━━━━━━━━━━━━━━━━━

Files scanned: 12
Issues found: 18

🔴 CRITICAL (3):
  - Missing alt text on images (5 instances)
  - Form inputs without labels (2 instances)
  - Insufficient color contrast (1 instance)

🟡 WARNINGS (8):
  - Missing ARIA labels on buttons
  - Non-semantic HTML elements
  - Missing skip navigation link

🟢 SUGGESTIONS (7):
  - Add landmarks (header, main, footer)
  - Improve heading hierarchy
  - Add focus indicators

Features

1. WCAG Compliance ✅

Check against WCAG 2.1 standards:

Level A (Must have):

  • Text alternatives for images
  • Keyboard accessibility
  • Color is not the only visual means
  • Labels or instructions for forms

Level AA (Should have):

  • Color contrast ratio ≥ 4.5:1
  • Resize text up to 200%
  • Multiple ways to navigate
  • Consistent navigation

Level AAA (Nice to have):

  • Color contrast ratio ≥ 7:1
  • Sign language for audio
  • Extended audio descriptions

2. Auto-fix Issues 🔧

Before:

<img src="logo.png">
<button onclick="submit()">Click</button>
<div class="nav">...</div>

After:

<img src="logo.png" alt="Company Logo">
<button onclick="submit()" aria-label="Submit form">Click</button>
<nav aria-label="Main navigation">...</nav>

3. Keyboard Navigation ⌨️

Test keyboard accessibility:

⌨️  Keyboard Navigation Test
━━━━━━━━━━━━━━━━━━━━━━━━

✅ Tab order is logical
❌ Focus indicator not visible
❌ Skip link missing
✅ All interactive elements reachable

Issues:
1. Add CSS for :focus state
2. Add skip navigation link
3. Ensure modal traps focus

4. Color Contrast 🎨

Validate color combinations:

🎨 Color Contrast Report
━━━━━━━━━━━━━━━━━━━━━

❌ FAIL: #777 on #fff
   Ratio: 4.47:1 (needs 4.5:1)
   Location: .text-muted class
   Fix: Use #767676 or darker

✅ PASS: #000 on #fff
   Ratio: 21:1

✅ PASS: #0066cc on #fff
   Ratio: 7.47:1

5. ARIA Labels 🏷️

Auto-generate semantic labels:

<!-- Before -->
<button><i class="icon-search"></i></button>

<!-- After -->
<button aria-label="Search">
  <i class="icon-search" aria-hidden="true"></i>
</button>

<!-- Before -->
<div role="dialog">
  <h2>Confirm</h2>
  ...
</div>

<!-- After -->
<div role="dialog" aria-labelledby="dialog-title" aria-modal="true">
  <h2 id="dialog-title">Confirm</h2>
  ...
</div>

6. Screen Reader Testing 📢

Simulate screen reader experience:

📢 Screen Reader Output
━━━━━━━━━━━━━━━━━━━━━

Navigation:
  "Navigation, landmark"
  "Home, link"
  "About, link"
  "Contact, link"

Main content:
  "Main, landmark"
  "Welcome to our site, heading level 1"
  "Get started today, heading level 2"
  "Sign up, button"

Issues:
  - Button at line 45 has no accessible name
  - Image at line 67 has no alt text

Usage Examples

Example 1: Component Audit

User: "Check accessibility of LoginForm component"

Agent:

♿ Accessibility Audit: LoginForm.jsx
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🔴 CRITICAL ISSUES (2):

1. Form inputs missing labels (line 12-15)
   <input type="email" name="email" />
   <input type="password" name="password" />
   
   Fix: Add labels
   <label htmlFor="email">Email</label>
   <input type="email" id="email" name="email" />

2. Submit button has no accessible name (line 18)
   <button type="submit"><Icon name="arrow" /></button>
   
   Fix: Add text or aria-label
   <button type="submit" aria-label="Sign in">
     <Icon name="arrow" />
   </button>

🟡 WARNINGS (1):

1. No error announcements for screen readers
   
   Fix: Add aria-live region
   <div aria-live="polite" aria-atomic="true">
     {error && <p>{error}</p>}
   </div>

WCAG Level: Currently D (not compliant)
After fixes: Level AA ✅

Example 2: Color Contrast Fix

User: "Fix color contrast issues"

Agent:

🎨 Fixing color contrast...

Found 3 issues:

1. .text-muted (#777 on #fff)
   Current: 4.47:1 (FAIL)
   Fixed: #767676 (4.54:1) ✅

2. .btn-secondary (#999 on #fff)
   Current: 2.85:1 (FAIL)
   Fixed: #595959 (7.00:1) ✅

3. .link-subtle (#aaa on #fff)
   Current: 2.32:1 (FAIL)
   Fixed: #6c6c6c (4.50:1) ✅

Updated: styles.css
All contrasts now meet WCAG AA standard!

Example 3: Keyboard Navigation

User: "Test keyboard navigation"

Agent:

⌨️  Testing keyboard navigation...

✅ PASS: Tab order follows visual order
✅ PASS: All interactive elements focusable
❌ FAIL: Focus indicator not visible
❌ FAIL: Modal doesn't trap focus
✅ PASS: Escape key closes modal

Recommendations:

1. Add visible focus styles:
   *:focus {
     outline: 2px solid #0066cc;
     outline-offset: 2px;
   }

2. Implement focus trap in modal:
   useEffect(() => {
     const focusableElements = modal.querySelectorAll(
       'button, [href], input, select, textarea'
     );
     // Trap focus logic...
   }, []);

3. Add skip navigation link:
   <a href="#main" class="skip-link">
     Skip to main content
   </a>

Configuration

.a11yrc.json:

{
  "wcagLevel": "AA",
  "rules": {
    "colorContrast": "error",
    "altText": "error",
    "ariaLabels": "warn",
    "headingOrder": "warn",
    "landmarks": "warn"
  },
  "ignore": [
    "node_modules/**",
    "build/**"
  ],
  "autoFix": {
    "altText": true,
    "ariaLabels": true,
    "colorContrast": false
  }
}

Pricing

Free

  • ✅ Basic WCAG checks
  • ✅ Up to 10 components

Pro ($12/month)

  • ✅ Full WCAG 2.1 suite
  • ✅ Auto-fix suggestions
  • ✅ CI/CD integration

Enterprise ($99/month)

  • ✅ Custom rules
  • ✅ Compliance reports
  • ✅ Team training

Resources

License

MIT


Made with 🌸 by 翠花 (Cuihua)

Build apps that work for everyone.

Comments

Loading comments...