web-accessibility
Routing-first skill for web accessibility remediation and verification. Use when the main job is classifying which accessibility surface is failing — semantics, keyboard/focus, labels/announcements, visual perception/reflow, media alternatives, or routed-app navigation feedback — and turning vague a
By akillness · 503 installs
npx skills add akillness/jeo-skills --skill web-accessibility
Source repository · Upstream listing
Web Accessibility
Use this skill when the job is to name the failing accessibility surface, fix it at the right layer, and leave behind a short remediation + verification packet .
The job is not to dump generic WCAG prose, paste raw scanner output, or absorb every neighboring frontend concern.
This skill should:
1. classify the failing accessibility surface,
2. separate automated findings from manual or assistive technology follow up,
3. choose the smallest credible remediation packet,
4. keep routed app feedback and focus behavior explicit,
5. route broader design/layout/component governance work honestly.
Read these support docs first:
[references/intake packets and route outs.md](references/intake packets and route outs.md)
[references/audit remediation checklist.md](references/audit remediation checklist.md)
[references/handoff boundaries.md](references/handoff boundaries.md)
When to use this skill
A team says “make this accessible” and the missing accessibility surface is still unclear
axe, Lighthouse, Accessibility Insights, Pa11y, QA notes, or user reports need to be turned into one remediation plan instead of a raw finding dump
You need to decide whether the main issue is semantics, keyboard/focus, labels/announcements, reflow/contrast/motion, media alternatives, or routed app navigation feedback
A modal, form, nav, menu, table, dashboard, or routed flow needs manual vs automated verification guidance before release
Screen reader, keyboard only, or zoom/reflow issues are suspected, but ownership and next checks are unclear
When not to use this skill
The main task is reusable primitive / slot / variant API design or component family ownership → design system
The main task is viewport adaptation, breakpoint strategy, container query planning, or layout overflow control → responsive design
The main task is token governance, contribution rules, or system wide frontend standards → design system
The task is only to run one tool and paste raw results ; run the tool directly, then return here to prioritize remediation and manual follow up
Instructions
Step 1: Frame the accessibility job before naming fixes
Capture the minimum packet first.
Rule: do not start with “add ARIA,” “run axe again,” or “quote WCAG 2.1.”
First label the failing accessibility surface.
Step 2: Choose exactly one primary remediation packet
Use the router in [references/intake packets and route outs.md](references/intake packets and route outs.md).
Primary packets:
1. semantics structure
2. keyboard focus
3. labels announcements
4. visual perception reflow
5. media alternatives
6. routed navigation feedback
Pick the highest risk user facing failure as primary.
List everything else as follow up, not as equal co owners.
Step 3: Keep the invariants visible
These rules survive every answer:
automated tools accelerate discovery, but they do not prove accessibility completeness
native HTML semantics beat ARIA patching when native controls already solve the problem
keyboard/focus failures in interactive flows usually outrank cosmetic cleanups
routed apps need explicit focus and announcement decisions because browser navigation cues disappear
labels, instructions, errors, and async status text are part of task completion, not polish
every remediation recommendation needs a matching manual verification step
Step 4: Build the accessibility remediation packet
Return this structure:
Step 5: Use the packet, not a giant checklist
Pull the packet from [references/intake packets and route outs.md](references/intake packets and route outs.md).
Packet rules:
semantics structure → landmarks, headings, lists, tables, buttons/links, form markup, native first fixes
keyboard focus → tab order, visible focus, trap/escape behavior, initial focus, focus return, composite widget behavior
labels announcements → accessible names, helper/error relationships, live regions, status/error messaging, required state clarity
visual perception reflow → contrast, reduced motion, zoom, reflow, target visibility, state visibility
media alternatives → alt text, decorative vs informative imagery, captions, transcripts, fallback descriptions
routed navigation feedback → page title / heading announcement, route change focus strategy, SPA/app router cues, async load state announcements
Step 6: Separate automated findings from manual proof
Use this split in every serious answer:
Automated friendly — missing labels, duplicate IDs, invalid ARIA, simple contrast failures, landmark/heading gaps
Manual keyboard/focus — tab sequence, visible focus, trap behavior, initial focus, focus return, menu/listbox/dialog interaction
Manual AT / content quality — announcement usefulness, alt text quality, label clarity, route change comprehension, async feedback quality
If the request starts from a scanner, say explicitly that the scanner is the input artifact , not the finished answer.
Step 7: Route adjacent work explicitly
Use these route outs when the problem crosses boundaries:
If the real job is... Route to...
broad UI/design review, hierarchy, polish, or guideline compliance owned here, in broad review mode
reusable component API / primitive ownership / slot variant design design system
viewport/container layout strategy or breakpoint planning responsive design
token governance or system wide frontend standards design system
React/Next performance or hydration behavior react best practices
Output expectations
A strong answer from this skill should:
1. identify the primary failing accessibility surface ,
2. recommend one bounded remediation packet,
3. name the manual verification still required ,
4. avoid equating a scanner pass with completion,
5. route broader frontend ownership questions outward instead of absorbing them.
Examples
Example 1: modal audit after axe
Input
Audit this checkout modal for accessibility issues and tell me what to test manually after axe.
Output direction
choose keyboard focus or labels announcements
treat axe as the input artifact, not the whole workflow
verify initial focus, trap behavior, focus return, and announcement quality
keep broader visual polish critique out unless it materially affects accessibility
Example 2: routed app navigation confusion
Input
Screen reader users say our React app changes routes but the new page is not announced and focus stays on the old nav link.
Output direction
choose routed navigation feedback
classify title/heading announcement plus focus reset strategy
include manual AT verification after the fix
avoid turning the task into generic routing architecture work
Example 3: component boundary confusion
Input
Our button primitive API is messy and some variants are not accessible. Is this web accessibility or design system?
Output direction
keep accessible name, focus state, and disabled/loading announcement fixes in web accessibility
route primitive API / variant ownership to design system
split the plan instead of forcing one skill to own everything
Example 4: manual checks after Lighthouse
Input
Lighthouse says contrast is okay now. What should I still test manually?
Output direction
treat this as verification planning, not score celebration
verify keyboard order, focus visibility, routed flow cues, and screen reader announcement quality where relevant
include zoom/reflow and reduced motion checks when the interface depends on them
Best practices
1. Start with the user task and failing surface, not the rule number.
2. Treat automated tools as accelerators, not as proof of accessibility completeness.
3. Prefer native HTML semantics before ARIA heavy patches.
4. Keep focus behavior intentional for overlays, route changes, and async validation.
5. Separate remediation packets from broader design review or component architecture work.
6. When unsure, name the manual verification still required instead of pretending the scan is enough.
References
[W3C: Evaluating Web Accessibility Overview](https://www.w3.org/WAI/test evaluate/)
[W3C: Easy Checks – A First Review of Web Accessibility](https://www.w3.org/WAI/test evaluate/preliminary/)
[web.dev: Manual accessibility testing](https://web.dev/learn/accessibility/test manual)
[MDN: Keyboard accessible](https://developer.mozilla.org/en US/docs/Web/Accessibility/Guides/Understanding WCAG/Keyboard)
[React Router: Accessibility](https://reactrouter.com/how to/accessibility)
[Next.js: Accessibility](https://nextjs.org/docs/architecture/accessibility)