Sector
Home services / field operations
Region
United States
Engagement
Dedicated product team
Our role
Frontend, backend and payments integration
ReactJSNode.jsMongoDBStripe

The situation

The Provider sends contractors to customers' homes to do scheduled work. The business had grown to the point where the coordination was the bottleneck rather than the work itself.

Jobs were booked over the phone, written into a spreadsheet, and assigned to contractors by a dispatcher who held most of the schedule in their head. It is worth being clear that this was not incompetence — it is how almost every service business starts, and it works fine until it very suddenly does not.

The problem

Three things broke at once as volume grew.

Customers could not book without talking to someone, which capped bookings at office hours and at the number of people answering phones. Once booked, they had no idea when anyone would actually turn up, so they called to ask — which consumed the same dispatcher who was trying to run the schedule.

Contractors got their day verbally or by text, so a change to the schedule had to be re-communicated by hand to everyone it touched. Double-booked contractors were a regular occurrence, and the only defence was the dispatcher noticing.

Payment was collected in the field, which meant reconciling what was charged against what was scheduled was a manual exercise done after the fact, on trust.

What we built

The team built a booking and dispatch platform in ReactJS and Node.js, with the schedule — not the spreadsheet — as the thing everything else derives from.

  • Customer-facing booking with dynamic pricing, so the quoted price reflects the job type, its expected duration and the travel involved rather than a flat rate
  • A contractor scheduling dashboard showing each contractor their assigned work, with the schedule as one shared, conflict-aware source rather than a series of text messages
  • Real-time GPS job tracking, so a customer can see that someone is on the way instead of ringing to ask
  • Stripe payment integration, moving collection into the same system that holds the booking, so charges and jobs reconcile themselves

Where it landed

The most valuable change was not any single feature — it was that the dispatcher stopped being a switchboard. Bookings arrive without a phone call, schedule changes propagate on their own, and the "where is my technician" question is answered by the product rather than by a person.

Payment reconciliation stopped being a separate after-the-fact task, because the charge and the job are now the same record. And because customers can book outside office hours, the business is no longer only able to take work while someone is at a desk.

Client identity withheld by agreement. This account describes our own engineering work and deliberately omits any detail that could identify the client, including their name, brands, location and commercial figures.