TrainerPad: CRM for personal trainers
An app where a trainer manages clients, schedule, workouts and session packages. It works offline and syncs on its own. I built it alone, from idea to production.
Screenshots
A personal trainer usually keeps everything in notes and spreadsheets: who is booked when, what weights the client lifted last time, how many sessions are left in the package. TrainerPad puts all of that into one app on the phone. The trainer sees the day’s schedule and runs the workout right in the gym: sets, weights, a rest timer. The app fills in previous results and, once the session is done, charges it to the client’s balance.
Gyms often have poor signal, so the app works offline. Data lives in IndexedDB on the device, and a custom sync engine pushes changes to the server once the connection is back and resolves conflicts when the same record was edited on two devices. The case study below explains how it works.
I built it alone, from the idea and the interface to the server and deployment: React and Zustand on the frontend, Express, Prisma and PostgreSQL on the backend, automatic deploys to my own VPS. Over 670 commits and 47 releases, about 51,000 lines of code and 967 tests. The app installs on the phone’s home screen as a PWA, and since October 2026 it has a desktop layout too.








