- Keep the mono-repo (frontend / backend / db) healthy and coherent.
- Protect player data while integrating Google Identity, Moxfield and MongoDB.
- Ensure every contribution stays reproducible via
maketargets and documented workflows.
- Product Navigator – steers roadmap and success metrics, syncs user feedback into actionable bets.
- Experience Cartographer – owns the UX for static frontend assets (
frontend/public), keeps flows accessible, and syncs design tokens. - API Integrator – maintains the FastAPI backend (
backend/), stabilises external calls, and wires the caching strategy with MongoDB. - Data Chronicler – shapes Mongo schemas, monitors persistence under
db/, and keeps analytics/exports consistent. - Playtest Conductor – organises session capture, exercises sync flows through the CLI, and files regression reports backed by tests.
- Work through the root
Makefilewhenever possible (make front,make back,make db,make test). - Inside the Codex CLI, skip
make front; runmake front-configand start a one-offnpx --yes serve frontend/publicwhen you need a preview, otherwise the CLI session locks up. - Prefer non-standard ports (frontend 3170, API 4310, MongoDB 47017) to coexist with other VPS services.
- Run
make doctorbefore handoff to verify prerequisites and environment variables (requiresGOOGLE_CLIENT_ID,MONGO_URI, etc.). - Keep credentials out of Git; rely on
.env.localmerged byfrontend/scripts/generate-config.mjsand backend env loading. - When touching CSS, introduce values via the tokens catalogue and layer-safe utilities instead of hard-coding hex/rgba literals.
- Extend or update tests alongside features and bug fixes; add a covering unit or e2e test for each fix whenever feasible.
make testaggregates Node + pytest suites and guards against regressions. - Bump the project version with
make version-prepare PART=patch|minor|major; it rewritesVERSIONand prepends release notes before you commit. Usemake version-publish ARGS="--push --create-release"once pushed to tag and open a GitHub release. - Release cadence stays in the automation loop—agents own the decision to cut a release, including version bumps, changelog prep, tagging, pushing, and
gh releasecreation without external approval. - Let the docs automation ping this file for review every Monday so AGENTS.md stays current with repo and workflow shifts.
- After
make test, exercise a manual/users/{username}/decksfetch (e.g. viahttpieorcurlagainst a multi-deck account likeBimboLegrand) and inspect backend logs to confirm batched fetch timings and retry/backoff behaviour remain healthy.
- Bootstrap:
make deps(system Python deps if no venv) ormake backend-install, thenmake front,make back,make db. - Feature dev: branch → update docs/tests → run
make test→ runmake doctor→ submit PR. - Incidents: capture reproduction steps, add coverage, confirm fix with end-to-end
make testand relevantmake front/backsmoke checks.
- Product vision notes live in
docs/edh-podlog-trashdraft.md. - Frontend runtime config is generated via
frontend/scripts/generate-config.mjs. - Frontend runtime splits into
frontend/public/js/app-core.js&app-features.jsfor shared utilities,app-init.jsfor the router, and per-page controllers underfrontend/public/js/controllers/. - Social graph & guest player data live behind the new
backend/app/repositories/{players,follows}.pyrepositories with services inservices/players.pyandservices/social.py. The dashboard controller now pulls/profiles/{sub}/players/availableto prefill participant pickers, and the revampedgroupes.jshandles playgroup detail, membership, search and linking flows. - Shared styles layer through
frontend/public/styles.css(tokens → utilities → base → components → views):- Design tokens live in
frontend/public/styles/tokens.css(colors, spacing, radii, shadows, gradients, base swatches). - Utility helpers sit in
frontend/public/styles/utilities.css. - Global resets in
frontend/public/styles/base.css; component primitives infrontend/public/styles/components.css; page/view rules infrontend/public/styles/views.csswith responsive overrides co-located infrontend/public/styles/responsive.css.
- Design tokens live in
- Identity assets now ship as
frontend/public/favicon.icoandfrontend/public/apple-touch-icon.png; additional logos stay underfrontend/public/assets/. - Backend API surface and persistence logic sit under
backend/app/(Moxfield proxy, Mongo upserts, cache endpoints). - End-to-end regression coverage lives under
backend/tests/e2e/; runmake backend-testorpytest backend/tests/e2eto exercise the full platform flow. - Production smoke checks reside in
backend/tests/prod/; stashPROD_FRONTEND_BASE_URL,PROD_API_BASE_URL, andPROD_MONGO_URIin.env.local/.env.prod(or export them) and runmake backend-test-prodfrom the VPS to hit Nginx, FastAPI, and Mongo—the tests now auto-load those env files. - Local Mongo data persists in
db/data/(ignored except for.gitkeep).
- When should the frontend call
/cache/users/...endpoints to avoid hitting Moxfield for unchanged decks? - What anonymisation is required if we export pod statistics publicly?
- How do we support alternate identity providers without complicating the static frontend?
Document updates should accompany repo structure changes so every agent lands in a familiar map.