# Doris Barbell Private-first exercise tracking app for John, with a clean path to add Manndra later. ## Purpose Doris Barbell gives John one place to track: - workout sessions - structured exercise templates and routines - sets with reps, weight, notes, rest, and RPE - body weight and BMI over time - broader body metrics in imperial units - progress trends and simple PR tracking ## Runtime shape - **Repo source:** `home/doris-barbell` - **Expected live PD runtime:** `/mnt/docker-ssd/docker/compose/doris-barbell` - **Expected first exposure:** private-first on PD, with public routing optional later - **Published app port:** `8093` Do not run production from an agent workspace. ## V1 defaults in flight Unless John overrides them later, V1 is being built with these defaults: - mobile-friendly but usable on desktop - private-first deployment on PD - John is the active user - Manndra is stubbed as a second household member for future expansion - JSON-backed state first for speed of delivery - imperial measurement system only - no progress photos - no muscle-size tracking focus - structured workout logging first, richer planning/reporting layered in after ## Current scaffold The current scaffold already supports: - seeded users for `john` and stub `manndra` - profile updates - weight logging with BMI calculation - imperial body measurements for waist, hips, chest, and neck - exercise template creation/listing - routine creation/listing, even before the final real workout split is known - structured workout logging with nested exercises and sets - history endpoints for weight, measurements, and workouts - exercise progression summaries with max weight and estimated 1RM per exercise - mobile-friendly homepage with HTML forms for: - weight logging - body-measurement logging - exercise template creation - routine draft creation - quick workout logging - basic dashboard summary plus John-facing history snapshots John is currently seeded at a default height assumption of `68.5` inches until he says otherwise. ## Current API surface - `GET /api/health` - `GET /api/dashboard/summary` - `PUT /api/profile/{user_id}` - `POST /api/profile/{user_id}/weight` - `GET /api/history/{user_id}/weights` - `POST /api/profile/{user_id}/measurements` - `GET /api/history/{user_id}/measurements` - `POST /api/exercises/templates` - `GET /api/exercises/templates` - `POST /api/routines` - `GET /api/routines` - `POST /api/workouts` - `GET /api/history/{user_id}/workouts` - `GET /api/progression/{user_id}/exercises` - `POST /log/weight` - `POST /log/measurements` - `POST /templates` - `POST /routines` - `POST /workouts/quick-log` ## Local run ```bash cd /home/fizzlepoof/repos/truenas-stacks/home/doris-barbell python3 -m venv .venv . .venv/bin/activate pip install -r requirements.txt uvicorn app.main:app --reload --port 8093 ``` Or: ```bash cd /home/fizzlepoof/repos/truenas-stacks/home/doris-barbell bin/run-local.sh ``` ## Verification targets ```bash curl -fsS http://127.0.0.1:8093/api/health curl -fsS http://127.0.0.1:8093/api/dashboard/summary ```