An AI phone receptionist for HVAC companies. It answers the inbound call in a natural voice, books the service appointment, captures the lead, and writes everything into a dashboard the office staff can watch in real time.
The problem. In field service the phone rings while everyone is out on a job. Nobody picks up, the caller does not leave a message, and they ring the next company on the list. The business never finds out the call happened, so it cannot even measure what it is losing.
What I built. A voice agent handles the conversation end to end: it answers, works out what the caller needs, checks whether a time slot is actually free before offering it, books the appointment, and records the lead. Office staff get a dashboard showing bookings, leads, call logs and a per-call detail view, updating live rather than on refresh.
How it is built. Retell.ai runs the voice layer and the Claude API drives the conversation, exposed through a custom LLM endpoint so the agent's behaviour lives in my own backend rather than in a vendor's script box. The backend is Node and Express; the dashboard is React, Vite and Tailwind. Supabase holds the data, with authentication, realtime updates and row-level security policies written into the schema migration rather than bolted on afterwards.
Availability is checked server-side before a slot is offered, which is the difference between an agent that books appointments and an agent that double-books them.
Three n8n webhooks connect it to the rest of the business: one fires on a new booking, one on a cancellation, and one when a call produces a new lead. That is the seam where the office's existing tools plug in without touching the voice agent itself.
Every call is logged with its detail view, so a disputed booking is a record somebody can open rather than an argument.
Like this project
Posted Oct 15, 2026
A voice agent that answers inbound calls for an HVAC company, books service appointments, captures leads, and gives the office a live dashboard of what happened on every call.