Skip to content

feat: improve UX flow & accessibility + reusable Claude agents/skills#136

Merged
TheMeinerLP merged 4 commits into
mainfrom
claude/improve-ux-accessibility-79PHQ
May 16, 2026
Merged

feat: improve UX flow & accessibility + reusable Claude agents/skills#136
TheMeinerLP merged 4 commits into
mainfrom
claude/improve-ux-accessibility-79PHQ

Conversation

@TheMeinerLP
Copy link
Copy Markdown
Collaborator

Summary

Establish accessibility as a first-class concern by introducing ESLint accessibility rules, a skip-to-content link, keyboard event handling improvements, and reusable accessibility review agents and skills for the Claude Code environment.

Key Changes

Accessibility Tooling & CI

  • eslint-plugin-vuejs-accessibility: Added to package.json and wired into eslint.config.mjs with WCAG 2.1 AA rules; label association configured to accept for/id binding.
  • Lighthouse CI gate: Upgraded categories:accessibility from warn to error (minScore 0.9); also enforced image-alt and link-text as errors in .lighthouserc.json.
  • Claude Code settings: Added .claude/settings.json to permit pnpm lint, pnpm build, and Lighthouse CI commands.

Skip Link & Focus Management

  • Skip link: Added visually-hidden .skip-link in assets/css/tokens.css that appears on keyboard focus; targets #main-content in layouts/default.vue.
  • Main content anchor: Added id="main-content" and tabindex="-1" to <main> in layouts/default.vue to enable skip-link focus restoration.
  • Keyboard event handling: Replaced @keydown.escape.window with onKeyStroke('Escape', ...) in NavigationBar.vue and LanguageSelector.vue for cleaner, more testable keyboard traps.

Reduced Motion

  • Enhanced @media (prefers-reduced-motion: reduce) in tokens.css to disable all animations/transitions globally (0.01ms duration, 1 iteration) for users who prefer reduced motion.

Semantic & ARIA Cleanup

  • Removed redundant role="region" from sections that already have aria-label or aria-labelledby (Carousel, ServerConcept, OpenCollectiveStats, Sponsoring).
  • Removed redundant role="navigation" from <nav> elements (NavigationBar).
  • Removed redundant role="article" and role="listitem" from semantic elements (blog article, team member card).
  • Removed role="separator" from <hr> (semantic by default).
  • Removed role="contentinfo" from <footer> (semantic by default).
  • Added aria-expanded to disclosure toggles (NavigationBar summary element).
  • Fixed form label bindings: changed :for="'team-search'" to for="team-search" (and similar) in TeamMembers.vue.

Reusable Agents & Skills

  • .claude/skills/a11y-review: Checklist for auditing Vue/Nuxt components against WCAG 2.1 AA (structure, keyboard, labels, contrast, motion).
  • .claude/agents/accessibility-reviewer: Subagent for independent accessibility review before PR submission.
  • .claude/skills/component-scaffold: Enforces feature scaffolding order (types → composables → sections → page).
  • AGENTS.md: Updated to document these reusable standards and CI enforcement.

i18n

  • Added accessibility.skip_to_content to both en.json and de.json.

Package Scripts

  • Added lint and lint:fix scripts to package.json for ESLint execution.

Notable Implementation Details

  • Carousel and disclosure toggles include inline ESLint disable comments (vuejs-accessibility/no-static-element-interactions, vuejs-accessibility/click-events-have-key-events) with explanations, since native keyboard parity is provided by the section/summary elements themselves.
  • Skip link uses CSS transition (respects prefers-reduced-motion) and appears at top: 0.5rem on focus.
  • All new accessibility strings are sourced from i18n, never hard-coded.

https://claude.ai/code/session_01LvWGnpirg7doE1sbsxh8g9

claude added 2 commits May 16, 2026 10:50
…skills

- Add skip-to-content link, reduced-motion safeguards and main landmark
- Wire eslint-plugin-vuejs-accessibility into the flat config + lint scripts
- Promote the Lighthouse accessibility gate to an error and add a11y audits
- Fix 25 a11y findings (redundant roles, label association, focusable menu,
  keyboard parity for escape handlers, carousel mouse/key events)
- Add checked-in .claude/ skills (a11y-review, component-scaffold), an
  accessibility-reviewer agent and settings, documented in AGENTS.md

https://claude.ai/code/session_01LvWGnpirg7doE1sbsxh8g9
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 16, 2026

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
launchpad ea77b9b Commit Preview URL

Branch Preview URL
May 16 2026, 11:32 AM

…essibility-79PHQ

# Conflicts:
#	components/features/navigation/LanguageSelector.vue
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented May 16, 2026

Deploying launchpad with  Cloudflare Pages  Cloudflare Pages

Latest commit: fcf86da
Status:🚫  Build failed.

View logs

@TheMeinerLP TheMeinerLP changed the title Add accessibility tooling, skip link, and a11y review standards feat: improve UX flow & accessibility + reusable Claude agents/skills May 16, 2026
- Darken Java server address button to emerald-700 for 4.5:1 contrast
- Drop invalid role="menuitem" from desktop nav links (no menu parent)
- Remove invalid role="listitem" on <article> + redundant role="list"
- Enlarge carousel and sponsor pagination dots to 24px touch targets
@TheMeinerLP TheMeinerLP merged commit b748278 into main May 16, 2026
4 checks passed
@TheMeinerLP TheMeinerLP deleted the claude/improve-ux-accessibility-79PHQ branch May 16, 2026 14:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants