Inspiration

People in Vancouver notice problems on their block every day: litter, dumped items, graffiti, broken streetlights. Most of us don't know what to do next. Some of these problems neighbours can handle in an hour. Others only the City can fix.

At the same time, volunteering in Canada is shrinking. Statistics Canada found that total volunteer hours fell 18% between 2018 and 2023 (from 5.0 billion to 4.1 billion), hours spent improving the community fell 34%, and the top 10% of volunteers now give 61% of all hours. We wanted to make it easier for regular residents to help with something small and local.

What it does

GreenHands BC uses the City of Vancouver's 311 data to split local issues by who can actually fix them:

  • Volunteer (Track 1): neighbours can help. Recurring litter, small abandoned items and street debris become cleanup opportunities. Graffiti becomes a walk to survey and report it, never a paint-out. Spots that keep getting reported and have nothing planned show up under Needs help, and anyone can start an event from one. The feed also lists City programs and local organisations' events, which link out to their original sign-up pages.
  • Issues (Track 2): only the City can fix it. Potholes, streetlights and damaged sidewalks. Residents prioritise up to two open issues at a time (and can swap a vote any time), then send the top five to Council as an email draft from their own mail app. We don't send anything to the City or claim that votes change City decisions.
  • Profile. Your sign-ups, your votes, your volunteer hours, and a CSV download of those hours.
  • Community updates. Our Block Steward agent drafts weekly "ways to help this week" briefings for each neighbourhood and suggests events for hotspots that nobody has covered. A person always reviews a suggestion. The agent never publishes an event on its own.

The app is mobile-first and can be installed as a PWA.

How we built it

  • Data (Databricks): We ingested about 1.35 million 311 service requests (2022 to 2026) into a bronze/silver/gold pipeline. We used ai_classify to sort 256 request types by who can fix them, and grouped requests into H3 resolution-9 cells to find recurring hotspots. That produced 1,634 volunteer hotspots and 3,846 City issues. A daily job refreshes the pipeline, and a 15-minute job refreshes rankings and event impact and publishes the app-facing gold tables to Postgres.
  • API: Express 5 + TypeScript on Railway, backed by PostgreSQL. Auth0 handles resident sign-in, and access tokens are verified on the server.
  • Frontend: React 19, TypeScript and Vite, with MapLibre maps (OpenFreeMap tiles), deployed on Vercel.
  • Agent: Python with Claude. It reads Postgres read-only and uses a scoped Auth0 machine-to-machine token to submit suggestions for review.

Challenges we ran into

  • Deciding what volunteers should and shouldn't do. Some problems look like cleanups but aren't safe or allowed, like painting over graffiti or moving large dumped items. We changed those into "walk and report" or "report to the City" instead.
  • Designing voting that is honest. We didn't want to pretend votes force the City to act, so we limited each person to two active votes and turned the result into an email residents send themselves.
  • Turning 256 messy 311 request types into a few clear categories people actually understand.
  • Keeping four parts (Databricks, API, frontend, agent) in sync while the team was merging changes quickly.

Accomplishments that we're proud of

  • A working end-to-end pipeline, from raw City data to hotspots that a resident can turn into an event in a few taps.
  • Keeping a human in the loop for every AI suggestion.
  • A clear split between "you can help" and "the City needs to fix this", so residents always know what action makes sense.

What we learned

  • Open civic data is useful, but it needs a lot of cleaning and classification before it means anything to residents.
  • Small, short, local events are easier to say yes to than long volunteer commitments.
  • Being clear about what the app can't do (like changing City decisions) builds more trust than overpromising.

What's next

  • Partner with local community groups and the City's existing volunteer programs to run real events from hotspots.
  • Show before/after impact for events using new 311 reports in the same area.
  • Expand beyond Vancouver to other BC cities with open 311 data.
Share this project:

Updates

Submission history