Case study · In-house system

First to
claim it,
owns it.

TradeFlow is a dispatch system I built in house for home service companies that subcontract the work out. It is the one build in this portfolio you can open and try for yourself right now.

3 workflows 7 pipeline stages No AI API spend
Type
In-house system, not a client project
Scope
Chat intake, dispatch, claim handling, pipeline
Built with
HighLevel, Vercel, vanilla JavaScript
Status
Live and available as a template
$0

The number

in AI API cost, because the intake chat only has to feel like a conversation.

01
The problem

Dispatch by phone tree.

A company that subcontracts its work out has the same bottleneck every time a job comes in. Somebody has to start calling down a list of subs until one of them says yes.

It is slow, it happens after hours as often as during them, and it quietly optimises for the wrong thing. The job goes to whoever picks up the phone first, which is not the same as whoever can get there first or wants it most. Meanwhile the customer is sitting in silence wondering whether anyone is coming.

The person doing the dispatching is not adding judgement. They are just being a slow, expensive router.
× Calling down a list One sub at a time, in an order nobody chose for a reason.
× After hours anyway Jobs do not arrive between nine and five, so neither does the dispatching.
× The customer waits Silence while the calls happen, which is where most of them go elsewhere.

The build

Turn the phone tree
into a race.

One job, every qualified sub, the same second. Whoever moves first owns the work.

1 Chat intake on the siteWho they are, the service, the urgency, the address, and the unit count if it is a property manager. Intake
2 Contact, tag, jobThe CRM creates the contact, tags it by trade and caller type, and opens the job on the pipeline. Created
3 Out to everyone at onceEvery matching subcontractor gets it in the same moment, each with their own claim link. Broadcast
4 First click owns the jobIt moves to claimed, the customer is told someone is coming, and everyone else gets a clean answer. Claimed
Intake chatFive fields
Are you a homeowner, a property manager or a contractor?
Property manager
What do you need, and how urgent is it?
Plumbing, water is coming through a ceiling
How many units on site?
Five known fields in a fixed orderNo model
Job createdHanded to the CRM
Contact created with the answers attachedDone
Tagged plumbing and property managerDone
Opportunity opened on the dispatch pipelineDone
New lead → Qualified → DispatchedStage 3 of 7
Routing by trade, so plumbing only reaches plumbersFilter
Out to every matchSame second
M Marco P.Plumbing · 6 miles Sent
D Dana R.Plumbing · 3 miles Sent
L Luis T.Plumbing · 11 miles Sent
One job, three links, no phone callsBroadcast
ClaimedWhoever moved first
M Marco P.Clicked 40 seconds later Already taken
D Dana R.Claimed the job Claimed
L Luis T.Clicked two minutes later Already taken
Customer told someone is on the wayAutomatic
Owner told who took itAutomatic
02
The detail

The part that saves the money.

The intake chat is built as a custom interface running on plain JavaScript, with no AI model behind it at all. It does not need one. Collecting five known fields in a fixed order is a form wearing a conversation's clothing, and a real language model would add per conversation cost and latency to do a job that does not require any reasoning.

That decision also solved a platform limit along the way. The built-in chat widget cannot be moved out of its corner bubble with CSS or JavaScript, so building the interface directly gave full control of where the conversation lives on the page.

  • The first sub to click owns the job. It moves to claimed, the customer gets told someone is coming, and the owner gets told who took it.
  • Everyone else gets a clean answer. If the link is clicked after the job is gone, the sub gets an already taken reply instead of silence, which is what stops people ignoring the next one.
  • Seven pipeline stages track a job from new lead through qualified, dispatched, claimed, in progress and completed, with lost as the exit.
  • Routing by trade, so a plumbing job only ever reaches plumbers.
03
The result

The fastest sub wins, and
nobody makes a phone call.

A job arrives, goes out to everyone qualified to do it, and is claimed by whoever moves first. The customer hears back immediately, the owner never picks up the phone to dispatch, and the sub who wanted the work most is the one who gets it.

Because it was built in house rather than for one client, it exists as a deployable template rather than a single installation, and it runs with no recurring model cost to pass on to anyone.

What shipped

The whole system,
in six lines.

Intake fields
5

Collected conversationally, no model

Workflows
3

Intake, dispatch and claim

Pipeline stages
7

New lead through completed, plus lost

Dispatch model
Broadcast

First claim wins, everyone else told

Running cost
$0

No AI API spend to pass on

Availability
Template

In the shop, from $299

Want this one

TradeFlow is
in the shop.

Take the template and load your own trades and subs, or have it installed and tested with your claim links working end to end.