-
Introducing 'GARBOLOGY NYC Do good. Look good. Get the goods.'
-
The rising problem of Trash and it's side effects in NYC
-
-
Share your work, encourage others
-
See live what's up in your neighborhood
-
Get real Bounties and Gigs
-
Leadership Board to recognise your work
-
Talk with 'Scrap' the Voice AI Agent in your Native Language
-
Share, Flex and break the Stigma around Cleaning to your Socials
-
Choose who you are ?
About the project
Inspiration
New York moves ~24,000,000 lbs of trash a day and litter still wins, because sweeping is scheduled and littering isn't. The city's own data shows 300,000+ DSNY 311 complaints a year (2026 is pacing +19%), rat-linked leptospirosis at a record 33 cases (11× the 2001–2020 baseline), and 123,000+ cleanliness summonses hitting small businesses in half a year at $100–$250 each.
But the number that actually inspired us: 1 in 3 New Yorkers admits to littering — while everyone ranks dirty streets a top complaint. That's not an information gap; it's a status gap. Picking up trash reads as low-status, so nobody does it. We wondered: what if cleaning your block looked like winning? "Pokémon GO, but the monster is real and it's made of garbage."
What it does
Garbology NYC — Do good. Look good. Get the goods.
- Verified cleanups: snap a Before photo, clean, snap the After. An AI agent ("the Sentinel") verifies the pair and you earn XP:
XP = 50 × district multiplier × streak multiplier + 100 bounty bonus
The district multiplier is 2× where the city's Scorecard rates streets dirtiest (76% clean in the Bronx vs 99% in Queens), the streak multiplier grows Duolingo-style to 1.5×, and the bounty bonus pays for clearing a real open 311 complaint within 150 m.
- NYC Open Data as game mechanics: three datasets drive play — 311 Service Requests (
erm2-nwe9) become map bounties, DSNY Scorecard ratings (rqhp-hivt) set district multipliers and size each neighborhood's 3-D Trash Monster (every district has a named one — Gunkgobbler of the Bronx), and the 20,413-basket DSNY Litter Basket Inventory (8znf-7b2c) shows where to dump your haul. - Social layer: an Instagram-style feed (props, comments, captions), live leaderboards with Top-3 crowns, streak flames, and canvas-rendered Story-format "flex cards" — "Top 25% of Garbologists citywide" — shared straight into IG Stories/WhatsApp.
- Real Bounties (economic mobility): NYC Admin Code §16-118/§16-123 makes storefronts liable for sidewalk and snow. Businesses post gigs with real rewards (cash, food, store credit), set an XP bar, and the Dispatcher — a zero-network AI agent — ranks applicants purely on verified track record, with human-readable reasons.
- Scrap, the multilingual voice concierge: tap the mascot and just talk — "find me someone to shovel snow, I'll give 70%-off coupons" — in English, Spanish, Chinese, Russian, or Korean. Scrap registers the shop, posts the gig, and reads the Dispatcher's candidates aloud. The whole UI ships in 7 languages (the Local Law 30 set), light/dark themes, and a full accessibility pass.
How we built it
Next.js 16 + TypeScript + SQLite (zero-credential: judges run npm i && npm run dev with no keys), Leaflet + CARTO (no map token), React Three Fiber for the monster, deployed on Vercel.
The signature piece is the agent architecture. Four AI agents with declared personas, goals, tool belts, and egress cages, all publicly traced (tools, tokens, goals) on an in-app Agent Ops dashboard:
- Sentinel (verification) runs inside a Runta security cage: deny-all egress except two hosts, and its request to Claude vision carries no API key at all — Runta injects credentials at the network boundary, so a prompt-injected agent cannot leak a secret it never held. Before the model ever runs, cheap deterministic checks (EXIF freshness + NYC GPS, then perceptual dHash for same-scene and duplicate detection) reject fraud for $0.
- Curator normalizes NYC Open Data; Dispatcher ranks gig applicants with an empty egress allowlist (no network, no identity signals); Scrap does voice via ElevenLabs Agents with client-side tools — the voice layer executes with exactly a browser user's powers, claim-code auth included.
We built with Claude Code orchestrating specialized subagents in parallel (backend, frontend, Open Data, theming/i18n, voice), ~90 granular commits, 99 tests.
Challenges we ran into
- Our own anti-fraud AI rejected our test data — twice. We drew synthetic "litter" (colored blobs) and the Sentinel refused it: no_litter_in_before. Correct behavior! We ended up compositing real Creative Commons photos of NYC litter to earn an honest approval. The fraud layer beat its own authors.
- Docs vs reality, everywhere. Runta's marketing snippets described an API that doesn't exist (we
npm pack'd the SDK and read the typings for ground truth); ElevenLabs' documented tool schema 422s (the API wants plain JSON Schema); NYC's 311 data renamed its complaint types mid-history and hides unresolved DSNY complaints underIn Progress, and the Scorecard's value column is literally still namedacceptable_streets_feb_2014. - Silent infrastructure: Runta egress-policy changes take ~10s to propagate while the API claims success; the tenant's model credential 429s Sonnet but serves Haiku with an indistinguishable error; Vercel's read-only filesystem forced a
/tmpSQLite with cold-start self-seeding from bundled snapshots. - Bengali and Haitian Creole — both NYC Local Law 30 languages — aren't supported by the voice platform yet; our text UI keeps all seven, voice covers five. We filed it as the honest gap it is.
Accomplishments that we're proud of
- A 17-second, keyless, caged AI verification running live from a Vercel serverless function — the agent physically cannot exfiltrate credentials.
- Real data end to end: live 311 bounties filed this week, real Scorecard multipliers, and a real +200 XP submission that cleared an actual Bronx "Dirty Condition" complaint on camera.
- An honest DX journal in-repo documenting every integration papercut (Runta, ElevenLabs, Socrata) — including where Runta can't reach yet (voice pipelines) and the webhook architecture where it could safeguard the community.
- Accessibility and inclusion as features, not afterthoughts: 7 languages, WCAG-AA-checked light/dark tokens, keyboard operability, and a marketplace where reputation is earned by verified work — never identity.
What we learned
- Verification is the product. Gamified civic apps die by cheating; ordering defenses cheap-to-expensive (EXIF → perceptual hash → caged vision) makes fraud free to reject and trust cheap to earn (~1,000 vision tokens ≈ fractions of a cent per cleanup).
- Cage the agent, not the prompt. Prompt-level guardrails are wishes; network-level egress allowlists and JIT credentials are physics.
- The API's own responses are the best documentation — three different platforms taught us this the same day.
- Status, not information, changes behavior — XP, streaks, monsters, and paid gigs reframe an unglamorous act as a flex.
What's next for Garbology NYC
- 311 write-back: a verified cleanup auto-closes the matching complaint with photo evidence (city API partnership).
- Escrowed cash gigs (Stripe Connect) and business verification against city license datasets.
- Snow-event auto-posting: NWS alerts trigger §16-123 gig suggestions to every registered storefront.
- Runta-caged webhook executor for voice — so even the talking agent's hands live in a cage.
- Community translation review of our 7 machine-translated catalogs, and voice support for Bengali and Haitian Creole the moment the platform ships it.
Built With
- claude
- elevenlabs
- javascript
- runta
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.