From the click that buys it to a working product. Replaces part 3 of the 11 August tech-stack document — that one was a list of jobs; this is the whole road, including the half that happens after the first booking.
Ken's question: "How much of that has to be done by a human? What are those factors? … I can't say what the prices are without knowing this."
Every line below was read out of the code on 12 August. Where nothing could be verified, it says so rather than filling in a number. The headline has not changed: the hours are still unmeasured. What changed is that the list is now longer, and four of the new items make the number bigger.
| Change | Effect on this question |
|---|---|
| The build board exists built 12 Aug |
The per-client steps are counted in one place instead of scattered across an env var, a Telnyx console and somebody's head. The biggest single improvement — "how much is by hand?" becomes a read rather than a guess. |
| The go-live gate is enforced | No account can be marked live until its number is routed and its form is submitted. Ken's "no exceptions", in code. |
| Accelerants bought later get built | A real bug closed. An add-on bought in month three was invoiced and never built — indistinguishable from a person forgetting. |
| Our own e-signature is live | Removes a GHL-UI build per client for the signing half. Not the drafting half — Ted's agreement is still open. |
| Support tickets carry an owner and a first-response time | The vehicle for measuring support labour now exists. It still does not record minutes. |
Net: the system got better, the estimate got worse — because four things came into view that were not on the 11 August list.
"Who can do it" is the column that decides cost. A step a VA can do and a step that needs the person with the server password price completely differently.
| # | Stage | Machine or person | Who can do it | Time |
|---|---|---|---|---|
| 1 | Enrol — plan, four facts, CRM contact, tags, slug reserved | machine | — | seconds |
| 2 | Pay — checkout, accelerants ticked, acknowledgments stored with version + IP | machine | — | seconds |
| 3 | Accept our terms — clickwrap, wording + version + IP stored server-side | machine | — | seconds |
| 4 | Fill the questionnaire — 11 sections: business, inspectors, services, packages & pricing, add-ons, callers, schedule, what Josh asks, agreement & payment, follow-up emails, voice & guardrails | the client | client, chased by us | unmeasured |
| 5 | Their own CRM sub-account is created | machine | — | seconds |
| 6 | Load the base template into it | ⚠️ does not happen | a person, in the GHL screen | unmeasured |
| 7 | Load the accelerant templates they bought | ⚠️ does not happen | a person, in the GHL screen | unmeasured |
| 8 | Port the number in | person + carrier | us · client's signature · losing carrier | days–weeks |
| 9 | Point the number at Josh — Telnyx app and a row in NUMBER_TO_INSPECTOR | person | developer — code + deploy | unmeasured |
| 10 | Issue the portal login — INSPECTOR_PASSCODES | person | server access + restart | minutes |
| 11 | Build their own inspection agreement as a fillable template | person | someone who can read a contract | unmeasured |
| 12 | Test call | person | anybody — but somebody must listen | minutes |
| 13 | Mark live | person | Ken / Beth / Dil | seconds |
This is where the product either works or doesn't, and none of it has run end to end for a paying customer.
| Stage | State today | Blocked on |
|---|---|---|
| Booking saves; work order + transcript filed on the contact | live | — |
| Text the inspector that a booking came in | switchable, consent-gated | the client ticking the box |
| Email the customer a confirmation | live — wording derived from which stages are on | — |
| Send the agreement to sign | e-sign live, Chad only | Ted's template |
| Payment link / raise the invoice | ⚠️ never run | no client has connected their own Stripe |
| Reminders, review request | built | the switches above |
BACKSHOP_ENABLED, BACKSHOP_SMS_ENABLED,
BACKSHOP_PAYMENTS_ENABLED, BACKSHOP_AGREEMENT_ENABLED,
BACKSHOP_ESIGN_ENABLED — one setting each, for the whole system.
So one account cannot be "finished" on its own. Turning the payment stage on for client three turns it on for Chad and Ted at the same instant. Today that is invisible because everything is off; the day the first one goes on, it is a per-client feature that isn't one.
GHL_CLIENT_SNAPSHOT_ID is unset, so a new sub-account is
created bare: no workflows, no pipelines, no custom fields. All six accelerants
ship with an empty snapshot id too, so the bolt-on loader correctly resolves to
"nothing to do."
Both are technically working as designed. The consequence is not: every workflow, pipeline and field a client needs is built by hand, in the GoHighLevel screen, for every client we sell.
GoHighLevel has no workflow API at all — not to create one, not even to read one. Funnels, websites and pages are read-only. This is not a build we have not got to; it is a build no agent can ever do.
It is also not one of the six steps the build board counts. The board shows "Accelerant templates applied ✅" when the loader ran and found nothing to load. The most expensive manual job in the process is invisible on the page built to count manual jobs.
Build the base snapshot once, by hand, in the screen. Every future client then gets it in seconds. That one job converts an unbounded per-client cost into a one-off — and it is currently recorded on the board only as a question that was answered, not as the lever it is.
This is the staffing answer, and it changes the rate rather than the hours.
| Step | Why it is not VA work |
|---|---|
| Point the number at Josh | NUMBER_TO_INSPECTOR is a hard-coded map in the code. There is no env override. A new client's number means a commit, a merge to main, and a deploy. |
| Issue the portal login | INSPECTOR_PASSCODES is a server environment variable — SSH, edit, pm2 restart. |
| Any change to Josh's brain | bot.py does not auto-deploy. Copied to the server by hand, then pm2 restart austin-voice. |
The GHL build above is the other side of it: not developer work, but not unskilled work either — somebody who knows GoHighLevel well, doing the same build repeatedly. Two different rates, and neither is the one usually assumed when people say "white glove setup".
Written in the code itself: "the whole chain after a booking — does the stage fire, does an email go, does the link arrive, does a card actually charge — has never been run end to end."
It is blocked on a step only the client can do: connect their own Stripe inside their own GoHighLevel. Nobody has. Until one does, we do not know how long that step takes, how much hand-holding it needs, or what breaks after it.
For pricing this counts twice. It is unmeasured labour, and it is the stage that gets our clients paid — the thing Ted does by hand today, and the clearest single thing this product does for him.
The build board lists accounts whose status is exactly
submitted. In the live store today, none is.
| Account | Status | On the board? |
|---|---|---|
| gc — Chad | draft | no |
| qhi — Ted | active | no |
| three test records | draft | no |
So the board reads zero accounts, zero steps, zero hours — while two clients are live. Two separate reasons, both worth knowing:
active is treated as finished everywhere else. The function used
by Josh's brain — and by the go-live gate inside the same file — accepts both
submitted and active. The list filter is stricter than the
gate two functions below it. One-line fix, left as a decision rather than a
tidy-up because it changes what Ken sees on a page he reads.That second point is why this cannot be closed from a desk: the first real measurement can only be the next client.
Four stages, and they are real — so nobody should double-count them as labour:
The last one is the one people underestimate. The thing that used to be the whole job — teaching the receptionist the business — is now free and instant.
There are two numbers hiding under "how long does a client take", and mixing them up is what has kept this open.
| What it is | State | |
|---|---|---|
| Elapsed time | enrol → live. How long a customer waits. | already stamped — createdAt, submittedAt, goLiveAt. Needs no build. Does not tell you what it costs. |
| Hands-on minutes | what somebody was actually doing. | recorded nowhere. This is the one that decides staffing, and therefore price. |
The 11 August answer was "time the next onboarding, and log support minutes for a month." That relies on people remembering, every day, for a month — and the first week it slips, the data is worthless.
There is a cheaper version and the parts are already built. About an hour of work, in three pieces:
Then the answer arrives on its own, from real work, in a month — and it keeps arriving, which a one-off stopwatch exercise does not. It does not remove the human step; somebody still types the number. It removes remembering to keep a record, which is the part that always fails.