The operating system for a 200-pool route business
A weekly pool-service company ran on a field app that could not answer the owners' real questions. I built the business system around it: routes, filters, jobs, quotes, a tech portal on the phone, and an assistant the owners can just ask.
- Headline figure
- 341 to 288 miles a week on the routes, from fixing the order of the stops alone
- Built with
- Next.js, React, MongoDB Atlas, Azure Blob
- Client
- Phoenix pool-service company, kept anonymous
A weekly pool route lives or dies on three things: how far the trucks drive between pools, whether filters and equipment get serviced on time, and whether the owners can see what each pool and each tech actually earns. The field-service app held the visits and the invoices. It could not answer any of those questions, and it has no public API.
Measured on the project. Nothing rounded up, nothing projected.
What I built
A full business system that sits next to the field-service app and makes its data useful:
- Route optimisation that re-orders each tech's stops (nearest neighbour, then 2-opt)
- Filter, algaecide and equipment schedules, so nothing due slips past a visit
- A tech portal on the phone, PIN-gated, where techs log jobs, filter cleans, photos and equipment checks
- Quotes, jobs, leads and revenue views the owners use every day
- A weekly refresh that pulls the field-service exports every Monday morning, checks them, loads them and texts the owners the numbers
- "Ask Jarvis", where an owner types a question about the business and gets an answer from the data in about a minute. It reads only: it never texts a customer, sends an invoice or changes a record.
Mockups with sample data. The way the system works is real.
- Sample data
01 / 03The owners see accounts, stops and revenue in one place, refreshed every Monday. Sample data.
- Sample data
02 / 03Routes re-ordered so each truck drives the shortest loop through its pools. Sample data.
- Sample data
03 / 03Ask a question about the business and get the answer from the data. It reads only. Sample data.
What happened
Re-ordering the stops took the routes from 341 to 288 miles a week with no change to who serves which pool. The measured lesson: a full territory reshuffle did not pay at these volumes. Fixing the stop order did.
Recovering the old platform's exports added 10,564 invoices from 2016 to 2022, so years of customer history are provable instead of remembered. From that history the system built a call list of 147 former customers who had been with the company for two years or more, longest tenure first, ready for the owner to call.
Most route businesses already have the data. It is just locked inside an app that was built for scheduling, not for running the business.
Built with
- Next.js
- React
- MongoDB Atlas
- Azure Blob
- Field-service exports
- Route optimisation
- CRM SMS
- Vercel
The client is kept anonymous. Every number on this page was measured on the project. Photos are stock and screens are mockups with sample data.