Spot it, snap it, report it — turn anonymous alley dumps into city action requests in under a minute.
# Alley Dumping Reporter: Fast Illegal Trash Alerts
## The Problem
Illegal dumping in alleys, vacant lots, and neighborhood edges creates blight that lingers for weeks or months. Residents see the problem daily but face friction reporting it: they don't know which city department handles it, the 311 process feels slow and opaque, and nothing seems to change. Meanwhile, chronic dumping spots get worse because there's no collective visibility into patterns that would justify enforcement priority.
## Who Uses It
**The Daily Dog Walker** — Walks the same alley route every morning, spots new dumps before anyone else, wants to report in 30 seconds without breaking stride.
**The Block Club Captain** — Needs aggregate data to present at aldermanic meetings: "We had 47 dumps on this corner in 6 months." Wants to show patterns, not just complain.
**The Fed-Up Landlord** — Manages three buildings, tenants text them photos of alley messes, needs a fast way to document and route reports without becoming a full-time 311 operator.
**The City-Curious Newcomer** — Recently moved to the neighborhood, noticed a mattress pile growing behind their garage, has no idea who handles this or whether reporting even works.
## Core Features
1. **30-Second Photo Report Flow** — Open app, snap photo, confirm auto-detected location (GPS + optional address override), tap "Report" — done. No login required for first report. Location pins to the nearest alley or lot parcel.
2. **Auto-Route to Correct Civic Channel** — Uses `search_civic_services` to determine the appropriate city service for illegal dumping in the user's area. Displays the correct department name and expected response timeline. Generates a pre-filled report the user can submit via their city's 311 system (link + formatted text to paste).
3. **Chronic Hotspot Map** — Public, read-only map showing all reported dumps in the last 90 days. Color-coded by status (reported/acknowledged/resolved/stale). Cluster view highlights chronic locations. Embeddable for block club websites.
4. **Pattern Export for Advocacy** — Block clubs can download a CSV or PDF summary of dumps in their defined area: dates, locations, photo counts, resolution times. Formatted for aldermanic meetings or FOIA context.
5. **Anonymous Resolution Tracking** — After submitting, users get a simple tracking token (no account needed). They can return to check if others have marked the dump resolved, or mark it resolved themselves. Crowd-confirmed resolution triggers "cleared" status.
6. **Official Contact Lookup** — Surface relevant elected officials for the dump location using the `/api/officials` endpoint. One tap to see who represents that alley — alderman, ward sanitation contact — with reach numbers when available.
7. **Neighborhood Digest Mode** — Optional email signup (just email + area code) for weekly summaries: "3 new dumps reported near you, 2 resolved, 1 chronic spot flagged."
## WellSpr.ing Integration Points
### MCP Tools (via POST to `https://wellspr.ing/mcp`, JSON-RPC 2.0)
| Tool | Usage |
|------|-------|
| `search_civic_services` | Query "illegal dumping" + location to find the correct city department, phone numbers, and submission channels. Core to the auto-routing feature. |
| `get_city_services` | Fallback/browse view — show all sanitation-related services in the user's city if search returns sparse results. |
| `ask_ody` | Power a "What happens next?" explainer. User asks "How long does the city take to pick up dumped furniture?" and Ody provides local context. |
| `reach_number` | When officials are surfaced, provide a reach number for the relevant alderman or sanitation director if available. |
| `get_civic_ideas` | Surface related civic ideas others have proposed (e.g., "Adopt-an-Alley cleanup program") — show in a "Community Ideas" sidebar. |
### REST Endpoints
| Endpoint | Usage |
|----------|-------|
| `GET /api/officials` | Fetch elected officials for the dump location to display "Your representatives" card with contact info. |
| `GET /api/geo/portals?area_code=NNN` | Determine which civic portals (311 systems, city apps) are available for the user's area. Link directly to the correct submission portal. |
### WCIB Endpoints
| Endpoint | Usage |
|----------|-------|
| `POST /api/wcib/ody-ask` | Backend call for the "What happens next?" conversational feature. |
| `GET /api/wcib/ideas` | Pull civic ideas related to dumping/cleanup for the community sidebar. |
### Future: Covenant Commerce (Roadmap — not yet live)
- **Bulk pickup service marketplace** — Connect reporters to local haulers who can clear dumps for a fee, with transparent pricing. Would require merchant registration and payment rails not currently available.
- **Cleanup bounty system** — Block clubs post bounties for verified cleanups, paid via covenant commerce. Not yet live.
## Data Model
```
┌─────────────────────────────────────────────────────────────────┐
│ DUMP_REPORTS │
├─────────────────────────────────────────────────────────────────┤
│ id (uuid, pk) │
│ created_at (timestamp) │
│ latitude, longitude (decimal) │
│ address_text (string, optional — user override) │
│ photo_urls (array of strings — stored in S3/Cloudflare R2) │
│ description (string, optional — "mattresses and tires") │
│ civic_service_id (string — from search_civic_services response) │
│ status (enum: reported | acknowledged | resolved | stale) │
│ tracking_token (string — for anonymous follow-up) │
│ area_code (string — for geo queries) │
│ resolution_confirmed_at (timestamp, nullable) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ RESOLUTION_VOTES │
├─────────────────────────────────────────────────────────────────┤
│ id (uuid, pk) │
│ dump_report_id (fk → DUMP_REPORTS) │
│ voted_at (timestamp) │
│ voter_token (string — hashed IP or browser fingerprint) │
│ vote_type (enum: resolved | still_there) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ DIGEST_SUBSCRIPTIONS │
├─────────────────────────────────────────────────────────────────┤
│ id (uuid, pk) │
│ email (string) │
│ area_code (string) │
│ created_at (timestamp) │
│ confirmed (boolean) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ HOTSPOT_CLUSTERS (materialized
◎
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