Skip to content

Multi-trade · AI automation

One engine, six businesses, and a price that never disagrees with itself

The website says one price, the estimator says another and the chat says something else. Every new location means rebuilding the logic.

Our own TypeScript engine runs six concept sites from one knowledge file each, so the page, estimator, assistant and dispatch agree.

Our own system. It runs inside our concept sites, such as Ridgewell Roofing, a fictional business.

The everyday problem

The website says one price, the estimator says another and the chat says something else. Every new location means rebuilding the logic.

One knowledge file per business drives everything, so every page reads the same prices.

The hard part

  1. The estimator and the price table disagree

    An estimate that scales nothing repeats the published price exactly, so a $175 call no longer shows as $200.

  2. 'Roof' matches every roofing service

    Words guessed from service names lose to keywords the company declared.

  3. One company quoting another's prices

    The business id is added on the server, never taken from the browser.

  4. A free inspection given a price

    A $0 service is shown as free, never scaled into a price.

  5. A release that breaks live

    Smoke tests run after the switch. If live fails, the previous release goes back at once.

How it runs

Workflow

How one engine serves six businesses without mixing them up.

Sample run
  1. Step 5: Release automation. Smoke tests, automatic rollback.
    If this fails: Live check fails: rolls back.

Tap “On fail” to see what happens when a step breaks.

Edge cases we handled

What the system does in the unusual cases. Where there is a phrase, type it into the demo.
WhenWhat the system doesTry it
A database was made before a new column existed.The column is added on open. Nothing is lost.No phrase to try
A browser sends a forged site id.It is never read. The server adds its own.No phrase to try
A visitor prices a roof in the 3D configurator.That price goes on the lead as the estimate. It is not recomputed.No phrase to try
The live smoke test fails.The previous release is put back.No phrase to try

Guardrails and hand-off

Guardrails

  • The business id comes from the server, never the browser.
  • Each business has its own database file.
  • Migrations only add columns, never drop them.
  • No release stays live after a failed smoke test.

When a person takes over

Every site writes its leads and steps to its own office board. People pick up from there.

Not in this build yet

We would rather you hear it from us.

  • Twenty-eight unit tests cover the chat flow and the public board's privacy. The scoring, matching, estimating and dispatch functions have no tests of their own yet.
  • Confirmation messages are logged only. No text or email goes out, and each log line says so.
  • The booking form prices a job as routine; a lead the server records can carry the after-hours rate for an emergency, so the two can differ.

Built with

  • TypeScript
  • Next.js
  • Node.js
  • Not yet. Confirmation and follow-up steps are logged for the office. In your build, we connect the tool you already use.

  • Yes, that is the point of it. One knowledge file per business drives the page, the estimator, the assistant and dispatch.

More work

How Ridgewell intake engine runs. Steps: Lead arrives, then Read urgency, then Match the service, then Score 0-100, then Pick a crew, then Hold the window, then Office crew board.

  • Concept build
  • Roofing
  • AI automation

Roofing leads that know an emergency when they read one

Everyday: Web leads sit in one inbox and get answered in the order they arrived. In a storm week, the leaking ceiling waits behind the gutter quote.

The hard part: An emergency typed casually

How Kestrel and Dune Lake triage runs. Steps: Request arrives, then Read urgency, then Emergency?, then Pick the team member, then Hold the slot, then Office board.

  • Concept build
  • Property management
  • AI automation

Maintenance emergencies triaged in each company's own words

Everyday: Resident maintenance requests, owner questions and viewing requests all land in one place, and a routine request looks the same as an urgent one.

The hard part: Emergencies that differ by business

How rnextlabs.com chat runs. Steps: Message, then Guards, then Intent rules or webhook, then Email address spotted, then Enquiry sent, then Transcript follows.

  • Our own product
  • Our own site
  • AI services

A website chat that turns an email address into a real enquiry

Everyday: Website chats collect a visitor's details and then nobody sees them, or the bot promises a callback it cannot make.

The hard part: A lead that nobody sees

Start a project

Want something like this for your business?

A 30-minute call, then a written plan and a fixed quote. No obligation.

  • A reply from a person within one business day.
  • Fixed price in writing
  • You own everything