Help people who need more time find intersections with longer crossing signals
# Crosswalk Countdown: Slow Walker Safety Mapper
## The Problem
Many elderly residents, people using mobility aids, and parents pushing strollers have learned through stressful experience which intersections to avoid—where walk signals change too fast and leave them stranded mid-crossing. This knowledge lives in individual heads and never gets shared, so newcomers and visitors face the same dangerous surprises. A community-sourced map of crossing times and accessibility features lets slower walkers plan routes with confidence and gives advocates hard data to push for signal timing improvements.
## Who Uses It
**Margaret, 78, uses a rolling walker** — She walks to the pharmacy twice a week but takes a six-block detour to avoid the intersection at Oak and Main where she once got stuck in traffic. She'd love to know which other crossings have countdown timers she can trust.
**David, dad of twins in a double stroller** — New to the neighborhood, he's already had two scary moments at crossings he didn't realize were "fast" signals. He'd contribute timing data if it helps other parents.
**Rosa, occupational therapist** — She works with clients regaining mobility after strokes and needs to plan safe walking routes for their rehabilitation exercises. Official city data doesn't include the practical details she needs.
**Councilmember Patel's office** — They've gotten complaints about crosswalk timing but have no systematic data. A community-generated map gives them evidence to prioritize infrastructure requests.
## Core Features
1. **Report a Crossing** — Anyone can log a crosswalk observation: intersection name, walk signal duration (timed with a phone), presence of countdown display, audible signal, refuge island, curb cuts, and a free-text "vibes" note ("feels rushed," "plenty of time," "drivers run the light here").
2. **Slow Walker Overlay Map** — A map view color-coded by crossing difficulty: green (20+ seconds, accessibility features), yellow (12-19 seconds), red (<12 seconds or reported as problematic). Tap any intersection to see all reports.
3. **Route Planner for Slower Walkers** — Enter a start and destination; the tool suggests a route that prioritizes green and yellow crossings, even if it's slightly longer, with estimated crossing points shown.
4. **"I Got Stuck" Quick Report** — A one-tap emergency-style report for when someone gets stranded mid-crossing. These reports flag intersections for urgent community attention and potential advocacy.
5. **Intersection Detail View** — Shows all community reports for a crossing, averaged timing, accessibility features checklist, photos of the crossing, and a "request city review" button that drafts an email to the relevant official.
6. **Neighbor Verification System** — When three different users report similar timing for a crossing, it gets marked as "community verified" with higher confidence in the display.
7. **Monthly Advocacy Report** — Auto-generated summary of worst-rated intersections and "I Got Stuck" incidents, formatted for sharing with city officials or local news outlets.
## WellSpr.ing Integration Points
### MCP Tools (via POST https://wellspr.ing/mcp, JSON-RPC 2.0)
- **`get_city_services`** — Pull existing city infrastructure data about crosswalks, traffic signals, and ADA compliance to pre-populate known intersections and official timing data where available.
- **`search_civic_services`** — Find relevant city departments (traffic engineering, ADA compliance office, 311 systems) to route advocacy requests and "request city review" emails.
- **`get_civic_ideas`** — Check if other builders have created complementary accessibility tools; surface related projects on an "ecosystem" page.
- **`ask_ody`** — Power a help feature where users can ask natural language questions like "Which crossings near the library are safe for my mom's wheelchair?" and get contextual answers from the community data.
- **`get_officials`** (REST: GET https://wellspr.ing/api/officials) — Populate the "contact your representative" feature with correct names and contact info when users want to escalate dangerous crossings.
- **`get_local_news`** — Surface relevant local news about traffic safety, pedestrian incidents, or infrastructure improvements to display on the community feed.
### Future Integration Opportunities
- **future: covenant commerce** — Potential integration with local businesses to highlight "slow walker friendly" routes to their doors, or sponsor crossing improvements.
- **future: federated data sharing** — Use `get_federation` and `get_adjacent_nodes` to share crossing data with neighboring communities once the network matures.
## Data Model
### `crossings`
| Field | Type | Notes |
|-------|------|-------|
| id | uuid | primary key |
| lat, lng | float | intersection coordinates |
| street_names | text | "Oak St & Main Ave" |
| city_official_timing | int | seconds, if known from city data |
| community_avg_timing | int | calculated from reports |
| safety_rating | enum | green/yellow/red, calculated |
| has_countdown | bool | community-verified |
| has_audio | bool | community-verified |
| has_refuge_island | bool | |
| verification_count | int | reports from unique users |
### `reports`
| Field | Type | Notes |
|-------|------|-------|
| id | uuid | |
| crossing_id | uuid | FK |
| user_hash | text | anonymous but consistent |
| timed_seconds | int | user-reported timing |
| features_observed | jsonb | {countdown: true, audio: false, ...} |
| vibes_note | text | free text |
| is_stuck_report | bool | emergency flag |
| created_at | timestamp | |
### `advocacy_requests`
| Field | Type | Notes |
|-------|------|-------|
| id | uuid | |
| crossing_id | uuid | FK |
| official_contacted | text | from /api/officials |
| request_text | text | generated email content |
| status | enum | sent/acknowledged/resolved |
| created_at | timestamp | |
### `routes`
| Field | Type | Notes |
|-------|------|-------|
| id | uuid | |
| user_hash | text | |
| start_point | point | |
| end_point | point | |
| crossing_ids | uuid[] | ordered crossings on route |
| created_at | timestamp | |
## Vibe Coding Prompt to Get Started
```
Build a civic tech web app called "Crosswalk Countdown" that helps slow walkers find safe street crossings.
Tech stack: React frontend, Express backend, PostgreSQL database, Leaflet for maps. Deploy on Replit.
FIRST MILESTONE — Get a working map with crossing reports in 2 hours:
1. Set up a basic Express server with these endpoints:
- GET /api/crossings — return all crossings with their safety ratings
- POST /api/crossings/:id/report — add a new timing/accessibility report
- GET /api/crossings/:id — get full details and all reports for one crossing
2. Create a React frontend with:
- A full-screen Leaflet map centered on [your city coordinates]
- Colored circle markers for each crossing (green/yellow/red based on avg timing: green >= 20s, yellow 12-19s, red < 12s)
- Click a marker to see a popup with crossing details
- A floating "Report a Crossing" button that opens a form
3. The report form should collect:
- Intersection name (auto-detect from map click, or manual entry)
- Walk signal duration in seconds (with a "tap to time" stopwatch helper)
- Checkboxes: countdown display, audio
◎
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