Inspiration
Food insecurity is invisible until you're the one standing in front of a food bank that's already out of hampers for the day. Ontario has hundreds of food banks, but there's no easy way for someone in crisis to know which one nearby actually has capacity right now — or for planners to know where a new site would have the most impact. We wanted to build the tool that should already exist.
What it does
FoodRoute has two modes:
For households, an AI-driven intake conversation asks a few quick questions — household size, dietary needs, language, and urgency — then routes you to the best food bank factoring in real driving time, current demand, and language/dietary fit. If your situation is critical, we surface 211 Ontario (the province's community and social services line) immediately.
For planners, an interactive 3D map lets you drop a proposed new food bank anywhere in Toronto, Mississauga, or Waterloo Region, set its capacity, and run a Voronoi simulation showing exactly how client demand would redistribute across every existing site in the network.
The map itself shows 36 real food banks across the GTA and Waterloo Region — pulled from actual community directories — with live color-coded demand circles.
How we built it
- Next.js 16 (App Router) + TypeScript + Tailwind
- Claude (Sonnet 5) via the Anthropic API for both the conversational need-intake and urgency classification
- MongoDB Atlas for food bank and demand data
- Mapbox GL for the 3D map, geocoding, and live driving-time routing
- Turf.js for the Voronoi-based site-placement simulation
- A custom multi-factor scoring algorithm that weighs drive time, wait time, capacity, and household fit differently depending on urgency — someone with no food today gets routed by speed; someone planning ahead gets routed by best overall fit
We also built a 3D building editor (React Three Fiber) so planners can design and export food bank footprints directly onto the map.
Challenges we ran into
- Getting real food bank data with accurate locations across three regions without a paid geocoding API
- Tuning the AI intake conversation to stay fast (2-3 questions max) without feeling robotic or missing critical urgency signals
- Making the Voronoi simulation numerically stable — diversion had to be capped so no food bank could go negative or a new site could "steal" more clients than physically possible
What we learned
Multi-factor routing is a balancing act — optimizing purely for distance ignores capacity, and optimizing purely for capacity sends people on unreasonably long trips. Urgency-weighted scoring turned out to be the right lever.
What's next
Real-time capacity reporting directly from food banks (rather than modeled estimates), SMS-based intake for people without reliable data access, and expanding coverage beyond the GTA and Waterloo Region.
Built With
- anthropic
- claude
- mapbox
- mongodb
- nextjs
- react-three-fiber
- tailwindcss
- three.js
- turfjs
- typescript
- vercel

Log in or sign up for Devpost to join the conversation.