Maps benches, bus stops, and public seating that actually have shade during peak heat hours.
# Shade Seat Scout: Find Cool Resting Spots
## The Problem
During summer heat waves, outdoor public seating becomes unusable for hours at a time — metal benches hit 140°F, shadeless bus stops turn into heat traps, and plaza seats in full sun are dangerous for vulnerable populations. Elders, outdoor workers on break, parents with strollers, and people with disabilities need to know which rest spots actually have shade *right now*, not just which ones exist. Without this knowledge, people either suffer through heat exposure or avoid going outside entirely, cutting them off from community life.
## Who Uses It
**Maria, 72, lives alone** — Walks to the grocery store three blocks away but needs to rest midway. She's learned the hard way which benches are shaded at 2pm and which will burn her legs. She'd love to share her knowledge.
**DeShawn, delivery cyclist** — Takes breaks between runs and needs to find shade fast. Checks the app when he's in an unfamiliar part of the neighborhood.
**Carmen, home health aide** — Walks elderly clients around the block for exercise. Needs to plan routes with guaranteed shaded rest stops, especially for clients with heat sensitivity.
**The Parks Department contact** — Wants community data on shade gaps to prioritize where to install bus shelters or plant trees. Currently flying blind.
**Young parents** — Need to know which playground benches have shade during afternoon pickup time when kids are melting down.
## Core Features
1. **Drop a shade pin** — Anyone can mark a public seating spot (bench, bus shelter, plaza seat, low wall) by tapping the map, adding a photo, and tagging shade source (tree, awning, building shadow, permanent structure).
2. **Time-of-day shade windows** — When adding or editing a spot, users specify when shade actually hits: "Shaded 11am-3pm" or "Morning only before 10am." The map filters spots by current time by default.
3. **Heat relief grades** — Each spot gets crowd-sourced ratings on three things: shade reliability (1-5), seating comfort (1-5), and nearby water access (yes/no/nearby business). Simple tap-to-rate after visiting.
4. **"Cool route" between two points** — Enter start and end locations, get a walking route that maximizes proximity to shaded rest stops, with estimated shade-to-sun ratio for current time.
5. **Shade alerts for your saved spots** — Save your regular rest stops; get a notification if someone reports a spot lost its shade (tree removed, awning gone) or if shade timing changed seasonally.
6. **Civic service connections** — When viewing a spot, see relevant nearby services: cooling centers, public water fountains, senior services. Pull from WellSpr.ing's civic database so the map becomes a heat resilience hub.
7. **Shade gap reports** — Users can mark locations that *need* seating or shade but don't have it: "Bus stop at 5th & Main has no shelter." These aggregate into exportable data for city planners.
## WellSpr.ing Integration Points
### MCP Tools (via POST to `https://wellspr.ing/mcp` using JSON-RPC 2.0)
**`get_city_services`** — Pull cooling centers, senior centers, and parks department facilities to display alongside shade spots. A bench near a cooling center is extra valuable during heat emergencies.
**`search_civic_services`** — When a user views a shade spot, search for relevant services like "water fountain," "public restroom," or "cooling center" within walking distance to enrich the spot detail view.
**`get_businesses`** — Show nearby businesses that might offer shade or water: coffee shops with outdoor awnings, bodegas where you can buy a cold drink. Helps complete the "how do I cool down here" picture.
**`ask_ody`** — Power a "heat safety tips" feature: users can ask questions like "How long can I safely sit in 95 degree heat?" or "What are signs of heat exhaustion?" Ody responds with guidance, making the app educational.
**`submit_business`** — *Future use:* If a local business wants to be listed as "shade-friendly" (offers seating, water, AC respite), they could register through this flow.
**`get_civic_ideas`** — Display community ideas related to heat resilience and urban shade so users see they're part of a larger movement.
**`get_adjacent_nodes`** — For neighborhoods in the WellSpr.ing federation, show shade data from adjacent communities so the map doesn't artificially stop at arbitrary boundaries.
### REST Endpoints
**`GET https://wellspr.ing/api/geo/portals?area_code=NNN`** — Use geographic portals to scope the initial map view to the user's neighborhood and understand the civic geography.
### Future Integration (Roadmap: not yet live)
- **Covenant Commerce for shade structures** — A future payment rail could let neighbors crowdfund shade sails or bus shelter installations through cooperative purchasing.
- **Parks Department data feed** — No current endpoint for official city asset data; shade spot locations are community-sourced for now.
## Data Model
### `shade_spots`
| Field | Type | Notes |
|-------|------|-------|
| id | uuid | Primary key |
| lat, lng | float | Location coordinates |
| spot_type | enum | bench, bus_stop, plaza_seat, low_wall, other |
| shade_source | enum | tree, awning, building, structure, partial |
| photo_url | string | User-uploaded image |
| shade_start, shade_end | time | When shade typically appears |
| created_by | string | Anonymous ID or optional display name |
| created_at | timestamp | |
### `shade_ratings`
| Field | Type | Notes |
|-------|------|-------|
| id | uuid | |
| spot_id | uuid | FK to shade_spots |
| shade_reliability | int | 1-5 |
| comfort | int | 1-5 |
| water_nearby | enum | yes, no, nearby_business |
| rated_at | timestamp | Seasonal tracking |
| time_visited | time | What time they experienced it |
### `shade_gaps`
| Field | Type | Notes |
|-------|------|-------|
| id | uuid | |
| lat, lng | float | Location needing shade |
| gap_type | enum | needs_bench, needs_shelter, needs_tree |
| description | string | "Bus stop with no cover, 20+ people wait here" |
| upvotes | int | Community priority signal |
### `user_saves`
| Field | Type | Notes |
|-------|------|-------|
| user_id | string | Anonymous session ID |
| spot_id | uuid | FK to shade_spots |
| notify_changes | boolean | Opt into alerts |
## Vibe Coding Prompt to Get Started
Paste this into Claude or Replit Agent:
---
Build a web app called "Shade Seat Scout" using React + Express on Replit with a SQLite database (easy to start, can migrate later). Here's the first milestone:
**Milestone 1: Map with shade pins and time filtering (4-6 hours)**
1. Set up a React frontend with Leaflet.js (free, no API key) showing a map centered on a default neighborhood (use 40.7128, -74.0060 for NYC as placeholder).
2. Create an Express backend with these endpoints:
- GET /api/spots — returns all shade spots with lat, lng, spot_type, shade_source, shade_start, shade_end, photo_url
- POST /api/spots — creates a new shade spot
◎
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