People with disabilities cannot tell in advance whether a restaurant, park, clinic, or transit stop will actually work for them. Accessibility information is inconsistent, unverified, or missing entirely.
The approach
Crowdsourced accessibility reports scored across ten criteria and rendered as colour-coded markers on an OpenStreetMap map, so a place can be assessed before travelling to it.
Evidence in the implementation
These points are grounded in the project repository, its tests, and its technical documentation. They are not estimates of business impact.
Accessibility evidence
Accessibility is the product data model, not a decorative claim: places record entrance, door, elevator, washroom, parking, signage, transit, aisle, and service-animal information alongside photos and issue reports.
Security and validation
Auth.js supports Google, magic-link, and credential sign-in. Reviewer and business capabilities are enforced in API routes and UI, with Zod schemas covering runtime input validation.
Testing
Vitest covers accessibility scoring, validation, and badge thresholds; Playwright provides an end-to-end smoke suite. A Docker test workflow is also documented.
Known constraint
Photo uploads currently use local filesystem storage, and business subscriptions use a pending placeholder state until billing is connected. Both limitations are called out in the README.
Working outcomes
Each place receives a calculated accessibility score across 10 criteria
Evidence: Implemented in the Place scoring model with unit coverage.
Seed data covers roughly 50 Victoria places and roughly 15 high-confidence Vancouver civic and transit locations
Evidence: Documented in the repository README and seed scripts.
Place pages combine scores with checklist details, photo evidence, reviews, and current issue reports
Evidence: Documented in the README and represented by dedicated models and routes.
Technical choices and tradeoffs
Leaflet with OpenStreetMap and Nominatim instead of a commercial map API
Why: No paid key is required, so a civic project can run without per-request billing risk.
Tradeoff: Less polished geocoding, so results are cached and corrected manually where needed.
MongoDB 2dsphere index with a TTL geocode cache
Why: Proximity search needs to stay fast as the dataset grows city by city.
Tradeoff: Compound indexes have to be maintained as new filters are added.