# cmendess01/coachpass architecture

> Architecture diagram of the GitHub repository cmendess01/coachpass, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cmendess01/coachpass
- Repository: https://github.com/cmendess01/coachpass

## Overview

CoachPass is a combined trainer/nutritionist management platform and student app, with a Payload CMS backend. Professionals onboard and link students, then manage workouts, nutrition, sessions, assessments, and progress; students consume assigned plans, log activity, and view progress. The graph preserves documented app, CMS, and AI capabilities. Relationships are limited to calls or routes evidenced in excerpts and the README; unsampled feature wiring is left unasserted.

Main entry points: [`apps/fitsync-cms/src/web/lib/professionalApi.ts`](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/lib/professionalApi.ts) (Professional data API), [`apps/fitsync-cms/src/web/lib/studentApi.ts`](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/lib/studentApi.ts) (Student data API), [`apps/fitsync-cms/src/lib/cms.ts`](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/lib/cms.ts) (CMS API client), [`apps/fitsync-cms/src/web/App.tsx`](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/App.tsx) (App bootstrap)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Web application"]
  node_app["App bootstrap<br/>[App.tsx]"]
  node_routes["Role-based routes<br/>[routes.tsx]"]
  node_auth["Authentication<br/>[AuthContext.tsx]"]
  node_layout["Role workspaces<br/>[Layout.tsx]"]
end

subgraph group_professional["Professional workflows"]
  node_onboard["Onboarding"]
  node_professional["Professional portal"]
  node_nutrition["Nutrition planning<br/>[CreateDietPlan.tsx]"]
  node_training["Workout planning<br/>[CreateWorkout.tsx]"]
end

subgraph group_student["Student workflows"]
  node_diet["Student diet<br/>[Diet.tsx]"]
  node_dashboard["Student dashboard<br/>[Dashboard.tsx]"]
  node_progress["Progress tracking<br/>[Evolution.tsx]"]
end

subgraph group_backend["CMS and API"]
  node_studentapi["Student data API<br/>[studentApi.ts]"]
  node_proapi["Professional data API<br/>[professionalApi.ts]"]
  node_cms["CMS API client<br/>[cms.ts]"]
  node_payload["Payload REST API<br/>[route.ts]"]
  node_collections[("Domain collections")]
  node_links["Link access rules<br/>[links.ts]"]
  node_admin["CMS administration<br/>[page.tsx]"]
end

subgraph group_ai["AI services"]
  node_aiworkout["AI workout generation<br/>[route.ts]"]
  node_aimeal["AI meal generation<br/>[route.ts]"]
  node_aichat["AI chat<br/>[route.ts]"]
  node_aiengine["AI generators"]
  node_gemini["Gemini provider<br/>[geminiProvider.ts]"]
end

node_user(("User"))
node_aiuser(("AI user"))

node_user -->|"opens app"| node_app
node_app -->|"mounts router"| node_routes
node_app -->|"provides auth"| node_auth
node_routes -->|"guards access"| node_auth
node_routes -->|"renders workspace"| node_layout
node_auth -->|"requests login"| node_cms
node_onboard -.->|"loads linked people"| node_proapi
node_professional -.->|"loads management data"| node_proapi
node_nutrition -->|"creates meal plans"| node_proapi
node_nutrition -->|"loads foods"| node_studentapi
node_training -->|"manages workouts"| node_proapi
node_diet -->|"loads meal plans"| node_studentapi
node_dashboard -->|"loads dashboard data"| node_studentapi
node_progress -->|"loads student progress"| node_studentapi
node_progress -->|"loads professional data"| node_proapi
node_studentapi -->|"uses requests"| node_cms
node_proapi -->|"uses requests"| node_cms
node_cms -.->|"calls REST API"| node_payload
node_payload -.->|"serves collections"| node_collections
node_collections -->|"checks active links"| node_links
node_user -.->|"administers content"| node_admin
node_aiuser -.->|"requests workout"| node_aiworkout
node_aiuser -.->|"requests meal plan"| node_aimeal
node_aiuser -.->|"chats with AI"| node_aichat
node_aiworkout -.->|"generates workout"| node_aiengine
node_aimeal -.->|"generates meal plan"| node_aiengine
node_aichat -.->|"uses provider"| node_gemini

