One brief. The entire system.
Ad to SMS to voice agent to booking.

A single fictional clinic, taken from one brief to a complete patient-acquisition system. It covers every layer a real engagement produces: the offer, the funnel, the landing page, the ad set, the follow-up, the AI voice agent, the dashboard, and the weekly report. The names and numbers are illustrative; the build is the same one I ship for clients.

Back to Proof Library

Sample, not a client. "Bloor West Dental" is invented for this walkthrough. The system below is the one I build for real clinics. See it shipped at Orbit and CISNET.

01 · The business

Context
Business
Bloor West Dental, a two-chair clinic in Toronto
Market
New patients within ~8km, mix of insured and Canadian Dental Care Plan
Goal
40 new-patient consults per month from paid social
Constraint
Front desk is busy. Leads sit for hours before anyone calls back
Compliance
Calling and texting follow Canada's CASL and CRTC rules

02 · The offer

Positioning

One offer carries the campaign: a $99 new-patient exam, X-rays, and cleaning, booked this week. Specific price, specific scope, specific urgency. It answers the first three questions a cold prospect has before they read anything else.

Hook
Same-week appointments, no waitlist
Risk reversal
Transparent price, insurance and CDCP accepted
Proof
Real patient reviews surfaced on the landing page

03 · The funnel map

Architecture

The whole path, from the ad click to the booked chair. Each step is code I own, not a no-code wrapper.

01Meta ad to a lead form or the landing page
02Instant SMS fires within 10 seconds of the form submit
03AI voice agent calls, qualifies, and collects postal code, insurance, and availability
04Live transfer or callback to the front desk on a qualified lead
05Dashboard updates the lead's stage; a handoff task is created
06Email nurture works the leads that did not book yet
07Post-visit review request after a completed appointment

04 · The landing page

Build

A static page that loads fast and leads with the offer. The booking form sits in the hero, above the fold, on mobile first.

  • Hero: the $99 offer, the same-week promise, and the form in one view
  • Social proof: patient reviews and a star rating near the form
  • Insurance row: a logo marquee answering "do you take my plan?"
  • Offer detail: what the $99 includes, stated plainly
  • FAQ: the five questions the front desk hears every day, with schema markup
  • Final CTA: the same booking form, repeated once at the foot
Stack
Astro, Tailwind, Vercel. Static, no CMS, sub-second load
Tracking
Form submit fires the Meta pixel and writes the lead to the database

05 · The ad creative set

Sample copy

Three angles on the same offer, each a distinct reason to click. Run together, the winner shows itself in the data inside a week.

Angle A · Price + urgency
Primary textNew to the neighbourhood or overdue for a check-up? $99 new-patient exam, X-rays, and cleaning, booked this week at Bloor West Dental. Insurance and CDCP accepted. Headline: $99 New-Patient Exam · This Week CTA: Book Now
Angle B · Convenience
Primary textNo waitlist. No phone tag. Pick a time that works and we confirm by text in minutes. $99 exam, X-rays, and cleaning for new patients in Bloor West. Headline: Same-Week Dental, Booked by Text CTA: Book Now
Angle C · Trust
Primary textHundreds of Bloor West neighbours trust us with their smiles. New patients get a $99 exam, X-rays, and cleaning, with a dentist who explains every step. Headline: Gentle, Honest Dental Care CTA: Book Now

Formats per angle: square (1:1) and story (9:16), so one angle covers feed and reels. Creative images are produced per brand; this page shows the copy and structure.

06 · The SMS sequence

Follow-up

Speed to first contact decides the funnel. The system texts within 10 seconds of the form submit, not hours later.

Within 10 secondsHi Sarah, it's Bloor West Dental. Thanks for your interest in the $99 new-patient exam. Want me to call now to find a time this week? Reply YES or pick a slot: [link]
+1 hour, if no replyStill happy to get you booked, Sarah. We have Tuesday evening and Friday morning open this week. Which works better? Reply STOP to opt out.
After a booked visitThanks for visiting Bloor West Dental, Sarah. If we earned it, a quick Google review helps a lot: [link]

Compliance built in: consent captured at the form, STOP handling on every message, and a sending window that respects CRTC rules.

07 · The AI voice agent

Qualify by phone

The agent calls the lead, qualifies on script, and hands a clean record to the front desk. It never confirms a treatment or a price it was not given.

Call transcript · excerptAgent: Hi, is this Sarah? This is Anna calling from Bloor West Dental about the new-patient exam. Is now an okay time? Sarah: Sure, yeah. Agent: Great. To get you the right time, are you looking for a cleaning and exam, or is something bothering you right now? Sarah: Just a cleaning and check-up, it's been a while. Agent: Perfect. What's the first part of your postal code, so I book you at the closest chair? Sarah: M6S. Agent: And do you have dental insurance we should note? Sarah: Sun Life. Agent: Got it. We have Tuesday evening or Friday morning this week. Which works? Sarah: Tuesday evening. Agent: Booked. You'll get a text to confirm. See you Tuesday, Sarah.
Structured data written to the pipeline{ "name": "Sarah", "postal_code": "M6S", "insurance": "Sun Life", "intent": "cleaning and exam", "urgency": "this week", "availability": ["Tuesday evening", "Friday morning"], "stage": "qualified", "handoff": "front_desk" }
Voice stack
Vapi for the call, Claude for reasoning, Deepgram for speech-to-text, ElevenLabs for the voice
Edge cases
No answer retries on a schedule, then stops. An emergency routes straight to a human. Off-script questions defer to the clinic

08 · The dashboard

Operator view

One screen the front desk watches. Every lead, its stage, and the next action, with the call recording and transcript one click away.

  • Funnel: leads counted across stages from new to booked
  • Lead table: name, source ad, stage, call status, next action
  • Per lead: call recording, transcript, extracted fields, SMS thread
  • Actions: move a stage, add a note, trigger a callback
  • Audit log: every status change recorded and uneditable
  • Access: the clinic sees its leads; rewards and texting stay admin-only

09 · The weekly report

Reporting

A plain-English summary, sent every Monday, built from the ad spend, the pipeline, and the bookings. No dashboard login required to read it.

Monday brief · sample data, not a clientBloor West Dental · week of Mar 3 Leads in: 38 · Qualified: 24 · Booked: 11 Ad spend: $640 · Cost per booked consult: $58 Best angle: "Same-week, booked by text" (B) Watch: 4 leads stalled at "qualified, no time picked", callback queued Next: shift budget toward Angle B; test a Friday-only time block

10 · The handoff

You own it

At the end, the clinic owns the system. No platform fee, no lock-in, nothing that breaks if I disappear.

  • Source code: the full repo, in your GitHub
  • Infra: deployed on your Vercel and Supabase, on your keys
  • Walkthrough: a Loom for the front desk and one for the owner
  • Runbook: how to change copy, add a clinic, or pause the agent
  • Support: a defined window after launch, then optional retainer

Build this for your business

This is one fixed-scope build, not ten separate hires. Send the workflow and I'll map it to a sprint and a price.