Trades 8 weeks Perth, WA

Job Management Platform for a Pool Maintenance Business

A pool service business owner built a job management app in AppSheet to manage chemical readings, service routes and client history. We moved it off Google Sheets, added multi-tenancy and Stripe billing, and launched it as a commercial platform for pool and spa maintenance businesses.

Low Code App UpgradeCustom Software Development
14 Service businesses
$5,600/mo Recurring revenue
8 weeks To commercial launch
Pool technician using a mobile device to record chemical readings during a service visit
Perth Based. Australia Wide.
18+ Years in Custom Software
Fixed-Price Delivery
Full Code Ownership
Client Context

Pool and spa maintenance business: 8 technicians, 320 residential and commercial clients

A Perth pool maintenance company that had been operating for nine years. The owner managed everything from job scheduling to chemical supply ordering. For most of that time, routes were planned in a spreadsheet and service notes were kept in a combination of paper job cards and a basic notes app.

After spending three months learning AppSheet, they built a job management app that ran their entire operation. Technicians arrived at a site, opened the app, pulled up the client history, recorded that day's chemical readings (pH, chlorine, alkalinity, salt levels), took photos of any issues, and marked the job complete. The owner saw live progress from the office. Invoices went to Xero manually at the end of each day.

The Challenge

What needed to change

When three other pool businesses in their network asked to use the app, the structural problem was immediate. All client data, all service history, all chemical readings were in a single Google Sheet. There was no concept of one business seeing only their own data. Sharing the app meant sharing the spreadsheet — and sharing the spreadsheet meant every business could see every other business's client list and service records.

AppSheet's pricing is per user. For their own team of eight, it was fine. Scaling to ten businesses each with five technicians meant fifty-plus users. The monthly cost would have exceeded what any of the interested businesses would pay for a specialised tool. And Google Sheets begins to slow noticeably once a single sheet accumulates a year's worth of chemical readings across hundreds of clients.

The Xero integration was entirely manual. At the end of each day, the owner exported the completed jobs from the app and re-entered them into Xero. For one business, it was thirty minutes a day. For ten businesses, it became someone else's problem — and that person did not exist yet.

The Solution

What we built

A commercial pool service job management platform rebuilt with business-level data isolation, offline-capable mobile app for technicians, automated Xero invoicing, and Stripe subscription billing.

Commercial Readiness Review

Reviewed the AppSheet app and Google Sheets data structure. Preserved the core job workflow, chemical reading model (pH, chlorine, alkalinity, salt, TDS, calcium hardness, cyanuric acid), and client history structure. Identified the data architecture changes required for multi-tenancy and the Xero integration path.

Replatform from AppSheet

Rebuilt the technician-facing app as a progressive web app using Next.js with an offline-first architecture. Technicians can complete jobs without mobile coverage and sync when connectivity returns. The interface matches the original AppSheet flow closely to minimise retraining.

Business-Level Data Isolation

Each subscribing business has its own isolated environment: clients, technicians, service routes, chemical reading history, job records, photos, notes and invoices. No data is accessible across businesses. Each business manages their own technician accounts, client list, and pricing rules.

Chemical Reading Tracking

Full chemical reading history per pool, with out-of-range alerts flagged automatically against configurable safe ranges. Trend charts show how readings have moved over time. Technicians can add photos and notes to any reading. Service recommendation prompts appear when values fall outside target range.

Xero Integration

Completed jobs automatically generate Xero invoices based on each business's configured service rates and client billing settings. Draft invoice review before sending, or full automation for standard service visits. Job history and invoice status visible in the same interface.

Stripe Billing

Monthly subscription plans tiered by number of active clients and technician seats. 14-day free trial, automatic conversion, failed payment handling, GST-inclusive invoices and upgrade logic. New businesses can sign up and run their first job without any contact with the owner.

Built with:
Next.jsTypeScriptNode.jsPostgreSQLAWSStripeXero APIPWAOffline-First SQLite
In Practice

How it works

1

Technician opens the day's job list

On their phone or tablet, they see their assigned route for the day: client name, address, last service date, any notes from previous visits, and whether the pool is flagged for any recurring issue.

2

Arrives on site and records chemical readings

pH, free chlorine, total chlorine, alkalinity, stabiliser, salt and calcium hardness. The app highlights any reading outside the target range for that pool's configuration. Dosage calculator shows recommended chemical additions.

3

Completes service tasks and photos

Marks off completed tasks (basket clean, filter check, backwash, pump inspection) and adds photos of any issues. Notes saved to the client's permanent record.

4

Job marked complete, invoice triggered

When the technician marks the job complete, a Xero draft invoice is created automatically based on the service performed. Business owner reviews and approves from the office, or the system sends it directly for standard visits.

5

Owner monitors progress in real time

Dashboard shows completed vs outstanding jobs for the day, any out-of-range chemical readings flagged for attention, overdue follow-up items, and monthly service completion statistics per technician.

Results

Measurable outcomes

14 Pool service businesses on the platform at month five
$5,600/mo Monthly recurring revenue
8 weeks From review to commercial launch
30 min/day Eliminated from manual Xero entry per business
100% Offline capability for technicians in low-coverage areas
3 Existing informal clients converted to paid plans at launch

Three other pool companies in my network had asked to use the app. I thought it would be simple to share. It was not, until HELLO PEOPLE rebuilt it properly. Eight weeks later it was a real product. I now spend Friday afternoons on the admin instead of the whole week. The Xero connection alone saves me an hour a day.

Owner Pool and Spa Maintenance, Perth
Delivery

How we delivered it

1

Review and Roadmap

1 week

Reviewed the AppSheet app, Google Sheets schema, and Xero manual process. Confirmed what to preserve and scoped the replatform, multi-tenancy, Xero integration and billing as fixed-price stages.

2

Replatform and Data Architecture

3 weeks

Built the Next.js PWA with offline-first architecture and PostgreSQL database with business-level data isolation. Preserved the job workflow and chemical reading model from the original AppSheet app.

3

Xero Integration

2 weeks

Built the automated invoice generation pipeline from completed jobs to Xero draft invoices. Configurable per business: service item codes, client billing references, GST settings and auto-send rules.

4

Billing and Launch

2 weeks

Integrated Stripe with trial activation, plan tiers by client and technician count, failed payment handling and GST invoicing. Migrated three existing informal clients to paid accounts. Launched to new subscribers.

Similar Project?

Want something similar for your business?

Tell us about your industry, your workflows, and what you want to achieve. We will scope it, quote it fixed-price, and build it.

Tell Us About Your Project

What industry are you in? What systems do you use? What is the biggest operational problem you want solved? We will come back with a plan and fixed-price quote.

Prefer a quick chat? Call 0425 531 127 – we're Perth-based and we answer the phone.