Ken's list · Wednesday 12 August 2026

Five built, one honest no — and the recordings were worse than anybody thought.

Six things off Ken's list, plus the two follow-ups from yesterday's Q&A. Five are done and on the branch. One — can an agent text an inspector through the system — is a no today, and pretending otherwise would be the expensive answer, so it is written up with what it would actually take.

6of Ken's items
2Q&A follow-ups applied
1answered “not today”
3.5sdead air per recording
39test files green
The short version

Built: the 440,000 correction, the recordings now start where the conversation does, Josh's page says he is an AI and that calls are recorded, the site has a working search, and the Business Center and James are on the homepage — the first time either has appeared on it.

Applied from the Q&A: the seller's-agent question is off the inspector's form and the listing agent is now captured on every call; and an account physically cannot be marked live until the number is routed and the questionnaire is submitted.

The no: nothing in the system receives an inbound text. Not “it needs configuring” — there is no inbound handler at all, and a text sent to an inspector's number today is accepted and silently discarded.

1 · The 440,000 was backwards, and it is fixed

Homepage, the first citation card under the headline.


01

72,000 left. 440,000 remain. The card said the wrong one.

Was: “Full-time agents and brokers fell to 440,000 — the largest single-year decline since 2008.”

Now: “72,000 full-time agents and brokers left the business in 2023 alone — the biggest single-year drop since 2008.”

Ken's reason, and it is the right one: as written it read as though only 440,000 agents were left in the entire country. The Propmodo · May 2026 source line is unchanged, and the Sources page needed no edit — it cites the article, not the figure.

Live on the branchindex.html

2 · The recordings

Ken: “it took a few seconds to start… I actually thought, is the thing playing? I'm not going to stay here, because something's wrong.”


02

It is exact digital silence, not a slow start — and every call has it

The seven recordings on the Engine 4 page were decoded and measured rather than guessed at. Every one opens with true zero — not room tone, not a ring tone, nothing at all — while the call connects and the bot starts up.

RecordingJosh's first wordPlayback now starts
Standard booking3.9s2.9s
After hours4.0s3.0s
Weekend request4.0s3.0s
Price first3.5s2.5s
Agent books3.6s2.6s
New construction4.1s3.1s
Referral3.5s2.5s

Play now starts one second before Josh speaks, exactly as Ken asked. The second is deliberate: dropping in on the syllable sounds like a broken file, while a beat of quiet reads as a call connecting.

The clock and the progress bar are measured from the same point, so a card reads 0:00 / 6:50 instead of 0:03 / 6:53 — the number under the button now matches what you hear. Dragging the bar to the far left lands on the first word rather than back in the silence. Nothing is edited: it is still the unedited call, the playhead just starts where the conversation does.

Live on the branchengine-4-conversion.html
One thing to decide, Dil

Your note said that if the delay could not be removed we should print “there is a 3-second delay before the call starts” next to the play button. It has been removed instead, so that line would now be false and it is not on the page. If you would still rather have a reassurance line there, say so and it goes in — but it should describe what the player actually does.

3 · Josh's page now says what Josh actually says

bookedsolidinspector.com/josh.html


03

Both disclosures were true of the product and missing from the page

Ken was right that the page said neither. He is also right about why it matters — “a lot of states require now that if you have an AI, you have to identify him as an AI,” and on the recording line, “that has to be in there, otherwise there's a huge fine.”

Both have been in the live Josh since 7 August. The page now carries them in their own band, quoting what a caller actually hears:

Asked if he's a person: “I'm an AI — I handle the scheduling here at [your company]. So not a person on the other end. But I can get your inspection booked right now so you don't have to call back.”

On connect, every call: “Just so you know, this call is recorded for quality and training.” That one is spoken by the system on the connect event rather than left to the prompt — a prompt can be ignored on a busy call, and this one cannot be.

The band ends with a plain line that we are not a law firm and that rules vary by state. Selling a compliance feature without that line is its own risk.

Live on the branchOne decision for Ken — see below
Worth knowing before you rely on it

Josh identifies himself as an AI when he is asked. He does not volunteer it. That matches how Ken described the requirement on the call — “if somebody asks you, are you a robot… all he has to do is say, I'm the AI assistant for…” — and it is the right default for bookings, because volunteering it up front costs conversions.

