Founder tier · first 50

The voice-agent boilerplate I wish I'd had three clients ago.

Twilio for calls, Vapi for the assistant, Stripe metering per tenant, Firebase for isolation. Every failure mode from three prod deployments, already solved in the box. No browser-mic demo. Actively maintained by one person who answers builder emails.

How it fits together

                inbound consumer call
                          │
                          ▼
                 ┌─────────────────┐       ┌──────────────────┐
                 │  Twilio number   │ ◄──── │  /provision API   │
                 │   per tenant     │       │  (one call →      │
                 └────────┬────────┘       │   number+assistant│
                          │ SIP            │   +webhook bind)  │└──────────────────┘
                 ┌─────────────────┐
                 │  Vapi assistant  │       ┌──────────────────┐
                 │  (voice + LLM,   │ ────► │   Firebase auth   │
                 │   swappable)     │       │   tenant isolation│
                 └────────┬────────┘       └──────────────────┘on-call events + duration
                          │
                          ▼
                 ┌─────────────────┐       ┌──────────────────┐
                 │  tenant router   │ ────► │  Stripe metered   │
                 │  + SMS handoff   │       │  per-minute billing│
                 └─────────────────┘       └──────────────────┘

Built for three clients — here's what actually broke

Callforge is what I built after shipping three of these by hand. Every one of these cost a weekend.

Plumber pilot — the SMS nobody got
Vapi picked up cleanly. Assistant qualified the caller. SMS handoff to the trade landed in iOS "Unknown Senders" and was never read. Fix: vCard-driven contact-first UX + explicit "save the contact" step in onboarding. Two weeks of "the AI works but nobody's calling me back."
Electrician pilot — the silent provisioning failure
Twilio number purchase returned success in the SDK, but the number was never bound because of a subaccount limit I didn't know existed. First real customer got a dead-number recording. Fix: post-provision verification call + explicit subaccount-limit precheck in the boilerplate.
Carpenter pilot — the double-charge on webhook retry
Stripe webhook retried after a 5xx from our metering endpoint. Bill went out for double minutes. Client threatened refund. Fix: idempotency keys at the metering layer keyed on call_sid + segment_id, not the webhook event id.
These are in the boilerplate. Not as todos in a README. As tested code, an integration test suite, and a runbook for the two failure modes I haven't seen yet but you probably will.
📊 Curious how existing repos stack up? Read the teardown → 25 open-source voice-agent projects scored on production readiness

What's inside

Founder tier · first 50 buyers
$329$199
One-time. Ongoing updates during the founder period. Answered by me.
No spam. One launch email when it ships.
Who's building this? An indie dev who shipped three voice agents the hard way before packaging what was left. If you've wired Twilio → Vapi → per-tenant Stripe metering by hand, you already know why this exists. If you haven't, the "what broke" section above is a preview.