From 563797b5654122d9fac44895ee9be9096011f48d Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 16 May 2026 10:50:57 +0000 Subject: [PATCH 1/3] feat: improve accessibility/UX flow and add reusable Claude agents & 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 --- .claude/agents/accessibility-reviewer.md | 30 ++++++++++++ .claude/settings.json | 19 ++++++++ .claude/skills/a11y-review/SKILL.md | 48 +++++++++++++++++++ .claude/skills/component-scaffold/SKILL.md | 28 +++++++++++ .lighthouserc.json | 9 ++-- AGENTS.md | 15 ++++++ assets/css/tokens.css | 28 +++++++++++ components/content/ProseHr.vue | 2 +- .../navigation/NavigationLanguageSelector.vue | 1 + components/features/footer/Footer.vue | 2 +- .../features/home/carousel/Carousel.vue | 7 ++- .../home/server-concept/ServerConcept.vue | 1 - .../features/home/team/TeamMemberCard.vue | 2 +- components/features/home/team/TeamMembers.vue | 13 +++-- .../home/timeline/VerticalTimeline.vue | 2 +- .../features/navigation/LanguageSelector.vue | 10 ++-- .../features/navigation/NavigationBar.vue | 15 ++++-- .../opencollective/OpenCollectiveStats.vue | 1 - components/features/sponsoring/Sponsoring.vue | 1 - eslint.config.mjs | 16 ++++++- i18n/locales/de.json | 3 +- i18n/locales/en.json | 3 +- layouts/default.vue | 3 +- package.json | 3 ++ pages/blog/[...slug].vue | 3 +- pnpm-lock.yaml | 25 ++++++++++ 26 files changed, 258 insertions(+), 32 deletions(-) create mode 100644 .claude/agents/accessibility-reviewer.md create mode 100644 .claude/settings.json create mode 100644 .claude/skills/a11y-review/SKILL.md create mode 100644 .claude/skills/component-scaffold/SKILL.md diff --git a/.claude/agents/accessibility-reviewer.md b/.claude/agents/accessibility-reviewer.md new file mode 100644 index 0000000..f37db4f --- /dev/null +++ b/.claude/agents/accessibility-reviewer.md @@ -0,0 +1,30 @@ +--- +name: accessibility-reviewer +description: >- + Use to independently review UI changes for accessibility and UX-flow + regressions before a PR is opened or when a reviewer requests an a11y pass. + Reports findings only; does not edit code unless explicitly asked. +tools: Read, Grep, Glob, Bash +model: sonnet +--- + +You are an accessibility specialist reviewing changes to a Nuxt 3 / Vue 3 +site (Tailwind, @nuxt/content, @nuxtjs/i18n). + +Process: +1. Determine the changed UI files: `git diff --name-only main...HEAD` filtered + to `components/`, `layouts/`, `pages/`, `assets/css/`. +2. Read each changed file fully and apply the `a11y-review` skill checklist + (WCAG 2.1 AA: structure/semantics, keyboard/focus, names/labels/i18n, + contrast/motion). +3. Run `pnpm lint` and report any `vuejs-accessibility/*` violations. + +Output a single report grouped by severity: +- **Blocker** — keyboard trap, missing accessible name, broken landmark, + contrast failure. +- **Should fix** — heading order, redundant landmarks, missing + `aria-expanded`. +- **Nice to have** — minor polish. + +Each finding: `file:line`, the problem, and a concrete fix. Be precise and +brief. Do not modify files unless the caller explicitly instructs you to. diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..5bac224 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://json.schemastore.org/claude-code-settings.json", + "permissions": { + "allow": [ + "Bash(pnpm install)", + "Bash(pnpm dev)", + "Bash(pnpm build)", + "Bash(pnpm generate)", + "Bash(pnpm lint)", + "Bash(pnpm lint:fix)", + "Bash(pnpm exec eslint .)", + "Bash(pnpm seo:lighthouse)", + "Bash(pnpm seo:check)", + "Bash(git diff:*)", + "Bash(git status)", + "Bash(git log:*)" + ] + } +} diff --git a/.claude/skills/a11y-review/SKILL.md b/.claude/skills/a11y-review/SKILL.md new file mode 100644 index 0000000..7619c4f --- /dev/null +++ b/.claude/skills/a11y-review/SKILL.md @@ -0,0 +1,48 @@ +--- +name: a11y-review +description: >- + Audit Vue/Nuxt components and pages in this repo for accessibility (WCAG 2.1 + AA) and UX-flow issues. Use whenever adding or changing UI, before opening a + PR with visual changes, or when the user asks for an accessibility check. +--- + +# Accessibility & UX-Flow Review + +Apply this checklist to every changed `.vue` file under `components/`, +`layouts/`, and `pages/`. Report findings as a short list grouped by +severity (blocker / should-fix / nice-to-have) with `file:line` refs. + +## Structure & semantics +- One `

` per page; headings increase by one level (no skipped levels). +- Use semantic elements (`