# 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`
- seeded exercise templates and John's current five-day split:
  - Monday: Chest
  - Tuesday: Back
  - Wednesday: Arms
  - Thursday: Shoulders
  - Friday: Legs
- profile updates
- weight logging with BMI calculation
- imperial body measurements for waist, hips, chest, and neck
- exercise template creation/listing
- routine creation/listing on top of John's imported base split
- 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.
His current imported split is stored with a default prescription of `3` sets and `10` reps for each listed movement, while working weights remain `TBD` until he fills them in.

## 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
```
