One codebase, one rule engine

  • One Expo Router application serves iOS, Android and the web app.
  • All training logic lives in a platform-independent TypeScript package: domain types, the program builder, progression, validation and calculations. It has no dependency on React Native, the backend, billing or health platforms, so it is tested on its own.
  • The website’s plan generator and every example plan on this site are compiled from that same package at build time, and a test checks that the website and the app produce identical programs.

Deterministic plans

The builder fills each session with movement-pattern slots, such as a squat, a hinge, a push and a pull, and picks catalogue exercises that fit the equipment you selected. Two or three days give a full-body rotation; four days give an upper/lower split. Rules are versioned, and each plan records the version it came from.

Progression is double progression: when every set reaches the top of its rep range at the target reps in reserve, the next load step is suggested; missing the minimum twice near the target effort suggests a small step back. A reported pain or a poor readiness check-in pauses increases. Each target shows the reason it changed.

Programs are never silently overwritten

Changing a program creates a new immutable revision, so earlier versions, and the workouts they prescribed, stay restorable. Starting a different program files the old one with its history instead of deleting it.

Local first, sync optional

  • App state is stored on the device: SQLite on iOS and Android, browser storage on the web. Core training needs no account and works offline.
  • With an optional account, completed changes go through an idempotent outbox to a backend hosted in the EU, translated to explicit database payloads.
  • Progress photos never enter that path. They are kept in the app’s private storage on the phone (IndexedDB on the web) and are excluded from sync and from account exports.

Measurement with an allow-list

There are no ads and no advertising identifiers. In-app product statistics are off unless you opt in, and then only named events and fields on an explicit allow-list leave the device; notes, loads, measurements, health data and photos never do. This website measures visits without cookies and excludes query strings, so the plans you generate here are not sent to analytics.

AI that asks first

Optional CoachPlus sends the minimum context for one action to an authenticated backend function, which checks the subscription and allowance and validates the model’s structured output before the app shows it. A proposal that would change your program does nothing until you apply it, and applying it creates a new revision you can undo. The rule engine, not the AI, prescribes your training.

Limits, honestly

  • Android is available worldwide and the web app is free; the iPhone app is not yet public.
  • Independent review of the programs and exercise content by a qualified strength professional is still pending.
  • Browser storage can be cleared by the browser; export a backup if you train on the web.