POOL SERVICE OPERATIONS PLATFORM

One system to run a pool service business.

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.

  • 3 clients
  • 1 cloud API
  • Multi-tenant
  • Edge-native
WHO IT’S FOR

Built for everyone who touches a pool route.

PoolsRoute is multi-tenant software: each pool service company gets its own isolated workspace, with different tools for each kind of user inside it.

  • 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

  • Field technician

    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

  • Office / admin

    Keeps it organized

    Imports customers from a spreadsheet, maintains properties, pools, and recurring service plans, and reviews reports and the notification log.

    Web dashboard

  • Platform operator

    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

  • The homeowner

    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

WHAT IT DOES

The whole workflow, end to end.

Everything a pool service company does in a week, from planning the routes to proving the work got done.

Route planning & optimization

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.

Work orders & photo proof

Each visit is a work order that moves planned → in progress → completed (or skipped). Techs attach before/after photos stored securely in the cloud.

Water chemistry

Capture pH, free & total chlorine, alkalinity, cyanuric acid, and salt against each pool’s target ranges, so every visit has a documented reading.

Customer CRM

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.

Notifications

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.

Reporting

Revenue, top customers, technician productivity, and visit counts — computed from the work that actually happened, filterable by date range.

On the roadmap

Invoicing & online payments · Customer self-service portal · Offline-first sync for the field apps

HOW IT’S BUILT

Three clients, one cloud backend.

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.

Three clients — a web dashboard, an iOS app, and an Android app — all send authenticated requests to a single Cloudflare Workers API. That API is the only component that reads and writes the D1 database, R2 photo storage, the email and push queue, and the nightly cron.

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/db

The database schema and typed query layer, shared by the API.

packages/shared

Request/response types validated at the API boundary and reused by every client.

One API, no servers

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.

Work happens off the request

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.

Typed end to end

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.

USE CASES

How it works in practice.

Four end-to-end flows that show how the pieces fit together day to day.

Owner · web

Plan the week

  1. 1Open the map and see every customer property as a pin.
  2. 2Click stops to build a route, then optimize to minimize drive time.
  3. 3Assign a technician and publish — the route becomes dated work orders.

Technician · mobile

Run the route

  1. 1See today’s stops in order and tap Navigate to open Apple or Google Maps.
  2. 2At each pool, log chemistry readings and snap before/after photos.
  3. 3Tap Complete — the owner is notified and the customer gets a service email.

System · automatic

Recurring service

  1. 1Each pool has a service plan: weekly, biweekly, or monthly.
  2. 2A nightly job reads the plans and generates the upcoming work orders.
  3. 3Routes fill themselves — no one re-enters the same visit every week.

Operator · super-admin

Onboard & support a company

  1. 1Create a new tenant; the owner gets a magic link to set their password.
  2. 2If they need help, impersonate their workspace in a time-limited session.
  3. 3Every action is written to an audit log; suspend a tenant to cut access instantly.
DATA FLOW

The life of a work order.

Follow a single pool visit from a recurring plan all the way to a notified customer.

  1. 1Service plan

    A recurring schedule for one pool.

  2. 2Work order

    The nightly cron materializes the visit onto a route.

  3. 3Serviced

    The tech records readings and uploads photos to R2.

  4. 4Queued

    Completion hands email + push to the queue.

  5. 5Delivered

    Customer email, owner push, and a logged record.

THE STACK

What it’s made of.

Chosen to run lean: edge-native, no servers to babysit, native where it counts.

Backend

  • Cloudflare Workers
  • Hono
  • Drizzle ORM
  • D1 (SQLite)
  • R2
  • Queues
  • Cron

Web

  • Next.js 16
  • React 19
  • Tailwind CSS 4
  • TypeScript

Mobile

  • SwiftUI (iOS)
  • Kotlin + Compose (Android)
  • MapKit
  • Google Maps

Services

  • Resend (email)
  • APNs + FCM (push)
  • MapKit JS (web maps)
TRUST

Security & multi-tenancy.

Each company’s data is walled off, and access is built to be auditable and revocable.

Tenant isolation

Every record is tagged to its company and queries are scoped to it, so one tenant can never see another’s data.

Token sessions

Users authenticate to a session token sent with each request; passwords are hashed and set via single-use magic links.

Audited impersonation

Support access is time-limited and every operator action — and every write while impersonating — is recorded.

Instant suspension

Suspending a company is a kill-switch checked on every request, including active and impersonated sessions.