Review component
Skill web-DnA/navable-web-accessibility-skills/skills/review-component
Agent skills that teach AI coding agents to scan, fix, audit, and review WCAG 2.1 Level A + AA accessibility issues using the navable MCP server.
npx -y skills add web-DnA/navable-web-accessibility-skills --skill review-componentAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Reviews a component's source code for accessibility issues without running a browser. Checks ARIA attribute usage, semantic HTML patterns, keyboard navigation, and focus management. Use when the user asks to review, check, or audit a component, file, or code for accessibility.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
5.1 KB, as published. Nobody here has run it
Accessibility Code Review
When to Use
- No running dev server needed
- Works on any component file (React, Vue, Svelte, plain HTML)
- Complements browser-based scanning — catches patterns scanners miss
- Good for PR reviews or pre-commit checks
Review Checklist
Work through each section. Report findings grouped by impact level (critical, serious, moderate, minor).
1. Semantic HTML
- Are interactive elements using native HTML? (
<button>,<a>,<input>,<select>) - Are
<div>or<span>used where semantic elements exist? (e.g.divwithonClick→ should be<button>) - Load
navable://docs/semantic-htmlfor HTML element → implicit ARIA role mapping
Common mistakes:
<div onClick>instead of<button><span>styled as a link instead of<a><div class="header">instead of<header>
2. ARIA Usage
- Are ARIA roles correct for the pattern? (load
navable://docs/aria-patterns) - Are required ARIA attributes present? (e.g.
role="checkbox"needsaria-checked) - Is
aria-hidden="true"used on containers with focusable children? - Are ARIA attribute values valid? (
"true"/"false"strings, not booleans)
Common mistakes:
aria-labelthat doesn't match visible text (violates 2.5.3)- Missing
aria-expandedon disclosure triggers aria-hidden="true"on containers with buttons/links inside
3. Keyboard Navigation
- Can all interactive elements be reached via Tab?
- Do custom widgets handle Arrow keys, Enter, Escape per the APG pattern?
- Is there a visible focus indicator? (check for
outline: nonewithout a replacement) - Are there keyboard traps? (modal dialogs, dropdown menus)
Common mistakes:
tabindex> 0 (creates unpredictable tab order)- Missing
onKeyDownhandler on custom interactive elements outline: none/outline: 0in CSS without alternative focus style
4. Form Accessibility
- Do all inputs have associated
<label>elements (viafor/idor wrapping)? - Are error messages linked to inputs via
aria-describedby? - Is
autocompleteset on personal data fields? (name, email, tel, address) - Do required fields use
aria-required="true"or therequiredattribute?
Common mistakes:
- Placeholder as the only label
- Error messages not programmatically associated with inputs
- Missing
autocompleteon address/payment fields
5. Images and Media
- Do images have
alttext? (decorative images getalt="") - Do SVGs have
aria-labelor<title>, oraria-hidden="true"if decorative? - Do videos have
<track kind="captions">?
Common mistakes:
- Missing
alton<img>(screen readers announce the filename) - SVG icons without
aria-hidden="true"(announced as "image" with no description)
6. Color and Contrast
- Is color the sole means of conveying information? (e.g. red = error, green = success without text/icons)
- Are interactive states (hover, focus, active) distinguishable without color?
Common mistakes:
- Form validation that only uses red borders (no text/icon)
- Links in text distinguished only by color (need underline or other cue)
Output Format
Present findings as a prioritized list:
## Accessibility Review: ComponentName.tsx
### Critical
1. **Line 42:** `<div onClick={handleSubmit}>Submit</div>` — use `<button>` for interactive elements (keyboard inaccessible)
### Serious
2. **Line 15:** `<img src="logo.png">` — missing `alt` attribute
3. **Line 28:** `<input placeholder="Email">` — no `<label>` associated
### Moderate
4. **Line 8:** `<div class="nav">` — use `<nav>` for navigation landmark
### Recommendations
- Consider adding `aria-live="polite"` to the status message region (line 55)
- Add `autocomplete="email"` to the email input (line 28)
MCP Resources (load on demand)
navable://docs/semantic-html— HTML elements → implicit ARIA rolesnavable://docs/aria-patterns— 25 WAI-ARIA widget patterns with keyboard requirementsnavable://docs/fix-patterns— before/after code examples for common violations
Gotchas
- This review cannot catch runtime issues like color contrast, focus management across route
changes, or dynamic ARIA state bugs. Recommend
run_accessibility_scanfor runtime validation. - Framework-specific patterns matter. React uses
htmlFornotfor,classNamenotclass,tabIndexnottabindex. - Don't flag decorative images missing alt — they should have
alt="", not descriptive alt text. - Custom component libraries (MUI, Radix, Headless UI) often handle ARIA internally. Check library docs before flagging missing ARIA on library components.