All documents

Requirements, for approval

Plumber Assistant

A booking assistant for a plumbing firm: what it does, what it does not do, and what it costs to build. Written before the work started, and kept so the finished thing can be checked against it.

Abad Naseer  ·  11 August 2026  ·  a separate system, sharing only the engineering

Plumber Assistant

Requirements, for approval.

A booking assistant for a plumbing firm. A customer describes a problem in their own words, the assistant works out which service that is, and they book a time in Calendly. There is no basket and no checkout, because a visit is one job at one time rather than a list of things.

It is a separate system. Its own application, its own database, its own address, its own office screens. Nothing is shared with the grocery assistant while either is running, so neither can affect the other, and the two can be sold, priced and supported apart.

What it inherits is the engineering. The parts that took longest to get right, understanding what somebody said and matching it against a list in milliseconds, are already built and running. That is why a system of this size is measured in weeks rather than months.

Who it is forOne plumbing firm and its customers
How a time is bookedCalendly, which the firm already keeps
Shares with the grocery systemNothing at run time
New paid serviceA Calendly plan that includes webhooks
Genuinely new engineeringThe booking step

Out of scope, so that it is written down: there is no directory of plumbers, no way for a plumber to sign themselves up, and no bidding between firms. This is one firm's own assistant.


1. What replaces the basket

This is the whole of the difference. Everything either side of it, understanding what was asked for and confirming what was agreed, already works in the grocery system.


2. What a customer does

The assistant asks at most one question back. Where it cannot place the job with confidence it says so and offers a callback, rather than booking the wrong visit and losing a morning.

The conversation is saved against the job, so the plumber arrives knowing what the customer actually said.


3. The database

Seven tables, designed for jobs. A job has an address, a duration, a technician and a history of being moved, and none of those belong on a shopping order, which is why this is a new schema rather than a renamed one.

TableHolds
servicesName, description, price range, expected duration, whether it is an emergency call
jobsThe booking: customer, service, address, status, and the conversation
job_linesService, parts and labour, so a job can be priced afterwards
appointmentsStart, end, technician, calendar reference, status
techniciansWho can take which service, and their working hours
service_areasPostcodes covered, and any travel surcharge
customersContact details and the address, kept between visits

Only appointments is load bearing on day one. technicians and service_areas can hold a single row each until the firm needs more.


4. The pieces

One new subscription and one new piece of engineering. Everything else on that diagram has been running in production for months.


5. How it understands a plumbing job

The matching engine is the one already searching 25,631 grocery products in milliseconds. A plumbing firm has tens of services, so the engine has an easier job here than it does today.

The work is the vocabulary rather than the technology. A customer says "my boiler is making a banging noise". They do not say "central heating diagnostic". Collecting the first kind of phrase, with the firm, is the main content task in this build.


6. Booking a time in Calendly

The firm keeps working in Calendly, which they already use. Nothing about how they run their diary has to change.

Two things need care, and both are on that diagram. A slot has to be held while the customer decides, or two people book the same hour. And when the plumber moves a job in their own calendar, the system has to hear about it, or the office rings a customer about a visit that changed hours ago.


7. The interface

Same shape as the grocery assistant, which is already built and tested.

ScreenDoes
ChatDescribe the problem, by typing or speaking
Booking panelAvailable times for the matched service, in place of a basket
ConfirmationWhat was booked, when, and what it is expected to cost
OfficeThe day ahead, today's jobs, and one place to see a customer's history

8. The connections

EndpointDoes
POST /chatA turn of conversation
POST /voiceA spoken turn
GET /servicesThe service list
GET /availabilityFree slots for a service
POST /bookingsTake a slot and create the job
POST /webhooks/calendlyTold when a booking moves or is cancelled
GET /admin/jobsThe day, for the office

9. Build order

Phases one and two produce something the firm can use, with bookings taken by phone. Phase three is where the new engineering sits, and it is the phase to protect from being squeezed.

Phase four is optional. Card payments, cash and PayPal were built for the grocery system and the design carries straight over if the firm wants deposits.


What we need to know

These four answers change the build, so they are worth settling before phase three starts.

QuestionWhy it matters
Which Calendly plan the firm is onWebhooks are not on the free plan, and the webhook is what stops the office double booking
Deposit at booking, or invoice afterwardsDecides whether phase four is in this project or a later one
How emergency calls are handledWhether they jump the calendar or go straight to a phone number
How many people the calendar coversOne technician and several are different amounts of work

In short

Grocery, todayPlumbing, proposed
What a customer asks forA productA job doing
What the assistant matches against25,631 productsTens of services
What they chooseA quantityA time
What ends the conversationA deliveryA visit
Where it runsIts own serverIts own server, separately
What it sharesNothing at run time