Some states read their disclosure law as requiring it up front, unprompted. Nothing has been changed on that basis, because it is a legal question and a conversion question at the same time, and it is Ken's call — not something to slip into a prompt. It is worth putting in front of the LegalZoom lawyer alongside the master service agreement.

4 · The site has a search

Ken: “There isn't a search function on the Booked Solid website.”


04

Every page, searched in the browser, with no server and nothing called out to

A Search button now sits in the nav on all 21 pages. It opens over the page, searches as you type, and jumps to the section rather than the top of a long page. Keyboard: / or Ctrl/⌘+K to open, arrows to move, Enter to open, Esc to close.

The site is static files on nginx, so there is nothing to ask. Search runs entirely in the visitor's browser against an index generated from the pages themselves — 392 entries across 18 pages — so it can never drift from what the site says. The index is fetched only when somebody actually opens search, not on every page load.

One habit this creates: after any copy change, run node scripts/build-search-index.mjs. Skip it and search answers with yesterday's site.

Live on the branchsite-search.js · search-index.js

5 · The dashboard and James were invisible

Ken: “I couldn't find out about the dashboard on the site. That's a huge USP. Another USP is that James answers questions the inspector might have when completing the Onboarding Form. There is no mention of that.”


05

He was right twice, and the second one was worse

The Business Center — a working, clickable demo of the real thing — was linked from exactly one page on the whole site, was in no navigation, and appeared nowhere on the homepage.

James was worse: searching the finished site for “James” returned nothing at all. The thing we sell as a reason the setup form is not a form the inspector faces alone was not mentioned on a single page.

Both are now on the homepage, in a band placed straight after the four engines — the engines are what runs, this is where you watch it run. It carries the real tiles, a James exchange, three plain-English points (the numbers, every call listenable, James in the room) and a button through to the live demo.

Business Center is now a nav item on 12 pages, and step 1 of “How It Works” now says James is on the page while you answer the questionnaire.

Live on the branchindex.html + 11 pages
The one that follows from this, and it is Ken's own point

Ken, on the call: “if the onboarding form is outside the dashboard, James won't be able to” help with it. The homepage now promises that he does. The onboarding form (/onboarding.html) currently carries the floating James, so the promise holds — but if the form ever moves outside the dashboard, this copy becomes a claim we do not keep. Worth pinning before the first new client sees it.

6 · The tech stack — yes, and here is the link


06

It was written on the 11th. It was linked from nowhere, which is why it went missing.

The tech stack & white glove — twelve sections: the six services in every phone call, the three Telnyx meters on one call, the different and cheaper web stack, what a person still has to do, and what could not be answered from inside the repo.

It has been sitting in /reports/ since it was written, reachable only by knowing the filename. It is now pinned in a Reference row at the top of the Pre-Launch Status Board, along with the booking flow, the What Changed deck and the site sweep — the board is the page that actually gets opened.

Linked on launch.html

7 · The two follow-ups from yesterday's Q&A


07

The seller's-agent question is off the form. The listing agent is now always captured.

Ken overruled yesterday's answer, and the reason he gave is a forward-looking one: “We will need that for marketing to sellers' agents as Booked Solid evolves. It's better to have it and not need it than to need it and not have it.”

What changed: the “Do you email the seller's / listing agent?” yes/no is gone from the inspector's onboarding form. It was doing more than it looked — it decided whether Josh captured the listing agent at all, so an inspector who does not email them lost the record too.

Josh now asks every caller once, using Ken's own wording: “by chance, do you know who the seller's agent is?” A name and a firm is a win. If they do not know, he says no problem and moves on — no rephrasing, no second attempt.

Where it sits matters more than the question: it is asked after the booking is saved, beside “how did you find us”. Measured on two real calls on 10 August, asking for agent details up front pushed a routine booking past eight minutes and thirty-five questions and the call ran out before anything was booked. At the end of the call the same question costs about five seconds.

Whether that agent gets emailed is still the inspector's choice — it is the “Notice to the seller's agent” row in the email schedule, which is where that decision always belonged. Both brains were changed together, phone and web.

Live on the branchbot.py · chat.js · onboarding form · Brain 2 note
08

An account can no longer be marked live early. The button refuses.

