Inspiration
A food bank planner and a small business lender serve the same Central Florida neighborhoods, and neither can see the other's list. The public data exists. Neither of them is a data analyst. We built the tool that lets them ask a question in plain words and leave with a place to act and a partner to call.
What it does
One map of 490 Central Florida census tracts for both partners. Red marks the triple gap: a food desert with few SBA loans and many households with no car. Twelve tracts, 67,564 people.
Ask a question in plain words. Gemini answers through real queries against our warehouse, with a source and a date on every table. Each tract card says what could help, why it is on the map, how sure we are, and what we do not know. One click turns the list into a task for the food bank, a task for the lender, and a paragraph for the meeting.
How we built it
Two humans, each with a Claude Code agent. One of us wrote the requirements, contracts and tests first. The other made them pass. Every change went through a pull request.
React, Vite and MapLibre on Cloud Run. A Python build turns Census ACS, USDA, SBA, Second Harvest, FEMA and CBPP files into static map data, with 73 sources in a citation register. The same files feed a DuckDB warehouse. A query service sends each question to Gemini on Vertex AI with our glossary and four tools: schema, read-only SQL, sites near a tract, and correlation. The tools compute. The model narrates and cites.
Challenges we ran into
- The CDC transportation data is blank for all of Florida. We used the ACS no-vehicle share and labelled it as a stand-in.
- Public data is not fetchable data. Sites return 403, the Census API needs a key, and the Second Harvest list had to be captured by hand.
- Tract margins of error are wide. We show them instead of hiding them.
- Keeping the model honest took most of the AI effort. Tools, a glossary and a citation register, or no answer.
- We started with three ideas and cut to one screen by day two.
Accomplishments that we're proud of
- A working prototype both partners can use, 237 commits in two days.
- Zero numbers on screen without a source and a date, in the app and in the AI answer.
- Confidence, margins of error and missing data in plain language on every card.
- When the model is down, the rules answer and the screen says so. The map never goes dark.
What we learned
- Trust is a feature. The why and the how sure matter more than more data.
- Tools compute, models narrate. Keep arithmetic in SQL and the answers stay checkable.
- Tests before code is faster with two people, not slower. We built against the same contract without waiting on each other.
What's next for SNAP GAP
- Live Gemini answers for every suggested question.
- Fix the clamped "if both partners act" estimate.
- Bring back the SNAP-cliff forecast once a county-level SNAP series exists.
- Put it in front of a Second Harvest planner and an SBDC officer, and change what they tell us to change.
Built With
- claude
- codex
- duckdb
- react
- typescript
