SpotMyMap aims for practical accessibility on a map-heavy site. We target WCAG 2.2 Level AA for chrome, forms, and HTML pages. We do not claim the interactive canvas map is fully WCAG-conformant - painting ownership on a canvas is a known hard case for screen readers and some motor/keyboard flows.
What works today
- Skip link - first Tab jumps to
#main-content(site header / map or marketing main). - HTML Explore list - searchable countries and placements at /explore, with country pages at
/country/[id], A–Z landmarks, and map jump links. Letter filters use real?letter=links (work without JavaScript). - Marketing & legal pages - standard headings, focus outlines, and a modest Estonian info page at /et.
- Dialogs - claim/checkout confirm, company profile, market "other" list, share card, cookie panel, header menu, and streamer playground use focus trap, Escape to close, and focus restore where those components exist.
- Vision modes - colour-vision filters in the footer (not a substitute for real colour contrast testing).
Canvas map limits (honest)
The home map draws ownership with canvas (and related layers). Country shapes and logos are not exposed as a full DOM tree of named regions. Keyboard zoom/pan and some controls exist, but browsing every painted patch by screen reader is not supported the way a native SVG map with labelled paths would be. That is why Explore exists - use it as the primary non-visual / non-pointer path to countries and rankings. Screen-reader access to painted canvas regions remains a documented limitation (not a near-term claim).
Testing status checklist
Soft-launch engineering status - not a formal conformance claim. Detail lives in docs/A11Y.md.
- Done (engineering) - skip link +
#main-content; Explore HTML list + country pages; dialog focus trap / Escape / restore on known modals; labeled footer nav groups; route smoke tests (npm run test:smoke); optional Playwright a11y smoke when a local server is up. - Done (spot checks) - keyboard Tab through marketing chrome and Explore; focus-visible outlines on primary controls; cookie banner keyboard path.
- Not done / needs humans - full axe or WAVE pass on every route in a deployed environment; VoiceOver / NVDA / TalkBack sessions on claim + Explore; mobile screen-reader claim flow; colour contrast audit with a meter (vision filters ≠ audit); motor / switch-access testing on map chrome.
- Needs live Cloudflare / ops - production RUM for a11y errors; Access-gated admin/manage checks on real CF; Stripe Checkout accessibility is Stripe-hosted (verify in live test mode).
- Needs booking - formal third-party WCAG 2.2 AA audit (external). Not scheduled in this wave.
How we test
- Keyboard: Tab order, skip link, focus-visible outlines, Escape on modals.
- Route smoke tests for landmarks, Explore, dialog hooks, and country pages (
tests/a11y-route-smoke.test.mjs). - Occasional Lighthouse accessibility runs on key routes (see
docs/PERF-BASELINE.md).
We have not completed a formal third-party WCAG audit. Gaps remain on the canvas map and dense map chrome; HTML alternatives are the supported path for those gaps.
Feedback
Found a barrier? Use the on-site request form on the home page (Requests) and mention "accessibility". We prioritise blockers on claim/checkout and the HTML alternative over decorative map polish.
Related: Explore list · How it works · Privacy · Cookies · Info eesti keeles