A curated list of digital accessibility events.
The goal is for each page of this website to meet the requirements of WCAG 2.2 Level AA. If you notice a problem, please report it or email help@eventua11y.com. See the full accessibility statement on the website.
See the contributing guide for ways to get involved in this project, including some that don't require you to write a single line of code.
This project records what the product does and the state of each part in .chocks/, a tree of markdown files managed by Chocks.
Browse or edit the tree with the Chocks UI:
npm run chocksCoding agents should run npx chocks context at the start of a session to load the tree as product context; see AGENTS.md.
- Astro -- the site framework, running in server-side rendering (SSR) mode
- Vue -- interactive components hydrated on the client
- TypeScript -- used throughout the project
- Web Awesome -- web component library providing the core UI elements
- Custom CSS with light and dark themes
- PostCSS with Autoprefixer and cssnano
- Sanity -- real-time content database for events and books, edited in Sanity Studio
- Netlify Edge Functions (Deno runtime) -- three API endpoints:
/api/get-events-- fetches events from Sanity with timezone-aware date processing/api/get-books-- fetches book club books from Sanity/api/get-user-info-- returns user timezone and geolocation data
- Day.js -- date formatting and timezone conversion
- Netlify -- hosting with automatic deploys from the
mainbranch. Feature branches are deployed to preview URLs. - Sentry -- error tracking and performance monitoring
- OpenFeature with the Flagsmith provider -- server-side feature flag evaluation in local-evaluation mode (no per-request HTTP). See the Feature Flags section in AGENTS.md for the flag-authoring workflow and constraints.
- Playwright -- end-to-end and accessibility tests
- axe-core -- automated WCAG 2.2 AA scans on every page as a foundation, with Playwright assertions layered on top for accessible names, landmarks, heading hierarchy, and ARIA states that axe cannot catch
- Vitest -- unit tests
- ESLint -- linting with plugins for Astro, Vue, TypeScript, Playwright, and jsx-a11y
- Prettier -- code formatting
- Node.js (LTS version, see
.nvmrc) - Netlify CLI (included as a dev dependency)
The edge functions require the following environment variables, configured in Netlify:
| Variable | Description |
|---|---|
SANITY_PROJECT |
Sanity project ID |
SANITY_DATASET |
Sanity dataset name |
SANITY_API_VERSION |
Sanity API version |
SANITY_CDN |
Whether to use the Sanity CDN (true/false) |
SENTRY_AUTH_TOKEN |
Sentry auth token (used during build for source map uploads) |
FLAGSMITH_ENVIRONMENT_KEY |
Flagsmith Server-side SDK Token for OpenFeature (one per Netlify scope; optional locally — flags fall back to defaults if unset) |
npm installTo run the dev server with Prettier and ESLint watching for changes:
npm run devOr to run just the Astro dev server:
npm startTo run locally with Netlify Edge Functions, use the Netlify CLI:
npx netlify dev# End-to-end tests (Playwright)
npm test
# Unit tests (Vitest)
npm run test:unit
# Unit tests in watch mode
npm run test:unit:watchPerformance benchmarks live in bench/ and cover the pure date, event
and assembly utilities. They run with Vitest and are tracked continuously by
CodSpeed.
npm run benchnpm run buildThis runs Prettier/ESLint checks, builds the Astro site, and uploads source maps to Sentry.
Pull requests trigger a GitHub Actions workflow that runs unit tests and end-to-end tests against Netlify deploy previews. A separate workflow runs the benchmarks on CodSpeed and reports performance changes on the pull request. Additional workflows check for missing alt text on images and run the GitHub accessibility scanner against key production pages on a weekly schedule (or manually).
The accessibility scanner workflow requires an A11Y_SCANNER_TOKEN repository secret (a fine-grained PAT with actions: write, contents: write, issues: write, pull-requests: write, and metadata: read).
Dependency updates are managed by Dependabot.
