Case Study 01 · Side Project
PoolPilot
A self-hosted smart controller for a "dumb" pool pump — reverse-engineered RS-485 protocol, hand-wired ESP32 bridge hardware, and a real-time mobile app with scheduling and energy analytics. Designed, engineered, and shipped end-to-end. It runs the family pool every day.
Overview
A variable-speed pump with no app, no remote, no API
The Pentair SuperFlo VST is a great variable-speed pool pump with one catch — it's the budget model. No app, no WiFi, no integration story. Control means walking to the equipment pad and pressing buttons on a tiny keypad. Even Pentair's own smart accessories can't drive it over its comm port.
The open-source alternative technically worked, but its dashboard felt like an industrial control panel from 2012 — and it couldn't actually command this pump. Pool software is a category where nobody has cared about design. That was the opportunity: build the thing I wished existed — consumer-product polish, real scheduling, energy analytics — on top of hardware I'd have to crack open myself.
Challenge
First, make the pump talk
The pump's RS-485 protocol is proprietary and undocumented for this model. Getting two-way communication meant building the physical layer from scratch: a $20 aftermarket cable into the pump's comm port, an ESP32 microcontroller acting as a transparent WiFi-to-RS-485 bridge, and a lot of nights at the equipment pad with a logic probe mentality — sending candidate command frames and listening for anything to come back.
The bus stayed silent for days. The breakthrough was hardware, not software: the "auto-direction" RS-485 module everyone recommends never actually drove the transmit line. Swapping it for a MAX485 transceiver with an explicit flow-control pin — wired to a GPIO the firmware toggles around each write — brought the bus to life. The pump answered with its first status frame: 135 watts, 1,500 RPM. From there I decoded the frame format, mapped the command registers, and wrote a full protocol reference — then ported it all into a typed, unit-tested TypeScript codec.
The Hardware / ESP32 RS-485 Bridge / Wiring

Process
Pad to product
The build was AI-augmented throughout — Claude Code as the engineering pair, me directing architecture, design, and every hardware session at the pad. Once the pump obeyed its first speed command, the entire application — protocol codec, API service, database, and the full UI — was designed, built, and deployed to my home server the same day.
Design Decisions
A deep-water instrument panel
Pool equipment lives in utility-software land — gray tables, tiny buttons, desktop layouts. PoolPilot went the other way: a dark, glowing, thumb-first instrument panel that feels closer to a premium EV dashboard than a sprinkler timer.
The Product / Production UI / iPhone




The Stack
Hardware to pixels, all of it mine
Outcome
The daily driver for an actual pool
PoolPilot has run our pool since the day it shipped — schedules executing on time, energy history accumulating, and pump control from anywhere on a phone. It replaced both the keypad ritual and the open-source dashboard, and it's the proof point I care most about as a designer: I can take a product from "the hardware won't even talk" to a polished, live, self-hosted app people actually use.