Files
workout_watcher/AGENTS.md
T

2.3 KiB

Agent Notes

Repo Shape

  • Monorepo split: frontend/ is the React/Vite app; services/bff/ owns auth, users, media upload, and frontend-facing API; services/logic/ owns catalog, workouts, analytics, builtin seed data, and internal APIs.
  • Python services are a uv workspace rooted at services/; use the shared services/.venv, not per-service virtualenvs.
  • Keep dev tools (ruff, ty, pytest) in the services workspace dev group only. Docker runtime images must not run uv run or install dev tools.

Commands

  • Python setup: cd services && uv sync --all-packages.
  • Python lint: cd services && uv run ruff check bff logic.
  • Import-check services with the shared venv from each service dir, e.g. services/.venv/bin/python -c "from app.main import app; print(app.title)" with cwd services/bff or services/logic.
  • Frontend uses pnpm 10.12.1; if pnpm is unavailable, use npx pnpm@10.12.1 ....
  • Frontend checks from repo root: npx pnpm@10.12.1 --filter train-watcher-frontend lint, typecheck, and build.
  • Full local stack: docker compose -f infra/docker-compose.yml up --build.

Docker And Infra Gotchas

  • Compose intentionally uses host.docker.internal for BFF/logic/Postgres/MinIO/frontend proxy paths; do not casually switch these back to service DNS names without testing Docker DNS on this machine.
  • Backend Docker build context is services/, with bff/Dockerfile and logic/Dockerfile; both install runtime deps from services/uv.lock and start /app/.venv/bin/uvicorn directly.
  • services/.dockerignore excludes .venv, .ruff_cache, .pytest_cache, .ty, and __pycache__; do not delete these local artifacts just to clean Docker contexts.
  • MinIO uses the named volume minio-object-data; the older minio-data name was abandoned after corrupted local state.
  • Frontend API base defaults to /api; frontend/nginx.conf proxies /api/ to the BFF port.

Backend Details

  • Both Python apps auto-create SQLAlchemy tables on startup via create_schema; Alembic migrations exist but are not run by Compose startup yet.
  • Logic internal endpoints require X-Service-Token and X-User-Id; BFF is responsible for supplying both.
  • BFF stores uploaded images in MinIO/S3 and passes image_s3_url plus image_s3_key to logic catalog records.