click node_app "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/App.tsx"
click node_routes "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/routes.tsx"
click node_auth "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/context/AuthContext.tsx"
click node_layout "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/Layout.tsx"
click node_onboard "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/ProfessionalOnboarding.tsx"
click node_professional "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/PersonalDashboard.tsx"
click node_nutrition "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/CreateDietPlan.tsx"
click node_training "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/CreateWorkout.tsx"
click node_diet "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/Diet.tsx"
click node_dashboard "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/Dashboard.tsx"
click node_progress "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/Evolution.tsx"
click node_studentapi "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/lib/studentApi.ts"
click node_proapi "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/lib/professionalApi.ts"
click node_cms "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/lib/cms.ts"
click node_payload "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/app/(payload)/api/%5B...slug%5D/route.ts"
click node_collections "https://github.com/cmendess01/coachpass/tree/main/apps/fitsync-cms/src/collections"
click node_links "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/access/links.ts"
click node_admin "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/app/(payload)/admin/%5B%5B...segments%5D%5D/page.tsx"
click node_aiworkout "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/app/(payload)/api/ai/generate-workout/route.ts"
click node_aimeal "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/app/(payload)/api/ai/generate-meal-plan/route.ts"
click node_aichat "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/app/(payload)/api/ai/chat/route.ts"
click node_aiengine "https://github.com/cmendess01/coachpass/tree/main/apps/fitsync-cms/src/services/ai"
click node_gemini "https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/services/ai/geminiProvider.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_routes,node_auth,node_layout,node_user,node_aiuser toneBlue
class node_onboard,node_professional,node_nutrition,node_training toneAmber
class node_diet,node_dashboard,node_progress toneMint
class node_studentapi,node_proapi,node_cms,node_payload,node_collections,node_links,node_admin toneRose
class node_aiworkout,node_aimeal,node_aichat,node_aiengine,node_gemini toneIndigo
```

## Components

### Web application

- [App bootstrap](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/App.tsx): `apps/fitsync-cms/src/web/App.tsx`
- [Role-based routes](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/routes.tsx): `apps/fitsync-cms/src/web/routes.tsx`
- [Authentication](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/context/AuthContext.tsx): `apps/fitsync-cms/src/web/context/AuthContext.tsx`
- [Role workspaces](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/Layout.tsx): `apps/fitsync-cms/src/web/components/Layout.tsx`

### Professional workflows

- [Onboarding](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/ProfessionalOnboarding.tsx): `apps/fitsync-cms/src/web/components/pages/ProfessionalOnboarding.tsx`
- [Professional portal](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/PersonalDashboard.tsx): `apps/fitsync-cms/src/web/components/pages/PersonalDashboard.tsx`
- [Nutrition planning](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/CreateDietPlan.tsx): `apps/fitsync-cms/src/web/components/pages/CreateDietPlan.tsx`
- [Workout planning](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/CreateWorkout.tsx): `apps/fitsync-cms/src/web/components/pages/CreateWorkout.tsx`

### Student workflows

- [Student diet](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/Diet.tsx): `apps/fitsync-cms/src/web/components/pages/Diet.tsx`
- [Student dashboard](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/Dashboard.tsx): `apps/fitsync-cms/src/web/components/pages/Dashboard.tsx`
- [Progress tracking](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/components/pages/Evolution.tsx): `apps/fitsync-cms/src/web/components/pages/Evolution.tsx`

### CMS and API

- [Student data API](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/lib/studentApi.ts): `apps/fitsync-cms/src/web/lib/studentApi.ts`
- [Professional data API](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/web/lib/professionalApi.ts): `apps/fitsync-cms/src/web/lib/professionalApi.ts`
- [CMS API client](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/lib/cms.ts): `apps/fitsync-cms/src/lib/cms.ts`
- [Payload REST API](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/app/(payload)/api/%5B...slug%5D/route.ts): `apps/fitsync-cms/src/app/(payload)/api/[...slug]/route.ts`
- [Domain collections](https://github.com/cmendess01/coachpass/tree/main/apps/fitsync-cms/src/collections): `apps/fitsync-cms/src/collections`
- [Link access rules](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/access/links.ts): `apps/fitsync-cms/src/access/links.ts`
- [CMS administration](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/app/(payload)/admin/%5B%5B...segments%5D%5D/page.tsx): `apps/fitsync-cms/src/app/(payload)/admin/[[...segments]]/page.tsx`

### AI services

- [AI workout generation](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/app/(payload)/api/ai/generate-workout/route.ts): `apps/fitsync-cms/src/app/(payload)/api/ai/generate-workout/route.ts`
- [AI meal generation](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/app/(payload)/api/ai/generate-meal-plan/route.ts): `apps/fitsync-cms/src/app/(payload)/api/ai/generate-meal-plan/route.ts`
- [AI chat](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/app/(payload)/api/ai/chat/route.ts): `apps/fitsync-cms/src/app/(payload)/api/ai/chat/route.ts`
- [AI generators](https://github.com/cmendess01/coachpass/tree/main/apps/fitsync-cms/src/services/ai): `apps/fitsync-cms/src/services/ai`
- [Gemini provider](https://github.com/cmendess01/coachpass/blob/main/apps/fitsync-cms/src/services/ai/geminiProvider.ts): `apps/fitsync-cms/src/services/ai/geminiProvider.ts`

### Other components

- **User**
- **AI user**

## Connections

- User → App bootstrap: opens app (evidence: `apps/fitsync-cms/src/web/App.tsx`)
- App bootstrap → Role-based routes: mounts router (evidence: `apps/fitsync-cms/src/web/App.tsx`)
- App bootstrap → Authentication: provides auth (evidence: `apps/fitsync-cms/src/web/App.tsx`)
- Role-based routes → Authentication: guards access (evidence: `apps/fitsync-cms/src/web/routes.tsx`)
- Role-based routes → Role workspaces: renders workspace (evidence: `apps/fitsync-cms/src/web/routes.tsx`)
- Authentication → CMS API client: requests login (evidence: `apps/fitsync-cms/src/web/context/AuthContext.tsx`)
- Onboarding → Professional data API: loads linked people
- Professional portal → Professional data API: loads management data
- Nutrition planning → Professional data API: creates meal plans (evidence: `apps/fitsync-cms/src/web/components/pages/CreateDietPlan.tsx`)
- Nutrition planning → Student data API: loads foods (evidence: `apps/fitsync-cms/src/web/components/pages/CreateDietPlan.tsx`)
- Workout planning → Professional data API: manages workouts (evidence: `apps/fitsync-cms/src/web/components/pages/CreateWorkout.tsx`)
- Student diet → Student data API: loads meal plans (evidence: `apps/fitsync-cms/src/web/components/pages/Diet.tsx`)
- Student dashboard → Student data API: loads dashboard data (evidence: `apps/fitsync-cms/src/web/components/pages/Dashboard.tsx`)
- Progress tracking → Student data API: loads student progress (evidence: `apps/fitsync-cms/src/web/components/pages/Evolution.tsx`)
- Progress tracking → Professional data API: loads professional data (evidence: `apps/fitsync-cms/src/web/components/pages/Evolution.tsx`)
- Student data API → CMS API client: uses requests (evidence: `apps/fitsync-cms/src/web/lib/studentApi.ts`)
- Professional data API → CMS API client: uses requests (evidence: `apps/fitsync-cms/src/web/lib/professionalApi.ts`)
- CMS API client → Payload REST API: calls REST API
- Payload REST API → Domain collections: serves collections
- Domain collections → Link access rules: checks active links (evidence: `apps/fitsync-cms/src/collections/Sessions.ts`)
- User → CMS administration: administers content
- AI user → AI workout generation: requests workout
- AI user → AI meal generation: requests meal plan
- AI user → AI chat: chats with AI
- AI workout generation → AI generators: generates workout
- AI meal generation → AI generators: generates meal plan
- AI chat → Gemini provider: uses provider
