Inspiration

Picture a parent in Des Moines who finishes a shift at 6pm. They don't have a car, and their prepaid phone is out of data for the month. The nearest pantry closed at 4. The listing they found online is a year out of date. The food exists in their city. They just can't reach it tonight.

The Hack Away Hunger brief says it plainly: food insecurity is about more than empty shelves. It's about barriers like transportation, work schedules, ID requirements, language, and stale information.

We noticed that each group holds only one piece of the picture:

  • Neighbors know what they need and when, but not who's open and stocked.
  • Pantries know their shelves, but have no quick way to broadcast that.
  • Donors have surplus, but don't know who needs that category today.
  • Coalitions fund and plan hours without seeing the requests that went unanswered.

PantryPulse connects all four.

What it does

For neighbors (Find Food and Text Help)

  • Search by ZIP or location for pantries that are open now or later today and actually stock what you need. A hot-meal site won't come up as a source of baby formula.
  • Filter by no ID required, walk-in, near a bus, delivery, or Spanish spoken.
  • Plain SMS. Text "no car, need formula tonight, 50316" in your own words, in English or Spanish, and get open options back. No data plan, app, or account needed. Text HELP to reach Iowa 211.
  • Every page works in English and Spanish, is phone-first, and is screen-reader friendly.

For pantries (Portal)

  • Sign in with a 6-digit code and update status with one tap: Open, At capacity, Closed today, or Follow schedule.
  • Set stock levels per category and post urgent needs. Updates change search results and SMS replies instantly.

For donors and drivers (Rescue Board)

  • Post surplus in about 20 seconds. PantryPulse scores every pantry on category need, distance, whether it can receive in time, and capacity. It routes the food to the best match and explains why.
  • Volunteers claim runs and mark them delivered. Impact counters show pounds rescued, meals, and CO₂e avoided.

For coalitions (Network Data)

  • Demand sensing. Every request is logged anonymously as ZIP, need, and time, with no phone number and no message text. A heatmap shows when people ask against when pantries are open, and the dashboard ranks the biggest coverage gaps.
  • It also shows which categories are requested most compared with which pantries are low, and which ZIPs have the highest share of requests with nothing open.
  • An AI-written weekly brief gives three concrete bullets and a recommended action. One click exports the data as CSV for grant reports.

In our demo dataset, weekday daytime hours are almost fully covered. Weekday evenings and weekends are not, and those are exactly when working families ask. That's the kind of insight a coalition can act on: shift one distribution to Thursday evening, or send a mobile pantry to the ZIP with the most unanswered requests.

How we built it

  • Next.js 16 with the App Router, TypeScript, and Tailwind CSS v4.
  • SQLite through libSQL and Drizzle ORM. It runs on a laptop file or on hosted Turso with no code changes.
  • A provider-agnostic AI layer that works with Groq (Llama 3.3 70B), any OpenAI-compatible API, or Anthropic. AI handles three jobs: understanding messages, explaining matches, and writing the network brief. Every AI feature has a deterministic fallback, including an English/Spanish rule parser and templated briefs, so the service works with no key or during a provider outage. We only accept a ZIP the person actually typed, never a model's guess.
  • Central-time hours engine. It handles split shifts, 24/7 sites, live status overrides, and a 7×24 coverage matrix.
  • Explainable matching. A transparent points model, with the top three candidates and reasons shown to the donor.
  • A Twilio-compatible SMS webhook that returns TwiML, plus an in-browser phone simulator that uses the same code path.
  • Leaflet and OpenStreetMap maps, which need no API key.
  • Docker image that seeds demo data on first boot. Also deployable to Vercel with Turso.

Challenges we ran into

  • "Open now" isn't enough. Our first ranking happily sent a parent looking for baby formula to a 24/7 shelf-stable box. We rebuilt ranking so a pantry that has the item later beats one that doesn't have it now. If nothing open today has it, the search widens to the next opening that does.
  • Honest coverage metrics. A single 24/7 take-what-you-need box made every hour look covered. We now count only full-service pantries, and call an hour covered only when at least two are open.
  • Trusting AI safely. LLMs will confidently invent a ZIP code. We validate every field and only accept a ZIP that appears in the message.
  • Privacy versus useful data. We wanted coalition-grade analytics without tracking vulnerable people. The request log stores no identifiers at all.

Accomplishments that we're proud of

  • One shared engine powers web search, SMS, and the browser simulator, so behavior is consistent everywhere.
  • The whole app works with zero external services, and gets smarter with any free AI key.
  • Surplus routing is explainable. Donors see the top three pantries and exactly why each one scored the way it did.
  • Fully bilingual, phone-first, keyboard accessible, with table views behind every chart.
  • It deploys with one Docker command and seeds itself with demo data on first boot.

What we learned

  • A correct answer depends on the person's need, not just the clock. Sorting by "open now" alone produced answers that looked right and were useless.
  • A single metric can hide the real problem. One always-open food box made coverage look perfect until we asked what kind of help was actually available.
  • Design for the most limited phone first. Fitting a useful answer into a few short text messages forced us to decide what information truly matters.
  • AI works best as a helper with guardrails. Every model output is validated, and every feature still works when the AI is unavailable.
  • Privacy and useful data can coexist. ZIP, need, and time are enough to find coverage gaps without identifying anyone.
  • Small operational data, like a one-tap status update, is worth more than big features if it's easy enough that volunteers actually do it.

What's next for PantryPulse

  1. Pilot with real data. We want to work with a Des Moines pantry network, such as DMARC or Food Bank of Iowa, to load verified hours and give pantry volunteers portal codes.
  2. Real SMS line. Get a Twilio number and coordinate with Iowa 211 for warm handoffs.
  3. Statewide expansion. Add rural counties, where transportation barriers are worst, plus SNAP and WIC retailer data.
  4. Stronger auth and roles for coalition staff, and a public open-data API for researchers and policy advocates.
  5. More languages, starting with Swahili, Arabic, and Burmese for Des Moines' refugee communities.

A note on the data

The demo runs on illustrative pantry listings modeled on public Des Moines-area sources, and on a synthetic 30-day request history. Hours and stock are approximate. Verified data from a partner pantry network is the first step of our pilot.

Try it

  • Code: https://github.com/Sravya1802/pantrypulse
  • Run locally: npm install, then npm run db:seed, then npm run dev.
  • Pantry portal demo code: 107919
  • SMS demo: open the Text help page and tap an example message.

Built With

Share this project:

Updates