← Back to projects
Case study · Full-stack product

CoachOS

One place for personal trainers to run their business, and for their clients to train, log and see progress.

Type
Personal project
My role
Product design & full-stack development
Platforms
iOS · Android · Web
CoachOS trainer dashboard: KPIs, clients that need attention and the daily plan
Trainer dashboard: KPIs, clients that need attention and a prioritised plan for the day.

The problem

Personal trainers usually juggle spreadsheets for programs, chat apps for check-ins and notes for everything else. Clients lose track of their plan, trainers only notice someone is drifting when they have already stopped coming, and progress is hard to show.

CoachOS puts programming, logging, communication and progress in one product, and turns the data into actions: who needs a message today, which block is about to end, who just hit a personal record.

What it does

Trainer

  • Dashboard with KPIs, a daily plan and signals that need action
  • Client list and full client file: programs, workouts, check-ins, habits, photos
  • Program builder with reusable templates and splits
  • Session calendar and messaging

Client

  • Today’s workout with a live session logger (sets, reps, weight, RPE)
  • Suggested next load, plates-per-side calculator and rest timer
  • Progress: bodyweight, e1RM records, strength rating and training history
  • Weekly check-in to the coach, habits and ranked leagues

Admin

  • Overview of the platform
  • Trainer and user management

Engineering highlights

The logic that makes the product useful lives in small, deterministic modules on the API, not in the screens.

Adherence & risk engine

A pure scoring function turns recent activity (days since the last workout, sessions this week, whether there is an active program) into a risk level with human-readable reasons. It was extracted from an inline route into a shared module so the dashboard, notifications and the per-client endpoint all use the same logic.

Strength rating

Estimates a one-rep max (Epley) from each logged set, divides it by bodyweight and scores every muscle group from 0 to 100 against sex-specific standards. Compound groups weigh more in the overall rating, and lagging muscles are flagged. Deterministic, no external AI cost.

Ranked progress leagues

Strength, mass and definition each map a 0–100 score to a competitive-game style rank, from Iron to Challenger, with divisions and league points, so progress feels like levelling up.

Exercise recommender

Maps a client’s free-text goal to an intent (strength, hypertrophy, fat loss, endurance), picks a sets/reps/RPE scheme and scores the exercise library by muscle emphasis with a bias to compound lifts.

Architecture

App
React Native · Expo Router · one codebase for iOS, Android and web
UI
Custom design system, dark and light themes, liquid-glass surfaces with Three.js on web
API
Node.js · Express · TypeScript · Zod validation · JWT auth · bcrypt · rate limiting
Data
Prisma ORM · PostgreSQL · 21 models, from programs and workout logs to check-ins and messages
Media
Cloudinary for progress photos and videos
Ops
Docker image, Railway / Render configs for the API, Netlify for the web app, migration script from the SQLite prototype
CoachOS dashboard in the light theme
The same dashboard in the light theme. Every surface is built on shared design tokens.

What’s next

  • Payments and invoicing with Stripe
  • Clients booking and cancelling sessions themselves
  • Turning the rule-based daily plan into an AI copilot on top of the same signals