Features
Everything below is in the product now
No roadmap slides — just what the app does.
Water quality, on gauges
“Which site is out of spec right now?” shouldn’t require a phone call and a drive.
- Per-pool chemical setup. Each pool carries its own chemicals with min/max target ranges — the spa’s pH targets can differ from the lap pool’s. Every gauge tile prints its range: TARGET 7.2-7.8.
- Industry-standard presets, one tap. Template chips prefill each chemical’s target range, testing cadence, and closure thresholds with the Model Aquatic Health Code’s model values, keyed to pool, spa, or therapy use — model values, your local code governs, and everything stays editable.
- Status you can read across the deck. A gauge per chemical — green band, needle red when out of range — plus a pill: In range / Below / Above / No reading, and the time of the last test.
- Corrective hints where they’re needed. Managers write a “suggested action when below/above range” once per chemical, and it appears automatically under out-of-range gauges and on every flagged value. The fix travels with the number.
- Logging built for wet hands. A quick-log sheet slides up from any pool card: one input per chemical, placeholder showing “Last: 7.4,” one submit for the whole test pass. Blank fields are skipped, so a partial test saves exactly what was measured.
- One row per test pass, not per number. Readings taken within 15 minutes group into a single session across the dashboard, weekly chart, and history grid.
- Every pool on one screen. An all-pools snapshot shows every property’s latest readings and their gauge status at a glance — the drive-by check, without the drive.
When a number goes wrong
Most days the gauges sit green. The app earns its keep on the other days.
Thresholds that say Close pool
Give a chemical closure limits alongside its target range. A reading past one outranks the ordinary flag: the gauge goes dark red — Close pool — its dashboard tile turns the same dark red, and the warning flashes the moment the number is logged. Loud, never blocking: your crew stays in charge.
A guided contamination response
For the fecal, vomit, and blood events every operator dreads: report it once and the app walks the code’s response — a preparation checklist and, where disinfection is required, a computed disinfection target and hold time, a timer you start only once the target is confirmed by test, readings during closure, then reopen. Every step on the record.
Testing overdue, at a glance
Each chemical can carry a testing cadence — daily, weekly, whatever your standard is. When the newest reading is older than that, an amber Testing overdue pill shows on the gauge. Informational, like every alert here: it flags, it doesn’t block.
Model guidance, your judgment
Closure thresholds and testing cadences start from the Model Aquatic Health Code’s model values, and both stay fully editable. The contamination response follows the code’s model steps as on-screen guidance — it computes and flags, never enforces — because your local code and your own judgment govern the deck.
The daily checklist, off the clipboard
The pre-opening walk lives in a binder in the pump room. Nobody can read it from the truck.
- A day sheet with a name behind every tick. Managers define the items — numeric checks that validate what’s typed, or one-tap checkboxes — each with its own times per day. Every entry stamps who and when, and past days stay on file as read-only history.
- A credible checklist in one click. The MAHC pre-opening inspection pack installs a ready-made item set — model values, your local code governs — deduped so re-installing never duplicates, and editable like anything you’d add by hand.
- Mis-clicks undo, records stay. The recorder can undo their own entry for 15 minutes; after that, removing anyone’s entry takes its own permission. A notes block per day catches what checkboxes can’t.
- Supply counts in the same place. Inventory sheets digitize the storeroom checklist — item rows, dated counts, and a warning the moment a count dips below the minimum you set.
Your paper log sheet, digitized
Years of paper sheets you can’t throw away and can’t search. Keep the format the inspector already knows — change where it lives.
The grid looks like the wall chart
Reading history renders as a paper-style grid — fixed chemical columns, one row per test pass with date, time, pool, initials, added chemicals, and comments.
Scheduling that fills itself
You rebuild the same schedule in a spreadsheet every month — and it still comes back wrong.
- Shifts are staffing slots. Date, time, required headcount — 9 guards on a Saturday — the areas it covers, required certifications, and which roles may take it. Slots short of headcount flag understaffed everywhere they render.
-
A month of shifts in one paste. Paste a plain-text weekly
pattern —
sat 0800-1200x9, 12-5x6, 5-9— and the app generates the month, overlap-safe on re-runs, with the areas, certifications, and roles you tick applied to every shift, and a record of every run: who pasted what, when. - Roles gate pickup; managers keep the override. Mark a shift for chosen roles — instructors, not counter staff — and self-service pickup honors it. Staff outside those roles can’t take it themselves, but they stay in the assign list, labeled, for the day you need them anyway.
- Duplicate a good week. Copy this week’s shifts — guards included, if you want — across up to 12 future weeks at once. If a target week already has shifts, the copy refuses and names the busy week. No half-applied schedules.
- Self-service pickup with the checks built in. Future shifts only, certifications held, an eligible role held, no same-day overlap, room in the slot, and the weekly hour cap respected. If two guards tap the last seat, exactly one gets it. A manager toggle turns pickup off site-wide.
The 6 AM sick text, handled
A no-show shouldn’t route through your phone — and neither should every swap, preference, and hours question.
Cover requests, first-taker-wins
A guard flags a shift and stays assigned until a qualified teammate claims it in one tap. Open requests the viewer could actually take appear as the first card on their dashboard.
Availability shapes the assign dropdown
Unavailable staff drop out; ★ “wants this shift” pins to the top; standing time preferences rank next. Standing windows even wrap past midnight — 5 PM to 2 AM is understood correctly.
Hour caps with the exact numbers
Self-service pickup past the cap refuses outright and shows the math — “Taking this shift would put you at 44 hours for the week of Jul 05 (max 40). Ask a manager to assign you.” Managers get a deliberate allow-or-cancel confirmation instead. (Scheduled hours — this is not a timeclock.)
Certifications tracked, honestly scoped
Required certs gate self-service pickup. Certification presets carry standard renewal terms — CPR/AED yearly, lifeguard every two years — so an expiration date fills itself from the start date, and managers can opt in to a monthly email summarizing certs expired or expiring soon. Expiration dates are informational — they flag, they don’t block.
Tasks that follow the shift
“Did last shift actually do the backwash?” should be a lookup, not an interrogation.
- Recurrence that matches real routines. Day of week, day of month, or one month of the year — the annual drain-and-inspect finally has a home — pinned to your shift buckets — Open, Day, Close, or your own — and optionally tied to an area. “Backwash filters, every Monday at Close” reaches the closer automatically.
- A maintenance schedule in one click. The MAHC recurring maintenance pack installs a standard preventive-maintenance set — model values, your local code governs — skipping what you already have, every task editable afterward. A starting point instead of a blank page.
- Scoped by role. Tasks carry roles, so lifeguards see guard tasks and techs see tech tasks — on the dashboard, on the pool pages, everywhere tasks render.
- A completion is a record. Who, when, which shift, with notes. Duplicate taps inside the cooldown window merge instead of double-logging, and unchecking someone else’s work is a separate supervisor permission.
- Today at a glance. The dashboard shows today’s task rows with live percent-complete per bucket.
Who did what, on the record
“Who changed that chlorine number?” has one answer here, and it’s written down.
A field-by-field change history
Readings, shifts, tasks, users, and settings are audited — old value, new value, actor, timestamp, and network address — with a filterable in-app viewer for managers.
Deletes are on the record
Deleting anything takes its own specific permission, so staff can only remove what their role allows — and the audit log records who deleted what, when, and from where.
Staff retire, never delete
There isn’t even a delete button for users, deliberately. A retired guard can’t log in and drops out of assignment dropdowns, but every reading and check-off keeps their name.
Permissions that mean something
Every action checks its own specific permission — editing a reading, unchecking someone’s task, viewing the hours report — and the role editor only offers permissions the software actually enforces.
Passwords stay private
New staff get a welcome email with a set-password link — managers never see or distribute passwords. Logins are rate-limited per account and per address.
The records, in one grid
The all-readings grid below is the inspector view: every test pass, attributed and timestamped, searchable instead of boxed in a storeroom.
No install. No training day.
Your office is a truck, a pump room, and a pool deck. The software should meet you there.
Any phone, no install
Mobile-first, and it runs in the browser your crew already has, over HTTPS. No app store, no version skew — a seasonal seventeen-year-old can log a reading and take a shift on day one.
Built for multiple sites
Locations hold pools and areas; timezones resolve per pool, then per site. Run separate schedules per site or per crew — double-booking checks and hour caps still hold across all of them, because one human can’t be in two places.
Built to stay up
Every major surface has an independent kill switch, so a problem in one area can be turned off without touching data or the rest of the site. Developed test-first, deliberately.
The feedback form is in the nav
Bug reports and feature requests go straight to the builders from inside the product — beta partners steer what ships next.
Set up in an afternoon
A guided setup walks a new site through locations, pools and chemicals, roles, and staff — with role templates and chemical presets doing most of the typing. Finish it and the guide stays a click away in Site Settings.
Your records leave with you
A manager can download the site’s records — readings, tasks, checklists, inventory, schedules, staff — as JSON or CSV from Site Settings, anytime. (Chart photos and the audit log are handed over on request.) Your data is not a hostage.
See it on your own pools
We’re onboarding a small group of commercial pool operators and aquatics departments. Guards on. Water right.