Booked Solid — Reference

The tech stack, and what a human still has to do

What is actually in a phone call · what is actually in a website chat · every job that still needs a person. Read out of the code, not remembered. 11 August 2026.

Ken asked for these three things on the 10 August call, more than once, and each time what came back was a cost total. This is the three things.

No prices here

Vendor rates only. No plan price is proposed and none is agreed. Where something could not be verified, it says so instead of being filled in.

Part one — the phone stack

01Six services are in every Josh call

Built on Pipecat, in austin-voice-poc/bot.py. A call goes through these in order:

What it doesWhoWhich modelPaid?
Carries the call, streams the audioTelnyxTeXML app austin-voiceYes — three meters
Knows when the caller stopped talkingSilero + Smart Turnon our own serverNo
Speech into textDeepgramnova-3Yes
Decides what to sayAnthropicclaude-haiku-4-5Yes
Text into speechElevenLabseleven_multilingual_v2Yes — the biggest line, 63% of a call
Books the job, writes the recordGoHighLevel + the inspector's ISN—Flat monthly
Verified in the code

🔴 Corrected 12 August — this row used to say eleven_turbo_v2_5

Ken caught it: "we were sure that we are not using ElevenLabs turbo but multilingual." He is right. The server's settings file reads ELEVENLABS_MODEL=eleven_multilingual_v2 — confirmed on 11 August and deliberately kept, because the fast model produced gibberish audio on real calls. It costs double, and it is 63% of the cost of a call.

The mistake was reading the code's default and calling it "today". The bot falls back to turbo only when nothing is set — and something is set. A default is what happens when nobody decided; this was decided, on the server, in a file that is not in this repo.

The cost figures were never wrong. $0.064 a minute already had the expensive voice in it. The web chat really does run eleven_turbo_v2_5 — that one is hard-coded, so part two below stands.

02Telnyx charges three times for one call

The phone line, the audio stream, and the recording are three separate charges, not one.

The stream costs more than the phone line itself — and nobody had counted it

It was in none of the July costings. Not hidden, not anyone's mistake: it simply isn't obvious that streaming the audio to our server is billed apart from carrying the call.

Now counted

03The part that stops Josh interrupting is free

Working out when a caller has finished a sentence runs on our own server. It costs nothing per call and never shows on a bill.

Worth knowing precisely because it never shows on a bill — it does real work and is easy to forget is there at all.

Free

04What can be changed, and where the switch is

These live in /opt/austin-voice/.env on the server — not the app's settings file. The bot reads its own. Change one, restart, done. No deploy.

SettingTodayWhat else it takes
Voice modeleleven_multilingual_v2
set on the server — a decision, not a default
turbo — the code's fallback, half the price · flash — fastest, English only, produced gibberish on real calls
Listening modelnova-3others, but the local word list needs nova-3
LanguageEnglishmulti turns Spanish on — Ken's ruling: not until he says so

One thing that catches people out

The phone bot does not update itself when we merge changes. It is copied to the server by hand and restarted. Everything else in the system deploys automatically.

Manual deploy

Part two — the web chat stack

05A different stack, and cheaper for reasons that aren't obvious

Parker, James and web Josh all run in the same app as the dashboard.

What it doesWhoPaid?
Hears the visitorthe visitor's own web browserNo — free, in any language
Decides what to sayAnthropicYes
Speaks backElevenLabsYes — only if they choose voice
Books and recordsGoHighLevelFlat monthly
Verified in the code

06Three reasons the website is cheap

There is no listening bill at all. The visitor's own browser turns their speech into text. On the phone that is a real charge every minute. On the web it is free — and free in Spanish too.

The website pays half what the phone pays for the same voice. Same voice, same company, half the rate. The phone has been on the expensive model; the web never was.

Most visitors type instead of speaking, and typing costs nothing to answer out loud.

Live

07James is carrying something he doesn't need

Ken spotted this on the call. James loads Parker's entire sales playbook — 73,000 characters of objection handling and price arguments — on top of his own two manuals.

That is why he costs more per conversation than the salesman does, even though his answers are shorter. Trimming it would roughly halve him.

But don't just delete it

He was given Parker's knowledge on purpose. Ken, in July: "people will ask, I thought when I signed up the program did this — and then James will be able to say, here's what the program really does." A paying customer with a wrong expectation is exactly who that is for.

The fix is to keep what the product does and drop the selling. That is a judgement about his job, so it goes to whoever wrote him.

Flagged, not changed

Part three — white glove

08What a machine cannot do

Ken's question was the right one: "How much of that has to be done by a human? What are those factors? Then we have to see how much it costs, because people have to be paid."

These are the floor. No amount of building removes them, and they happen on every new client.

JobWhy it needs a person
Move the phone number to usA carrier form, a signature, and a wait. It cannot be hurried. And it is now required of every client.
Point the number at usDone in Telnyx's own screens. Adding the number is only a third of the job — miss the other two and it answers as the wrong company. That has already happened once.
Any website or workflow inside GoHighLevelTheir system does not allow us to change these from code — read only. All of it is done by hand.
Google Business ProfileGoogle's own check — a postcard, a call, or a video.
Directory listingsOther companies' websites, most with no way in from code.
One test call before go-liveSomebody has to hear it. This is what catches a wrong company name, a wrong price, or a voice that sounds off.
Read the finished setup formThose answers become what Josh says on every call. A wrong price typed here is quoted to every caller.
Per client, forever

09Automatic, but somebody has to catch the failures

These usually cost nothing. When they break, a person has to notice.

Watch, don't run

10The one nobody has measured, and it may be the biggest

Looking after a client after they go live.

Nothing anywhere records how long that takes. Not one figure.

And the honest expectation is that it beats the AI cost outright

The AI runs about $21 to $31 a month on an average client. One forty-minute support call a month beats that at any real hourly rate.

This is the number that decides whether a price works, and it is the only one of the three that cannot be read out of the code. It needs measuring, not guessing — one column on a timesheet for one month.

Needs a person, not a build

What this means for setting a price

11The AI cost is now known, and it is small

After the caching fix, a phone call runs about six and a half cents a minute. A website chat is about a third of a phone call.

But that is not what sets the price. Two things are bigger:

So the missing piece isn't a price from a supplier. It's hours.

The one-off list can be timed on the next client we set up. The ongoing one needs a month of writing it down. Neither is something the AI team can produce — and saying that plainly is the point of this page.

12What could not be answered from here