Context
Verified empirically (2026-09-23): no axe-core, Pa11y, or Lighthouse anywhere in this repo (grep -rli "axe-core|pa11y|lighthouse" across *.json/*.ts/*.yml - zero hits outside node_modules). This is a real, currently-unaddressed gap, not a false alarm from an external review.
Proposal
Rather than building a new, separate crawler-based a11y pipeline, add @axe-core/playwright to the existing browser-level test surface (apps/admin/e2e/, currently just checkin.spec.ts - see PR #1410 for its recent promotion into ci.yml as a path-aware PR gate). This repo already has real auth, fixtures, and a genuine authenticated browser session wired up there, which a standalone crawler (Pa11y/Lighthouse CI) would have to duplicate from scratch and wouldn't cover post-login views at all.
Suggested scope, in order:
- Add
@axe-core/playwright as a devDependency of apps/admin.
- Start with the surfaces that already have (or are about to have) a Playwright presence: login/setup, the check-in page, attendee list/detail, event settings, communication.
- First pass: report-only (log serious/critical violations to the job summary, don't fail the build) - this repo already has real accumulated UI, so a blocking gate from day one would likely surface a backlog of pre-existing issues unrelated to whatever PR happens to touch that surface first.
- Once the baseline is clean (or explicitly triaged/allowlisted), flip serious/critical violations to build-failing, following the same "prove it green first, then gate" pattern this repo already used for
e2e-checkin-smoke.yml (14-run bar) and the license-compliance check (continue-on-error: true today, see scripts/check-licenses.mjs).
Out of scope for this issue
- A separate Pa11y/Lighthouse CI pipeline - the Playwright-based approach above supersedes that need.
- Fixing any violations found - this issue is about wiring up detection, not remediation (file follow-up issues once a baseline report exists).
Context
Verified empirically (2026-09-23): no
axe-core, Pa11y, or Lighthouse anywhere in this repo (grep -rli "axe-core|pa11y|lighthouse"across*.json/*.ts/*.yml- zero hits outsidenode_modules). This is a real, currently-unaddressed gap, not a false alarm from an external review.Proposal
Rather than building a new, separate crawler-based a11y pipeline, add
@axe-core/playwrightto the existing browser-level test surface (apps/admin/e2e/, currently justcheckin.spec.ts- see PR #1410 for its recent promotion intoci.ymlas a path-aware PR gate). This repo already has real auth, fixtures, and a genuine authenticated browser session wired up there, which a standalone crawler (Pa11y/Lighthouse CI) would have to duplicate from scratch and wouldn't cover post-login views at all.Suggested scope, in order:
@axe-core/playwrightas a devDependency ofapps/admin.e2e-checkin-smoke.yml(14-run bar) and the license-compliance check (continue-on-error: truetoday, seescripts/check-licenses.mjs).Out of scope for this issue