Shashank
← All work

VectorLead

Inbound Meta leads called within a minute by a voice agent that qualifies in conversation, scores the outcome and routes it onward. Built so the calling provider can be swapped without the pipeline noticing.

The problem

Status
Live
Channel
Outbound PSTN over SIP
Providers
Retell AI, LiveKit, Vapi
Role
Sole engineer, full stack

Paid social produces leads faster than a sales team can triage them, so the good ones sit in a queue behind the noise and go cold. Speed to first contact is the single strongest predictor of whether a lead converts, and it is the thing manual triage is worst at.

VectorLead closes that gap by calling every lead automatically, holding a real qualifying conversation, and handing the sales team a scored lead with the reasoning attached rather than a number from a black box.

Architecture

INGEST PIPELINE CONVERSATION COMPLETION SCORE DELIVER Meta webhook OAuth connected Pipeline dedupe · store Retell AI Twilio SIP trunk LiveKit · Vapi agent worker Workflow engine Make.com · n8n Transcript idempotent Scoring with reasoning HubSpot sync Notification one interface · chosen by configuration · degrades to mock
Idempotent completion · Correlation by call id · Graceful degradation when a provider is absent

The three conversation providers implement one interface. Choosing between them is configuration, and an unconfigured provider degrades rather than breaking the pipeline.

Decisions worth defending

The provider is an implementation detail

Telephony pricing and quality move quarterly. Putting the calling provider behind an interface means switching is a benchmark and a config change rather than a rewrite, and the pipeline, scoring and storage never learn which one is in use.

Completion has to be idempotent

Two things can report that a call finished: the platform's own room-finished event and the agent's callback. They can both arrive, and out of order. Correlating on a call identifier and making completion a no-op the second time is what stops one conversation becoming two records and two follow-ups.

Scores carry their reasoning

A score with no explanation gets ignored by the sales team within a week, and the investment is wasted. Every result includes the two or three reasons behind it in plain language, so the rep opens the call already knowing the angle.

Prompt changes ship as pinned versions, not edits

A live voice agent is the worst place to test a prompt. Every call pins an explicit agent version, and traffic splits deterministically between a control and a candidate, so a change can be measured on real calls and rolled back by configuration. Comparison fails loudly if any single scenario regressed, even when the averages improved.

Missing configuration degrades, never breaks

With no provider credentials the system falls back through a defined chain and finally to a mock path. Development and testing work without a telephony account, which is the difference between a system people can contribute to and one only its author can run.

Stack

Application

  • Next.js, API routes
  • Supabase, with in-memory fallback
  • Meta OAuth
  • Analytics endpoints

Voice

  • Retell AI over a Twilio elastic SIP trunk
  • Agent version pinning per call
  • LiveKit and Vapi as alternate providers
  • Raw-body HMAC webhook verification

Intelligence

  • Transcript scoring
  • Explanations in plain language
  • Rules plus model hybrid

Delivery

  • HubSpot contact and deal sync
  • Make.com outcome routing
  • Notification routing
  • Dashboard and live feed
← Nova ADK Hybrid retrieval engine →