back to writing
May 18, 2026·9 min read·builds agents voice

Weekend Agent — AI calls.

An outbound voice agent that actually calls your leads, qualifies them, books meetings, and writes everything back to your CRM — built in a weekend with Vapi, ElevenLabs, and a small amount of glue code.

The inbound chatbot era is ending.

Everyone built one. Every B2B site has the little square in the bottom right that pretends to be helpful. Most of them are a glorified FAQ over a slow LLM. They wait. They get answers in 30 seconds. They don't actually do anything.

The next loop is louder, and it doesn't wait: the AI that picks up the phone, calls your leads, and books the meeting before they've finished their coffee.

That's what Weekend Agent is. A SaaS-shaped outbound voice agent that calls the leads in your pipeline, speaks naturally, qualifies them against your rubric, books straight onto your calendar, and pushes the call summary + disposition into your CRM. All without a human on the line.

I built v1 in a weekend. Not because the agent is small — it's not — but because the stack underneath outbound voice has finally caught up with the use case. Five years ago this was a six-month project for a 10-person team. Today it's a Saturday and a Sunday for one person who knows where the seams are.

This is a write-up of those seams.

Why anyone should care

If you sell anything where the first conversation matters — services, software, real estate, education, healthcare — you already know the math: the lead that gets called in the first five minutes converts ~9× higher than the one called at the one-hour mark. And after 24 hours, you might as well not bother.

Lead response time vs. conversion (relative)
  • < 5 minutes
    0×
  • 30 minutes
    0×
  • 1 hour
    0×
  • 24 hours
    0×
// Industry-standard curve. The unit is 'conversion vs. a 1-hour reply.' Most teams sit at 30 minutes.

The reason no one calls in five minutes is that humans don't scale to the inbox. SDRs sleep. Time zones rotate. Even a well-staffed team has a 30-minute median response time on a good day. Your forms fire 24/7, your humans don't.

What an outbound voice agent gives you is:

The thing that's changed in the last twelve months is the last 200ms of latency. Voice agents used to feel like a hostage tape — long pauses, robotic "uhhh"s while the model thought. The conversation cadence is now close enough to human that prospects routinely don't realize they're talking to a machine until the agent volunteers it. (Which, ethically, it should — and Weekend Agent does, in the second sentence.)

agent.live · speaking
latency · 820ms
agent

Hi — is this Sarah? I'm calling on behalf of Acme. Quick one — you filled the demo form earlier this morning?

// Simulated capture · the agent self-discloses in sentence two · 47-second qualified booking

What it actually does, end-to-end

Concretely, here's the full loop a single inbound lead triggers:

  1. Lead fills a form on your site → webhook fires
  2. Agent decides whether to call (timezone check, lead score threshold, dedupe against last-30-days)
  3. Agent dials the lead's phone over PSTN
  4. Live conversation: introduction → consent → qualification (4–6 questions, branched) → calendar slot offer → booking
  5. On hangup: transcript → summary → disposition → CRM update → calendar invite sent → Slack ping to your AE
  6. Recording + transcript + summary land in a dashboard you can search
step 1 of 6
+00s
  1. +00s
    form firedlead webhook · enrichment · timezone check
  2. +02s
    dial decisionscore ≥ threshold · dedupe pass · ok to call
  3. +04s
    agent dialingpstn out · ringing · ElevenLabs voice loaded
  4. +18s
    qualifying4-question branched script · function-calls live
  5. +90s
    bookingcalendar.create · invite sent · slack ping
  6. +108s
    dispositionsummary · transcript · crm writeback complete
// One inbound lead · live trace · form-submit to meeting-booked in under two minutes

Total wall-clock from "form submit" to "meeting booked" on the happy path: about two minutes. The longest pole is the human picking up.

The stack

The whole thing is four moving parts, all rentable, all replaceable:

1. Vapi — the voice orchestration layer

Vapi is the load-bearing piece. It handles:

The reason Vapi is the right choice for a weekend build is that you write the prompt and the function schema, and they handle the millisecond-level latency game. You can build it yourself with LiveKit + Twilio + your own LLM pipe, but you'll spend three weeks tuning end-pointing alone.

2. ElevenLabs — the voice itself

The voice is what the prospect actually hears. If it sounds even slightly off, they hang up.

ElevenLabs gives you two things that mattered for this build:

3. Claude (Sonnet 4.6) — the brain

The actual LLM call inside each turn is Claude Sonnet 4.6. Three reasons:

Opus 4.7 is the better model for everything except this. For voice, you want fast and consistent over smart. The model decides between maybe four function calls and a handful of branching paths — that's not what you need Opus for.

4. n8n — the glue

n8n holds the workflows together. Inbound webhook → enrichment → dial decision → call → post-call summary → CRM write → Slack notification. The whole loop is one n8n workflow you can open and read in one screen.

I used to write this in TypeScript. n8n is what I reach for first now for anything that's "API A talks to API B and then writes to API C". The build time savings are unreasonable.

What "built in a weekend" actually means

Day 1 (Saturday, ~6 hours):

Day 2 (Sunday, ~6 hours):

What did NOT get built in the weekend:

The compliance and the eval suite were each bigger than the original build. The "I built it in a weekend" demo and "I have something I'd let a customer use" reality are separated by about three weeks of unglamorous work.

What I'd do differently if I started again

Three things:

  1. Build the eval harness on day 1. Voice eval is harder than text eval — you're scoring not just "did the agent give the right answer" but "did the conversation feel human", "did it interrupt at the right moments", "did it concede on price-related questions without being asked". I'd start that scoring rubric before the agent ever speaks.

  2. Pick the disclosure language first, not last. "Hi, this is an AI assistant calling on behalf of [company]" sounds straightforward. It is not. The exact phrasing changes conversion by ~15 percentage points in my A/B tests. Write 20 versions, A/B them with friends, pick one before you write the qualification script.

  3. Don't ship outbound until inbound is wired. The agent is going to mishandle calls, especially in week one. You need a path for "press 1 to talk to a human" that actually routes to a human, not a voicemail box. The trust collapse from one bad call is permanent for that prospect.

What's next

The v1 calls one prospect at a time, one workflow at a time. The v2 question I'm sitting on is whether the right unit is the agent or the swarm.

A swarm version would dial 20 prospects in parallel from 20 cloned voices, each with a slightly different opener, all reporting back into a single live dashboard you can watch like a trading floor. That's a different shape of company — more orchestration, less per-call sophistication.

I don't know yet whether that's the right move or whether it's just visually exciting. The next month is figuring that out.

Try it

The full source — agent config, n8n workflows, dashboard, eval scaffolding — is on GitHub:

github.com/arorachakit/chakit-ai-projects/tree/main/apps/custom-voice-agents

The live dashboard:

chakit-ai-projects-custom-voice-agents.vercel.app

If you're shipping something in this shape — or want to talk about the tradeoffs between swarm-of-agents and one-agent-many-calls — hi@chakit.ai. I'm collecting case studies.

Bi-weekly essays

Owned, undistributed, and published only here — no newsletter, no funnel, no upsell.

All essays
‹ all essays

Let's build
something joyful.

Agents · Engineering · Talks · Podcasts · Interviews · Automations.