- Merge opencode-serve into the web container via entrypoint script - Add /api/agent/* JSON endpoints for workouts, sets, checkins - Rewrite fitness-trainer.md to use API instead of markdown files - Pass recent workouts and check-ins as chat context to the coach - Show current training phase on dashboard - Clarify check-ins as morning check-ins (calories/steps = yesterday) - Add NixOS deployment section to README - Make all check-in fields explicitly optional in UI
53 lines
2.5 KiB
Markdown
53 lines
2.5 KiB
Markdown
# Fitness Web Agent Notes
|
|
|
|
## Project Overview
|
|
Multi-user fitness tracking web app with AI coaching.
|
|
Replaces the fitness-agent markdown-based training repo.
|
|
|
|
## Related Repo
|
|
- `~/git/fitness-agent` — Training markdown logs, agent config, historical data, Juggernaut cycles
|
|
- This repo (`fitness-web`) is the web app successor. When this is fully operational, the old repo can be archived.
|
|
|
|
## Architecture
|
|
- **FastAPI** — async Python web framework
|
|
- **Jinja2 + Pico.css** — server-rendered templates with minimal CSS framework (CDN)
|
|
- **SQLite + SQLAlchemy 2.0 async** — database with aiosqlite driver
|
|
- **opencode serve** — AI coach service (Big Pickle model, free). Runs alongside uvicorn in the same container, managed by a shell entrypoint.
|
|
|
|
## Key Files
|
|
- `app/main.py` — App factory, route registration, lifespan
|
|
- `app/config.py` — Environment-based configuration
|
|
- `app/auth.py` — Password hashing, session management, `get_current_user` dependency
|
|
- `app/models/` — SQLAlchemy ORM models
|
|
- `app/routers/` — Route handlers (one per feature)
|
|
- `app/routers/agent_api.py` — JSON API for the AI coach to create workouts/check-ins
|
|
- `scripts/schema.py` — DB initialization
|
|
- `scripts/seed.py` — Seed data (exercises, phases)
|
|
- `opencode/fitness-trainer.md` — Agent config for AI coach (copied from fitness-agent)
|
|
|
|
## Commands
|
|
```bash
|
|
uv sync # Install deps
|
|
uv run python scripts/schema.py # Create DB tables
|
|
uv run python scripts/seed.py # Seed initial data
|
|
uv run uvicorn app.main:app --reload # Dev server on :8000
|
|
```
|
|
|
|
## Key Decisions
|
|
- Session-based auth with DB-backed tokens (simple, no OAuth dependencies)
|
|
- SQLAlchemy async with aiosqlite (works well with FastAPI async handlers)
|
|
- SSE streaming for chat responses
|
|
- Pico.css from CDN (no build step)
|
|
- Chat messages stored in DB per session for history
|
|
- Docker Compose for deployment (opencode serve runs as background process in same container)
|
|
|
|
## Next Steps / TODOs
|
|
1. Seed exercises and phases (done via `python scripts/seed.py`)
|
|
2. Add exercise progress chart (matplotlib or chart.js)
|
|
3. Enable opencode serve integration (Dockerfile + entrypoint done, single-container approach)
|
|
4. Add agent API for DB writes (endpoints + agent config done)
|
|
5. Migrate existing markdown logs from fitness-agent repo into DB
|
|
6. Migrate Juggernaut training xlsx data into DB
|
|
7. Add calendar view for training history
|
|
8. Update `fitness-trainer.md` agent config to work with DB-backed context instead of markdown files (done)
|