Documentation

Public Role and Feature Matrix

This page serves as the primary documentation for now. Use the matrix below to quickly compare available features by role. Rows marked Planned are product direction and are not implemented in this frontend yet.

Authentication and API contract

Sign-in uses Auth0 SPA Authorization Code + PKCE against the Auth0 custom domain. The SPA requests an Auth0 API audience access token and calls the backend with Authorization: Bearer. There is no first-party password form and no CSRF / Django session exchange for the current contract.

API traffic uses stable /api/... paths and negotiates version 2026-08-01 via the Accept-Version header. The app loads the live contract from GET /openapi.json with the same version header. Bootstrap after login uses GET /api/me/context and GET /api/entitlements/me.

Journeys

Practitioners use one Journeys destination with Current, Available, and History sections under /journeys.

  • Free and gym-licensed practitioners can view active journeys, browse eligible definitions, and adopt journeys. Progress is calculated by the backend from training activity — the UI never patches goal progress.
  • Premium Individual practitioners can create and edit personal journeys at /journeys/new and /journeys/[journeyId]/edit.
  • Legacy /goals and /journey-templates routes redirect into the Journeys section.

Gym announcements and calendar

Authenticated members with gym access see a single Gym destination in the shell with Announcements and Calendar tabs. Routes are gym-scoped under /gyms/[gymId]/....

  • Members read published announcements and upcoming events. Staff with verified capabilities can create drafts, publish (with explicit confirmation), archive history, and manage calendar events.
  • Publishing makes content visible to members and triggers backend email delivery; the UI may show aggregate delivery warnings without recipient addresses. Saving or cancelling an event does not email members.
  • Event schedules display in each event's IANA timezone. Calendar ranges use inclusive from and exclusive to query parameters.
  • Deferred: unread/read markers, mark-read actions, retry/resend delivery, and recipient selection — not exposed by the current API contract.
FeatureFree PractitionerSubscribed IndividualGym MemberGym InstructorGym Owner
Create accountYesYesYesYesYes
Log sessionsYesYesYesYesYes
Record submissionsYesYesYesYesYes
View basic reportsYesYesYesYesYes
Access default/basic journeyYesYesYesYesYes
Adopt eligible journeysYesYesYesYesYes
Create custom personal journeysNoYesYes*YesYes
Authoritative journey progress (no manual goal edits)YesYesYesYesYes
View advanced/premium reportsNoYesYes*YesYes
Access gym-specific techniquesNoNoYesYesYes
Access gym community/forum——PlannedPlannedPlanned
View gym calendar/events——YesYesYes
Receive gym notifications——YesYesYes
Opt out of gym notifications——PlannedPlannedPlanned
Send gym-wide notifications———Yes*Yes*
Manage gym journeys———PlannedYes*
Assign/remove gym licenses———PlannedYes*
Manage technique visibility settings———PlannedPlanned
Delegate instructor permissions————Planned
Manage gym billing————Yes*
Cancel gym subscription————Yes*

Yes* = available when the gym member has an active assigned gym license/plan, or when gym-owner admin surfaces are enabled for that account.

Planned = described in platform vision/domain docs but not shipped in this Next.js client (for example competitions and full instructor delegation).

This matrix is current public guidance and may evolve as features ship. UI gates follow buildCapabilities.