Inspiration

Finding free food, shelter, or a clinic in San Diego means digging through five different websites, in English, on a small phone. For people who can't easily read English, are elderly, or are visually impaired, that search itself is the barrier — the help exists, but the way to find it doesn't work for the people who need it most. I built VoiceBridge SD so the search disappears: you speak, and you hear where to go.

What it does

You speak, "I need free food near La Jolla today," and VoiceBridge answers out loud in plain language, with the name, address, hours, and phone number of real nearby help. It works in English and Spanish, spoken or typed, with a big-button interface, an EN/ES mic toggle, area shortcuts, and cards for every result. The whole point is that no reading, no typing, and no English are required to get help.

How we built it

Next.js and TypeScript, one page, no login. Bright Data scrapes listings from 211 San Diego, Feeding San Diego, and the San Diego Food Bank into Neon Postgres, Gemini parses the request (food, shelter, or clinic, plus area and language) and summarizes the results into simple spoken language under 80 words, and ElevenLabs (eleven_multilingual_v2) speaks the answer. Because live services can fail at the worst moment, every Gemini call has a timeout with a keyword/template fallback, and 12 real listings are seeded in Neon so the demo never shows empty. The project was built solo: Muse built the core app (the scraper, the Neon database, the voice pipeline, and the Spanish fixes) and Cursor Pro handled the UI polish, the mic fix, and the interactive VoiceTide art. A Grok Bot automation watches the repo and triaged our first real issue and posted a fix plan.

Challenges we ran into

  • Gemini wouldn't answer. Across the whole weekend the API returned 503 "high demand", timeouts, and quota errors, and the model we switched to (gemini-2.5-flash) turned out to be unavailable to new users. So the demo is built to never depend on a single call: timeouts, fallbacks, and seeded data keep it speaking no matter what.
  • Bright Data returned 400 on every source. The scraper zone didn't exist on the account yet — a fix Grok Bot independently confirmed while triaging the issue. Creating the zone fixed the 400; extraction still waits on Gemini.
  • Spanish kept coming back English. Three separate bugs: the fallback hardcoded English, the mic was locked to English speech recognition, and phone numbers are digits, which text-to-speech reads in English. Fixed all three (Spanish keyword detection, an EN/ES mic toggle, and phone numbers spelled out in Spanish words) plus translated hours and address phrases, so the spoken answer stays in Spanish.
  • Solo and 26 hours. One person, five tracks, one demo that had to work live. We cut everything that wasn't the voice demo and spent the time on the 30 seconds a judge actually hears.

Accomplishments that we're proud of

A voice demo that works end to end in about 11 seconds, in English and Spanish, even when an API is down. The Spanish answer is genuinely usable: spoken questions, Spanish replies, phone numbers read out digit by digit in Spanish.

What we learned

Live data, a real database, and a voice interface beat a pretty frontend. Judges score the idea and the demo, not code quality, so we spent our time on the thing a judge can hear. And accessibility isn't a checkbox: designing for people who can't read the screen changed every decision, from the big buttons to the spoken phone numbers.

What's next for VoiceBridge

Get the live scrape flowing once Gemini answers so that the listings you hear are always fresh from today's web, not a seeded snapshot, add more sources beyond the three food sites, and add more languages so the same voice-first flow works for any community that needs help finding help.

Built With

Share this project:

Updates

Submission history