Owner / operator
Runs the business
Builds and optimizes routes, manages customers and pricing, and watches completion, revenue, and tech productivity from a single dashboard.
Web dashboard
PoolsRoute connects a web dashboard for the office and native apps for the field to a single cloud backend — so routes, work orders, water chemistry, photo proof, and customer updates all live in one place and stay in sync.
PoolsRoute is multi-tenant software: each pool service company gets its own isolated workspace, with different tools for each kind of user inside it.
Runs the business
Builds and optimizes routes, manages customers and pricing, and watches completion, revenue, and tech productivity from a single dashboard.
Web dashboard
Services the pools
Opens the day’s route on a map, drives turn-by-turn, records water-chemistry readings and photos at each stop, and marks visits complete.
iOS & Android apps
Keeps it organized
Imports customers from a spreadsheet, maintains properties, pools, and recurring service plans, and reviews reports and the notification log.
Web dashboard
Supports every tenant
A super-admin console to provision new companies, suspend accounts, and securely impersonate a tenant for support — with every action audited.
Super-admin console
Receives the service
Doesn’t log in — but gets a branded email and the owner gets a push notification each time a pool is serviced, with proof the visit happened.
Email & notifications
Everything a pool service company does in a week, from planning the routes to proving the work got done.
Build routes by clicking stops on a map, then auto-order them to cut drive time with a built-in nearest-neighbor + 2-opt solver. Publish to turn a route into the day’s work orders.
Each visit is a work order that moves planned → in progress → completed (or skipped). Techs attach before/after photos stored securely in the cloud.
Capture pH, free & total chlorine, alkalinity, cyanuric acid, and salt against each pool’s target ranges, so every visit has a documented reading.
Customers → properties → pools → service plans, all in one tree. Import an existing book of business from CSV and pick up where your old tool left off.
Completing a visit fires a branded customer email and an owner push notification automatically, with a full delivery log you can audit and re-send.
Revenue, top customers, technician productivity, and visit counts — computed from the work that actually happened, filterable by date range.
Invoicing & online payments · Customer self-service portal · Offline-first sync for the field apps
Every screen — the web dashboard, the iOS app, the Android app — talks to a single API running at the edge. That API owns all the business logic and is the only thing that touches the data.
Clients
Web dashboard
Next.js, static export
iOS app
SwiftUI
Android app
Kotlin · Compose
API
Cloudflare Workers · Hono router
All business logic · multi-tenant · the only writer of data
Data, storage & jobs
Database
D1 (SQLite) via Drizzle
Photo storage
R2 object storage
Queue
Emails & push, async
Cron
Nightly automation
packages/dbThe database schema and typed query layer, shared by the API.
packages/sharedRequest/response types validated at the API boundary and reused by every client.
The backend is a single Cloudflare Worker — code that runs at the edge with no machines to manage. It routes requests, runs the rules, and reads and writes the database.
Slow work — sending email, delivering push — is handed to a queue so the app responds instantly. A nightly cron turns recurring service plans into the next batch of work orders.
Shared packages mean the shape of the data is defined once and reused by the web app, both mobile apps, and the API — so a change is caught at compile time, not in production.
Four end-to-end flows that show how the pieces fit together day to day.
Owner · web
Technician · mobile
System · automatic
Operator · super-admin
Follow a single pool visit from a recurring plan all the way to a notified customer.
1Service plan
A recurring schedule for one pool.
2Work order
The nightly cron materializes the visit onto a route.
3Serviced
The tech records readings and uploads photos to R2.
4Queued
Completion hands email + push to the queue.
5Delivered
Customer email, owner push, and a logged record.
Chosen to run lean: edge-native, no servers to babysit, native where it counts.
Each company’s data is walled off, and access is built to be auditable and revocable.
Every record is tagged to its company and queries are scoped to it, so one tenant can never see another’s data.
Users authenticate to a session token sent with each request; passwords are hashed and set via single-use magic links.
Support access is time-limited and every operator action — and every write while impersonating — is recorded.
Suspending a company is a kill-switch checked on every request, including active and impersonated sessions.