Crowdsource accessibility intel so wheelchair users can plan routes with confidence
# Curb Ramp Condition Tracker for Wheelchair Users
## The Problem
Wheelchair users, parents with strollers, and people using walkers face a daily navigation lottery: will the curb ramp at the next intersection be usable, or will it be crumbled, flooded, blocked, or missing entirely? Official city data on ramp conditions is often years out of date, and 311 reports disappear into a void with no feedback. Meanwhile, the people who know exactly which ramps are dangerous—the neighbors who traverse them daily—have no way to share that knowledge or see it aggregated into safer routes.
## Who Uses It
**Maria, 34, power wheelchair user** — Commutes independently but has been stranded twice this month at intersections where ramps were blocked by utility work or crumbled beyond use. She wants to report problems and trust that her usual routes are clear.
**David, 67, caregiver** — Pushes his wife's manual wheelchair on daily walks. He's memorized the "good" ramps in their neighborhood but dreads venturing to new areas. He'd contribute ratings in exchange for crowdsourced intel elsewhere.
**Keisha, 28, occupational therapist** — Works with newly injured patients on community mobility. Needs reliable route data to plan training outings without surprise barriers.
**Public Works staff** — Need prioritized, photo-documented repair requests instead of vague 311 tickets saying "bad ramp on Main Street."
## Core Features
1. **One-tap ramp reporting** — At any intersection, a user drops a pin (or uses GPS), selects a condition rating (Good / Usable with Caution / Dangerous / Blocked / Missing), snaps a photo, and optionally adds a note like "lip too high for power chairs" or "flooding after rain."
2. **Live accessibility map** — Color-coded pins on a neighborhood map show ramp conditions at a glance. Users can filter by severity, recency ("reported in last 30 days"), or issue type (structural, temporary obstruction, missing entirely).
3. **Route confidence check** — Enter a start and end address; the app shows all curb ramps along the suggested walking route with their current ratings, flagging any Dangerous or Blocked ramps so users can choose an alternate path.
4. **Auto-forwarding to city services** — Reports rated "Dangerous" or "Missing" are automatically packaged with photo, coordinates, and description and forwarded to the appropriate city department contact, with the reporter CC'd so they can track response.
5. **Ramp "watchlist"** — Users can subscribe to specific ramps (e.g., on their daily commute) and get notified when the condition changes—either a new community report or a city repair confirmation.
6. **Verification voting** — Other users passing the same ramp can confirm or update the rating, surfacing stale reports and building confidence scores. A ramp with 5 confirmations shows a trust badge.
7. **Accessibility-first interface** — Full screen reader compatibility, high-contrast mode, large touch targets, and voice-to-text for notes. The map is supplemented by a list view sorted by distance for users who prefer non-visual navigation.
## WellSpr.ing Integration Points
### MCP Tools (via POST to `https://wellspr.ing/mcp`, JSON-RPC 2.0)
| Tool | Usage |
|------|-------|
| `get_city_services` | On dangerous/missing ramp reports, fetch the correct department (ADA compliance, Public Works, Streets) and contact method for the user's municipality |
| `search_civic_services` | Help users find related resources—accessible transit options, disability advocacy orgs, or ADA complaint processes |
| `ask_ody` | Power a help chatbot that answers questions like "What's the ADA standard for curb ramp slope?" or "How do I escalate a repair request?" |
| `get_civic_ideas` | Surface related civic tech projects in the WellSpr.ing network, e.g., sidewalk condition trackers or transit accessibility tools, for cross-pollination |
| `get_federation` | Show users which other neighborhoods/cities are running compatible ramp trackers, enabling data sharing across municipal boundaries |
| `get_adjacent_nodes` | When a user is near the edge of their coverage area, discover neighboring nodes that may have ramp data for the next jurisdiction over |
### REST Endpoints
| Endpoint | Usage |
|----------|-------|
| `GET /api/officials` | When auto-forwarding repair requests, include the relevant city council member or ADA coordinator contact so reports reach decision-makers, not just intake queues |
| `GET /api/geo/portals?area_code=NNN` | Fetch links to the user's local open data portal or 311 system for cases where they want to file an official ticket directly |
### WCIB Endpoints
| Endpoint | Usage |
|----------|-------|
| `POST /api/wcib/ody-ask` | Alternative path to Ody for answering user questions about accessibility rights, city processes, or ramp standards |
| `GET /api/wcib/ideas` | Display related civic ideas in a "Build More" section, encouraging contributors to explore or fork adjacent projects |
### Future: Covenant Commerce (Roadmap — not yet live)
When WellSpr.ing's commerce rails are active, this app could:
- Let users tip or donate to reporters who've saved them from dangerous routes
- Enable businesses to sponsor ramp repairs in exchange for "accessibility ally" badges on the map
- Connect licensed contractors with repair work requests
## Data Model
### `ramps`
| Field | Type | Notes |
|-------|------|-------|
| id | uuid | Primary key |
| lat, lng | decimal | GPS coordinates |
| intersection_desc | text | Human-readable location, e.g., "NE corner of Oak & 5th" |
| city_code | string | For federation/jurisdiction routing |
| created_at | timestamp | |
### `reports`
| Field | Type | Notes |
|-------|------|-------|
| id | uuid | Primary key |
| ramp_id | uuid | Foreign key |
| reporter_id | uuid | Nullable for anonymous reports |
| condition | enum | good, caution, dangerous, blocked, missing |
| issue_type | enum | structural, obstruction, slope, drainage, missing |
| photo_url | text | Cloud storage link |
| notes | text | Free-form description |
| forwarded_to_city | boolean | True if auto-sent to services |
| created_at | timestamp | |
### `users`
| Field | Type | Notes |
|-------|------|-------|
| id | uuid | Primary key |
| display_name | string | |
| email | string | Optional, for notifications |
| mobility_profile | enum | wheelchair_power, wheelchair_manual, walker, stroller, other |
| trusted_reporter | boolean | Earned after N verified reports |
### `watchlist`
| Field | Type | Notes |
|-------|------|-------|
| user_id | uuid | |
| ramp_id | uuid | |
| notify_on | enum | any_change, dangerous_only |
### `verifications`
| Field | Type | Notes |
|-------|------|-------|
| report_id | uuid | |
| user_id | uuid | |
| agrees | boolean | Confirms or disputes the report |
| created_at | timestamp | |
## Vibe Coding Prompt to Get Started
Paste this into Claude or Replit Agent:
```
Build a civic accessibility app called "RampWatch" using React + Express on Replit with a SQLite database (upgrade path to Postgres later). Mobile-first design with Tailwind CSS
◎
This is your project thread with Ody. Ask questions, share screenshots, talk through the build. Anyone with this link can join the conversation.
Paste screenshots or upload images/PDFs · Shift+Enter for new line