Inspiration
Everyone has had that moment where you need something right now and the answer is locked behind a phone call. Is the pharmacy still open? Do they actually have it in stock? You call one place, get hold music, get transferred, get hung up on, and then you start over with the next one.
Now imagine you're doing that while your kid is sick, or you're an older person who finds phones stressful, or you're trying to find free groceries before the end of the month and don't have the minutes or the time to spare. The information exists. It's just trapped behind calls nobody has time to make. We kept asking ourselves: what if you could make ten calls at once? It started with my own family. My dad needed medicine urgently, and I watched him spend an hour calling place after place, repeating the same question to a different stranger every time. By the end I kept thinking: a computer could do this ten times faster, and ten calls at once.
What it does
Swarm Dial lets you type what you need in plain English, like "find a pharmacy within 5 miles that has children's amoxicillin in stock right now." You tap Use my location, we find nearby businesses, and a swarm of AI callers phones them all at the same time.
Every call starts honestly: "Hi, I'm an AI assistant calling on behalf of a person nearby." The caller asks your question, listens, and reports back. You watch it happen on a live dashboard. You can see who's ringing, who's talking, what they said, and the full transcript of every call. At the end it ranks the answers and shows you the best one. There's a practice mode with made-up businesses so you can try it without ringing anyone, and a real mode that places actual calls. It only calls places that are open right now.
How we built it
The frontend is Next.js 14 with React, TypeScript and Tailwind. The backend is FastAPI in Python. Twilio places the phone calls, Deepgram turns the speech into text, and an LLM (Groq/OpenAI) understands your request and runs each conversation. Google Places finds the businesses, Postgres on Neon (through SQLAlchemy) stores searches, and Auth0 handles sign-in. We use ngrok so Twilio can reach our backend while we develop.
Challenges we ran into
Real phone calls are messy. People say "hold on," hang up, or put you on a menu, and the AI has to stay polite through all of it.
Our biggest "is this broken?" moment happened at midnight. We kept getting "Nothing nearby is open right now," and for a while we thought we had a bug. It was actually a safety check we built on purpose: it won't call closed businesses. We just forgot it was midnight.
We also had a bug where typing "near me" made the app search for a place literally named "me." That's why we added the Use my location button. And when we searched for 7-Eleven, the swarm found nothing, because we were searching for the generic word "store." So we taught it to recognize named chains and search for them by name.
Accomplishments that we're proud of
It makes real phone calls, to real businesses, using real data. The AI always says it's an AI, and the whole call is transcribed so you can read every word. The live dashboard makes ten simultaneous calls feel easy to follow.
What we learned
Real-world data is messy, and the boring safety rails (open hours, honesty on every call, practice mode) matter as much as the cool part. We also learned how many moving pieces a "simple" phone call really has: webhooks, tunnels, speech-to-text, timing, and a lot of edge cases.
What's next for Swarm Dial
Calls in more languages, so people who aren't comfortable in English can still get help. Scheduling a swarm for when businesses open in the morning. And pointing it at the places that matter most for the people we built it for: food banks, free clinics and shelters.
Built With
- auth0
- deepgram
- fastapi
- framer-motion
- google-places
- groq
- neon
- next.js
- ngrok
- openai
- postgresql
- python
- react
- sqlalchemy
- tailwindcss
- twilio
- typescript
- vitest