Vol. I · No. 579Rochester, New York, Thursday, September 24, 2026Voice AI · Page B2
All workSection B · Page B2

Voice AIDispatchNew

AI Agent Now Phones the Caterer for You

Dispatch finds local vendors for your event, calls and emails them, and brings back real quotes.

The Dispatch landing page at rundispatch.app
Dispatch, live at rundispatch.app.Screenshot: rundispatch.app

Planning an event means a lot of phone calls. Venues, caterers, florists, DJs, photographers. Every one of them wants to talk, plenty of them don't pick up, and every quote comes back in a different format. Dispatch does that part for you. You pick the event type and the services you need, describe the event, and it goes and gets the quotes.

Under the hood it finds local businesses with the Google Places API, then contacts each one the way that category actually works. Some vendors live on the phone, so a Retell AI voice agent calls them. Others run on email, so Resend sends a proper message from its own reply address. Call transcripts and email replies go through an LLM on OpenRouter, which turns them into structured quotes on your dashboard.

The phone is where this product wins or loses.

The phone agent was the hardest part to get right. Real business phone lines are messy. The agent listens first and works out who picked up: a person, voicemail, a call screener, an IVR menu, a dead line or a fax tone. It presses IVR digits with DTMF, and if it hears voicemail cues halfway through a sentence it pivots to leaving a message. Every finished call lands in exactly one of six outcome buckets, so nothing ends up stuck in a vague maybe.

Around the calls sits a multi-attempt outreach state machine backed by Supabase. It has three lanes (async, voicemail and no answer), a hard cap of 3 calls and 2 emails per vendor, and waits of 2, 4, 24 or 48 hours depending on the lane. Each retry lands in a different part of the day. All of the lane logic is one pure nextTransition() function, which made it easy to test and reason about.

Timing matters too. Calls only go out inside each vendor's real Google opening hours, with a buffer after opening and before closing, and the scheduler is timezone-aware. A pg_cron job inside Postgres wakes the worker, so there's no separate server to babysit.

Email has its own trick. Each outreach gets a unique reply address with a token in it, so when a vendor answers, the Resend webhook knows exactly which run the reply belongs to. The LLM parses the reply into a quote and moves the run to done or dead.

It's a real product, so it has real billing. Every account gets 5 free calls. After that there's a one-time $14.99 unlock per event or a $19.99 monthly plan through Stripe. Calls and emails are pre-charged through race-safe database functions and refunded if they fail. Sign-in is Google or a magic link, and row-level security keeps every event visible only to its owner. The dashboard has live status, a compare-quotes view and guest invites with RSVP links.

I also did a security pass: signature checks on the Retell and Resend webhooks, an SSRF guard on website scraping, database-backed rate limiting, escaped HTML in emails and proper security headers. Dispatch started as a two-day proof of concept in June on Vapi and Trigger.dev. The rebuild is about 12.8k lines of TypeScript.

Right now I'm running experiments on the voice agent itself: latency, turn-taking and how it opens a call. The phone is where this product wins or loses.

Graphic

How it works

Dispatch, start to finish, in 6 steps.

  1. Step 1:

    Intake

    Pick the event, the services and describe it

  2. Step 2:

    Discover

    Google Places finds local vendors

  3. Step 3:

    Reach out

    Retell voice calls or Resend emails, by category

  4. Step 4:

    Retry

    State machine schedules follow-ups inside opening hours

  5. Step 5:

    Parse

    LLM turns transcripts and replies into quotes

  6. Step 6:

    Compare

    Dashboard shows live status and quotes side by side

Graphic: The Sahil Bachu

More from The Work

See all 25

Agentic AI

Twelve Apps, One Database and a Bot That Wants Proof I'm Awake

LifeOS is my personal dashboard of small apps on one Supabase database, with an always-on AI agent that talks to me on Telegram.

A personal operating system: small apps for habits, workouts, diet, budget and more, all on one Supabase database. A daemon on an old laptop runs an AI accountability agent over Telegram, and it can build new apps when I describe them.

Continued on Page B4

Creator Tools

A Telegram Chat That Runs My Instagram

autoreel turns one talking-head clip into a finished, edited Instagram Reel and posts it.

The daily Reels pipeline behind @21stcentury.sahil. It finds topics, drafts scripts in my voice, edits my clip into a reel with Remotion, posts it and sends tool links to commenters. I run all of it from one Telegram chat.

Continued on Page B5

Browser Agents

The Job Hunt Agent That Refuses to Hit Submit

JobOps finds jobs, tailors a resume for each one and pre-fills the application, then stops and waits for me.

A job-search command center that runs on my laptop. It pulls postings from five sources, scores them with headless Claude, tailors a LaTeX resume per job and pre-fills applications in Chrome. It never submits. I review and send every one.

Continued on Page B9