Inspiration
Houston has free food pantries, shelters, clinics, libraries and cooling centers, but finding the one that is open right now, near you, in your language, usually takes a smartphone, a data plan and a lot of reading. The people who need these places most often have none of those. We wanted something you could walk up to on a street corner and just talk to.
What it does
HelpLine Houston is a talking help station for free city resources.
- Turn the knob to pick a language: English, Spanish, Vietnamese, Chinese or Arabic. The screen on the station shows it.
- Press the button, hear a beep, and ask out loud, like "I need food" or "where can I take a shower?"
- The station speaks back the nearest free place that is open right now, and its screen scrolls the name and address.
- Turn the knob to hear other options. Ask follow-ups ("is it open tomorrow?", "how do I get there?") and it answers, including the next bus there.
- If a place has rules (an age limit, an ID requirement), it asks a quick yes/no question first so nobody walks across town to be turned away.
Every question also shows up as a pin on a live city dashboard, colored by need, with red pins where someone asked and nothing was open. That turns each conversation into data the city can act on.
How we built it
- Hardware: an Arduino UNO R4 WiFi with a Grove shield, a 16x2 LCD, a button, a knob and a buzzer, in a box. A hidden laptop is the brain and owns the mic and speaker. The Arduino talks to Chrome over USB with the Web Serial API using a tiny line protocol (
BTN,HOLD,KNOB:<n>out,LCD1:,SCROLL2:,BEEP:in). - Voice: ElevenLabs for speech-to-text and natural voices, with Chrome's built-in speech as the fallback.
- Understanding: Gemini reads the question and writes the reply in the person's language. The AI never picks the place. Plain Python does: filter by need, keep only places open now in Houston time, sort by distance, return the top 3. Gemini is told to use only facts from those rows.
- Data: 96 Houston places gathered from official pages. Each row keeps a quote and link from its source page, and a script re-checks every quote against the page so hours and rules can't drift from what the provider says.
- Getting there: bus directions from the Google Maps Routes API, with METRO's published GTFS schedule as a backup.
- Backend and storage: one FastAPI app, with Tiger Data (TimescaleDB on Postgres) for the places and the request log, and a JSON file fallback so it runs with no keys at all.
- Dashboard: a Leaflet map on OpenStreetMap tiles that polls the request log.
- How the code got written: an AI orchestrator split the plan into separate files under one shared contract, coder agents wrote each piece, and reviewer agents checked it against the contract and the tests before it merged. The repo has hundreds of automated tests.
Challenges we ran into
- Almost nothing is open on Sunday. When we ran our matcher at judging time, most needs had no open place nearby. Instead of hiding it, the station says so and names the next place to open, and the dashboard shows the gap.
- The LCD fought us. The usual LCD library wouldn't work with our wiring on the UNO R4 (no pull-up resistors on hand), so we wrote the I2C by hand.
- Five languages are harder than one. A Vietnamese word for "eat" (ăn) was matching inside the word for "towel" (khăn), and Spanish phrases like "en la noche" were being read as places. Each fix got its own test.
- Speed. A spoken answer plus a bus lookup has to come back fast enough to feel like a conversation, so bus searches are capped and fall back cleanly.
- Trustworthy data. Hours on official pages are inconsistent, so we stored the exact quote behind every hour and rule and built a checker for it.
Accomplishments that we're proud of
- A real, physical station that listens and talks in five languages, built in 24 hours.
- A design where the AI can't invent a place: every answer traces back to a quoted source.
- A dashboard that shows not just what people asked for, but where the city has no answer.
What we learned
- Keep the AI out of the decisions that must be right. Let it understand and speak, and let code choose.
- "Open right now" is the question that matters, and it's the one most directories can't answer.
- Showing gaps honestly is more useful to a city than pretending everything is covered.
What's next for HelpLine Houston
- Have the team verify every place and add more neighborhoods beyond UH and Third Ward.
- A crisis path that always routes to 988, 911 and the domestic violence hotline, handled by code, not AI.
- Place stations at libraries, bus stops and community centers, and hand the dashboard to the city and the nonprofits that run these services.
Built With
- arduino
- c++
- claude
- css
- elevenlabs
- fastapi
- gemini
- google-maps
- grove
- gtfs
- html5
- javascript
- leaflet.js
- nominatim
- openstreetmap
- postgresql
- pytest
- python
- tiger-data
- timescaledb
- web-serial-api
- web-speech-api
Log in or sign up for Devpost to join the conversation.