Architecture & contributing
For people hacking the open-source gymkhana core — layout, ADRs, PR workflow, and domain boundaries. Gym operators should use product guides; integrators should use developer docs.
Repository layout
src/app/api/ → HTTP routes (thin; delegate to domains) src/domains/ → business logic handlers and adapters extensions/ → custom entities & custom analytics prisma/ → schema and migrations openapi/ → generated REST spec
Member photos: src/lib/member-avatar.ts, routes under /api/members/photo.
Architecture decision records
ADR-001
Modular monolith first
Thin API routes, business logic in src/domains/, single Postgres until scale demands split.
ADR-002
API auth classes
Every route classified in api-auth-classes.ts — session, cron, agent, public preview.
ADR-003
Mandatory gymId
All tenant queries filter by gymId; lint and audit scripts enforce scope.
Contributor guides (GitHub)
Pre-PR checks: npm run typecheck, npm run lint, npm run test:ci, and route audits when touching APIs. Full list in DEVELOPMENT.md on GitHub.