Behind the build: a 24/7 AI receptionist for a Newark landscaping firm in 6 days
Day-by-day breakdown of how we shipped Taylor Landscaping's voice agent + chatbot + quote calculator for £600 — the architecture, the calls that nearly went sideways, and the metrics after 4 weeks live.
Taylor Landscaping needed three things at once: a quote calculator, an AI chatbot, and a 24/7 inbound voice receptionist — all on a charity-budget price tag. Here's the day-by-day of how we shipped it in 6 working days for £600 all-in.
Taylor Landscaping is a six-person family-run lawn-care business in Newark, Nottinghamshire. They run on-the-bank fishing-led wellbeing sessions and traditional landscape maintenance. The owner, Matt, was missing 30–40% of inbound enquiries — phone calls during the day while he was on a job, evening calls he'd return the next morning by which time the customer had booked someone else.
He needed three things at once: a quote tool customers could self-serve from the website, a chatbot that could answer common questions, and a voice agent that could pick up the phone 24/7 and book real-world appointments. Budget: tight. Like every six-person trade business in the UK, the pricing of the off-the-shelf options had been quoted at £400/month upwards.
We shipped all three in six working days for £600 all-in. Here's how.
See the full case studyDemos of the form, chat widget, and live voice receptionist transcriptThe brief
- Web quote calculator — postcode → lawn size → service → frequency → contact details → instant quote.
- Embedded AI chatbot — same quote logic, conversational, plus general FAQ + booking handoff for non-quote enquiries.
- Inbound voice agent — answers all calls outside working hours and during, qualifies, books appointments, writes lead to a shared lead inbox.
- Single shared price book — change a rate once, all three surfaces reflect it instantly.
- Brand-faithful design — Taylor's forest green / cream / gold palette, warm British tone of voice, no corporate vibes.
Day-by-day breakdown
Day 1 · Discovery + scoping
Two-hour call with Matt to map every customer touchpoint. We sat down with a whiteboard and walked through the actual call flow: "customer rings, you answer, you ask the postcode, you ask the lawn size, you give them a price" — turning a tacit process into an explicit one. The single most useful 90 minutes of the build.
Output: a one-page diagram of the call flow, a list of 7 services with rough pricing logic, and three specific edge cases (Matt has a 15-mile catchment with hard exclusions; some venues have access constraints; bigger jobs always need a site visit before pricing).
Day 2 · Quote engine + price book
Built the underlying price-calculation logic as a single TypeScript module. This is the artifact every other surface (form, chatbot, voice agent) calls into. Single source of truth. ~120 lines of code, with full unit tests for every service × size × frequency combination.
Day 3 · Web quote form
Multi-step form on the existing site, branded in Taylor's palette. Postcode validation against the catchment boundary, service-type cards, lawn-size radio cards, frequency, contact form. Submit → write to Supabase → email Matt + auto-confirmation email to the customer. Live by the end of the day.
Day 4 · AI chatbot
Floating chat widget on the site. Same price book, conversational layer on top. Trained on a one-page "about Taylor" doc + the actual FAQ Matt sends to enquirers. We used GPT-4.1-mini for cost reasons — Claude Haiku tested similarly but 20% pricier per call. Tone tuning took longer than the build ("warm British, never corporate, uses 'cheers' but not 'cheers babes'").
Day 5 · Voice agent
Built on Vapi. Same price book wired in via Vapi's tool-calling. Voice: ElevenLabs Turbo with a UK accent we tested against six options before settling on "Charlotte". Three intents: get a quote, book a callback, route emergency to mobile.
The non-obvious work was the prompt — about 1,500 words of system prompt covering: how to greet, when to ask postcode, how to handle out-of-catchment, what to say if the lawn size is unclear, when to escalate to Matt's mobile, and a long list of British phrases to use and avoid. We had a full "do not say" list including "valued customer" and any sentence starting with "I'm just an AI".
Day 6 · Testing + launch
Matt called it 18 times with different scenarios: easy quote, awkward postcode, angry customer, multilingual, mid-call hand-off. We caught 4 issues, fixed 3 in the prompt and 1 in the code. Pushed live at 4pm Friday. First real customer call came in at 11pm Friday — agent quoted them for a fortnightly cut, booked a first-cut date, and texted Matt before he'd checked his email.
The architecture
Three frontends, one backend, one source of truth. The data flow looks like this:
- Customer interacts with one of: web form, chatbot widget, voice agent.
- Each surface calls a shared `getQuote(input)` function from the price-book module.
- The price book returns the quote — same answer, regardless of surface.
- Lead is written to Supabase with surface-of-origin attribution.
- Email + SMS sent to Matt + customer.
- Matt views a single inbox of all leads from all surfaces.
What nearly went sideways
Three things almost cratered the build, and they're worth flagging because every "AI for trades" project hits at least one of them.
The voice model latency wall
First voice model we tried (ElevenLabs Multilingual v2) had a ~1.4s latency. Conversation felt off — humans expect a 200–400ms gap between turns. Switched to ElevenLabs Turbo (~600ms) which felt natural. ElevenLabs Flash (~400ms) felt great in testing but had a slight robotic edge on long responses. Chose Turbo.
The postcode validation rabbit hole
Matt's catchment is roughly "Newark and 15 miles out". We initially tried regex on postcode prefixes (NG, LN, S, etc.) — too crude. Ended up using a postcodes.io call with a haversine distance check from Matt's HQ. Took half a day. Worth it — it correctly excludes "NG" postcodes that are technically Nottingham proper but 30 miles away.
The accent drift problem
The voice agent's tone drifted into vaguely-American-customer-service speak after about 20 turns of conversation. Solved by re-injecting a mini system prompt every 6 turns reminding the model of the do-not-say list. Token cost went up 8%. Worth it. "Right then" stayed; "reach out" stayed gone.
Metrics after 4 weeks live
| Metric | Before | After 4 weeks | Change |
|---|---|---|---|
| Inbound calls answered | ~62% | 100% | +38pp |
| Avg response time on web enquiries | 4–8 hours | < 60 seconds (auto-quote) | 99% faster |
| Quotes issued/week | ~12 | ~31 | +158% |
| Booked jobs/week | ~5 | ~9 | +80% |
| Hours/week Matt spent on phones + admin | 14 | 4 | -71% |
The voice agent picks up around 28 calls a month after-hours that would previously have been missed. Roughly 6–8 of those convert into booked work. At Matt's average job value, that's ~£2,400/month in genuinely new revenue.
Build cost was £600 one-off. Ongoing platform costs (Vapi minutes, ElevenLabs voice, OpenAI tokens, Supabase, Vercel) currently run about £35/month. Payback period: under three weeks.
What I'd do differently next time
- Pre-build a stock postcode-distance utility — that half-day rabbit hole was avoidable on every future build.
- Run the voice agent through 50+ test calls before launch instead of 18. The four issues we caught were easy; the next one we missed (a bug in handling multi-service quotes) was caught by a real customer in week two.
- Add a "warm transfer" intent earlier — a way for the voice agent to politely say "let me put you through to Matt" and call his mobile mid-call. Currently it offers a callback; warm transfer would close more emergencies.
- Build a tiny admin dashboard on day 6 instead of giving Matt a Supabase login. He learned Supabase, but he shouldn't have had to.
Frequently asked questions
How was £600 even possible for three systems?
Three reasons: (1) Shared price book meant we built the core logic once and reused it across all three surfaces. (2) Modern AI-assisted dev (Claude, Cursor) cut implementation time roughly in half versus 2023 norms. (3) We took a relationship-rate from a long-time client. The full commercial price for the same scope today would be £1,800–£2,800.
How did Matt manage the price book?
Initially via a TypeScript file we'd edit for him. After 6 weeks live we added a tiny CMS layer in Supabase so Matt can edit prices himself without touching code. He uses it once or twice a quarter when seasonal rates shift.
What's the best AI voice platform for a build like this in April 2026?
Vapi remains our default. Retell is a close second. For builds where the customer wants zero developer involvement, Synthflow does most of what Taylor needed but at 30–40% higher per-minute cost. The voice model market is more important than the platform — ElevenLabs Turbo is the safest pick for British accents in 2026.
Can this scale to a 50-van operation?
The architecture, yes. We'd add: per-team-member routing, shared calendar integration, multi-region pricing, and a manager dashboard. Estimated cost: £4,000–£8,000 to upgrade. The shared price book + multi-surface pattern scales cleanly.
What happens if the voice agent gets confused?
It has explicit fallback rules: if confidence drops below threshold, it apologises, captures the caller's name and number, and either books a callback or transfers to Matt's mobile (depending on time of day). About 7% of calls trigger fallback in normal operation. Of those, 90% convert into a callback that gets resolved within a few hours.
Got a build like this in your head?
Free 30-minute call. Fixed quote in 48 hours. Source code yours. If we're not the right fit, I'll say so up front.
