Accessibility-First Navigation for the University of Ottawa & Ottawa Region
uOttaMove is an accessibility-focused navigation app designed for the University of Ottawa campus and surrounding Ottawa area. It helps users with mobility challenges find safe, usable walking routes by accounting for sidewalk conditions, curb cuts, incline, steps, and other accessibility features ignored by standard map apps.
Most navigation apps optimize for distance or time, not accessibility. As a result, routes may include:
- Stairs or missing curb cuts
- Steep inclines
- Poor or uneven surfaces
- Pathways unusable for wheelchairs or mobility aids
What works for able-bodied users often does not work at all for people with mobility challenges.
uOttaMove uses OpenStreetMap accessibility data and a custom routing engine to generate wheelchair-aware routes that prioritize accessibility over raw distance.
Routes consider:
- Sidewalk surface quality
- Curb height and curb cuts
- Incline and slope
- Steps and obstacles
- Tactile paving
- Wheelchair accessibility tags
- Prioritizes accessible sidewalks and paths
- Penalizes steps, steep slopes, high curbs, and poor surfaces
- Supports different accessibility needs:
- Wheelchair users
- Mobility aids
- Visual impairments
- Accessibility score assigned to each route segment
- Consolidated instructions (no spammy “continue straight” steps)
- Street names included
- Example: In 90 m, turn left onto Young Street
- Advance turn warnings and accessibility alerts
- Start and destination search
- Use current GPS location
- Featured accessible locations around campus and downtown Ottawa
- Click or drag markers to adjust routes
- Color-coded route accessibility
- Smooth zoom and pan controls
- Total distance and estimated time
- Distance to nearest accessible sidewalk
- Accessibility overview of the route
Frontend
- React (18.3.1)
- Vite
- Leaflet + React-Leaflet
- Vanilla CSS
Backend
- Node.js
- Express
- CORS
Data & APIs
- OpenStreetMap (Nominatim)
- Custom processed sidewalk accessibility dataset
- Graph built from sidewalk segments and intersections
- Modified Dijkstra’s algorithm with accessibility weighting
- Nearest-node snapping for start/end points
Weighting logic
- Base weight = distance
- Penalties applied for:
- Steps (very high)
- Poor surface
- Steep incline
- Low-confidence data
Directions are generated using bearing calculations and merged into clear, readable instructions.
- wheelchair: yes / no / limited
- surface: paved / gravel / cobblestone
- kerb: lowered / raised / flush
- incline (direction + degrees)
- tactile_paving
- width
- step_count
- White screen crash: fixed coordinate mismatches (
lonvslng) and string parsing - Too many directions: consolidated straight segments
- Missing street names: extracted from OSM tags
- Slow graph builds: optimized intersection detection
- Accessibility scoring: implemented multi-factor scoring model
# Clone the repository
git clone https://github.com/taranprits2/uOttaMove.git
cd uOttaMove
# Backend
cd server
npm install
npm run dev
# Frontend
cd ../client
npm install
npm run dev