Ken: “An inspector's account should not be activated until the number is ported and the onboarding is firmly locked into Brain Two. No exceptions.” — and on the call, “I'm gonna be Machine Gun Floyd on this.”

This is now enforced in the code rather than written down. Mark live on the build board is greyed out, and the server refuses the request even if something else calls it, until both are true:

Both, or it does not start

  1. The number is routed to Josh. A number that exists in Telnyx but is not mapped falls through to the default brain — that is exactly what happened on 28 July, when a Delaware caller got GC's Texas prices and GC's weekdays-only rule. Marking an account live before the routing is done does not give a client a quiet system; it gives their callers another company's answers.
  2. The questionnaire is submitted. Until Submit is pressed, Josh speaks from the built-in seed, not the client's own answers. GC ran on a draft form for a fortnight and nobody noticed.

The board now names what is missing on each account instead of letting somebody press the button to find out. Turning an account off is not gated — the moment you want an account off is the moment something is going wrong for a client.

Live on the branchbuildboard · build-board.html

8 · Can an agent text Chad through the system?

Ken: “a gate code change, or a document that needs to be signed… text is an everyday way of life now. What am I going to say when somebody asks me that?”


Today the answer is no — and the failure is silent, which is the worst part

There is no inbound message handler anywhere in the system. Not misconfigured — absent. Everything that exists sends outbound: the booking alert to the inspector, the payment link, the agreement, and GoHighLevel's own campaign texts.

So if an agent texts a gate code to an inspector's Josh number today, Telnyx accepts it, no webhook is configured to receive it, and it is discarded. The agent's phone shows the message as sent. Nobody is told. The inspector arrives at a locked house.

09

What it would take — and Dil is right that it is easier than voice

No new number is needed. It is the same ported number the inspector already has, and receiving is one webhook rather than a live audio stream. In order:

The route to yes

  1. 10DLC has to land first. It is already the known blocker — the registration is still filed under Outcrop and is being redone under Booked Solid. Nothing below is worth building on top of an unregistered brand.
  2. Point the Telnyx messaging profile at a webhook and add the route that receives it. There is nothing to migrate; it does not exist yet.
  3. Route by the number that was texted — the same NUMBER_TO_INSPECTOR map the phone already uses, so a text to Quality's line cannot land on GC's record. That map is exactly what was missing on 28 July when a number answered as the wrong company.
  4. File it on the contact, matched on the sender's number, so the text sits with the work order, the call recording and the transcript — the client record Ken calls the USP that knocks everybody out.
  5. Tell the inspector, through the alert path that already exists, and show it in the Business Center beside the calls.
  6. Replies go out through GoHighLevel, not through anything we write. It already carries STOP and unsubscribe handling, and Ken's own point about fines at “$1,500 or $3,500 an event” is the reason not to hand-roll a sender.

Cost: the rate on file for outbound is about 1.2¢ a message (Knox, 14 July). Inbound is normally a fraction of that, but I have not verified Telnyx's inbound rate and am not going to state one I have not read. A separate text-only line, if a client ever wants one, is a new Telnyx number at roughly a dollar a month plus per message.

What Ken can say today, accurately: “Texting into the system is V1.1, not V1. Right now, texts go to your own phone as they always have. When it lands, the text will file itself onto the job beside the call recording and the work order — which is more than a text on your phone ever did.”

Needs a decision — and 10DLC first

Before this goes live


⚠️ The website changes do NOT reach the public site on merge

bookedsolidinspector.com is served by nginx as plain static files from /var/www/bookedsolid/. It does not read this repo. Merging to main updates the working copy and nothing the public sees.

Every changed page has to be copied across, and that now includes two new files — site-search.js and search-index.js. Miss those two and the Search button appears on every page and does nothing.

The Business Center demo, the launch board and the reports are on dashboard.outcropinspector.com, which is served from the repo and does update on merge.

Checked before writing this

The full test suite is green — 39 test files, including the brain-parity check that keeps the phone and web Joshes from drifting. Two tests were rewritten where they asserted the old seller's-agent behaviour, and a new one now fails if the “always captured” line ever goes back to depending on an answer nobody is asked for.

The site was loaded in a real browser at eight widths from 1440px down to 380px to confirm the new nav item and the Search button did not push the page sideways — the first attempt did, clipping “GET STARTED” off the right edge at every width, which is why the nav measurements are written into the stylesheet.