Case study
CallsPicked
An AI communication employee for local service businesses. It answers the phone in a natural voice, books the work, replies on WhatsApp and runs the socials, so the owner can stay on the job.
See it live
This is the real site, running right here. Scroll it, click around, or have Oma call you.
The problem
About half of the calls to a local business go unanswered, because the owner is mid-groom, in a consult, up a ladder or with a client. Every missed call is a booking that walks to a competitor, and most of those businesses have nobody to run their social either. CallsPicked puts a warm, capable voice on the line around the clock, and a social media employee on the feed, so nothing gets dropped.
What it does
Oma, the receptionist
Answers every call in a natural voice, books straight into the calendar, answers questions grounded on the business's own website, takes messages, handles SMS and WhatsApp, and hands over to a human when it matters.
Ola, the social employee
Drafts and schedules posts to Instagram, Facebook and TikTok, and drafts replies to comments and DMs for the owner to approve. One tap and the work is everywhere.
How it is built
Two apps share one typed data layer. A Next.js web app on Vercel runs the marketing site, the live demo and the dashboard. A Fastify voice service on Fly.io stays always on for phone calls and webhooks. Both read the same Postgres, and all messaging providers sit behind a single seam.
A voice call, end to end
From dialling the number to a booked appointment and a text confirmation.
A message, end to end
WhatsApp and Instagram, with replies only and a human always one step away.
Engineering highlights
Real-time voice, not a phone tree
A custom bridge streams audio between Twilio and the OpenAI Realtime API, with barge-in handling so callers can interrupt and talk over Oma naturally.
It actually does the work
Tool calling checks live calendar availability, books the appointment, takes a message when there is no slot, and transfers to a human with the full context.
Learns the business from its website
Paste a URL and Firecrawl crawls it, so Oma already knows the opening hours, services and prices before her first call.
Multi-tenant from day one
Every business is isolated by Postgres row-level security, and inbound calls are routed to the right tenant by the number they dialled.
Swap the AI models live
An admin page changes the realtime and reasoning models in seconds, read live by both the web and voice services with no redeploy.
One file owns each provider
All Instagram, Facebook, TikTok and WhatsApp knowledge lives behind a single seam, so the messaging provider can be swapped in one place.
Runs on clean sample data
A dual-mode data layer runs the whole product with zero secrets. That is exactly how every screenshot here was captured, with no real customer data.
Quality is gated, not hoped for
A voice eval suite of hardened call scenarios has to pass before any prompt or model change ships. Compliance for Meta and WhatsApp is enforced in code: replies only, 24 hour windows, always a way to reach a human.