# salttechsolutions/marte architecture

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

- Interactive diagram: https://gitdiagram.com/salttechsolutions/marte
- Repository: https://github.com/salttechsolutions/marte

## Overview

Gymentra is a multi-tenant gym-management and training product: members join a gym, book and attend sessions, manage memberships, and follow workouts; trainers and administrators manage schedules, members, programs, and gym operations. The mobile app is the user-facing client, backed by Firebase services and Cloud Functions. The rig package provides a separate training-simulator capability. The booking and workout links reflect sampled source; other feature branches are documented by the route tree and README, but their detailed wiring was not sampled.

Main entry points: [`apps/gymentra-mobile/src/app/member/workout/session.tsx`](https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/app/member/workout/session.tsx) (Workout session), [`apps/gymentra-mobile/src/app`](https://github.com/salttechsolutions/marte/tree/main/apps/gymentra-mobile/src/app) (Mobile app routes), [`apps/gymentra-mobile/src/context/AuthContext.tsx`](https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/context/AuthContext.tsx) (Auth and tenant context), [`apps/gymentra-mobile/src/app/member/book-session.tsx`](https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/app/member/book-session.tsx) (Book PT session)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mobile["Mobile app"]
  node_mobile_app["Mobile app routes"]
  node_auth["Auth and tenant context<br/>[AuthContext.tsx]"]
  node_social_auth["Social sign-in<br/>[socialAuth.ts]"]
end

subgraph group_gymops["Gym operations"]
  node_member_booking["Book PT session<br/>[book-session.tsx]"]
  node_session_repo["PT session access<br/>[ptSessionRepo.ts]"]
  node_trainer_ops["Trainer scheduling"]
  node_admin_ops["Gym administration"]
  node_onboarding["Gym onboarding"]
end

subgraph group_training["Training"]
  node_workout_routes["Member workouts"]
  node_workout_session["Workout session<br/>[session.tsx]"]
  node_workout_repo["Workout log access<br/>[workoutLogRepo.ts]"]
  node_program_logic["Program progression<br/>[program.ts]"]
  node_exercise_library["Exercise library<br/>[exerciseLibrary.ts]"]
  node_rig["Training simulator<br/>[rig.ts]"]
  node_rig_audit["Rig audit rules<br/>[rigAudit.ts]"]
end

subgraph group_backend["Backend services"]
  node_firebase["Firebase client<br/>[firebase.ts]"]
  node_functions["Cloud Functions<br/>[index.ts]"]
  node_sessions_fn["Session booking logic<br/>[sessions.ts]"]
end

node_member(("Member"))
node_trainer(("Trainer"))
node_admin(("Gym admin"))
node_firebase_auth["Firebase Auth"]
node_firestore[("Firestore")]

node_member -->|"uses"| node_mobile_app
node_trainer -->|"uses"| node_mobile_app
node_admin -->|"uses"| node_mobile_app
node_mobile_app -->|"resolves identity"| node_auth
node_auth -->|"reads tenant data"| node_firebase
node_social_auth -->|"signs in"| node_firebase_auth
node_member -->|"books session"| node_member_booking
node_member_booking -->|"requests booking"| node_session_repo
node_session_repo -->|"calls booking function"| node_functions
node_functions -->|"dispatches"| node_sessions_fn
node_sessions_fn -->|"reads and writes"| node_firestore
node_trainer -->|"manages schedule"| node_trainer_ops
node_admin -->|"manages gym"| node_admin_ops
node_member -->|"joins gym"| node_onboarding
node_member -->|"trains"| node_workout_routes
node_workout_routes -->|"opens session"| node_workout_session
node_workout_session -->|"watches log"| node_workout_repo
node_workout_session -->|"loads history"| node_program_logic
node_workout_session -->|"looks up exercise"| node_exercise_library
node_rig -->|"applies audit rules"| node_rig_audit

click node_mobile_app "https://github.com/salttechsolutions/marte/tree/main/apps/gymentra-mobile/src/app"
click node_auth "https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/context/AuthContext.tsx"
click node_social_auth "https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/services/socialAuth.ts"
click node_member_booking "https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/app/member/book-session.tsx"
click node_session_repo "https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/data/firebase/ptSessionRepo.ts"
click node_trainer_ops "https://github.com/salttechsolutions/marte/tree/main/apps/gymentra-mobile/src/app/trainer"
click node_admin_ops "https://github.com/salttechsolutions/marte/tree/main/apps/gymentra-mobile/src/app/admin"
click node_onboarding "https://github.com/salttechsolutions/marte/tree/main/apps/gymentra-mobile/src/app/onboarding"
click node_workout_routes "https://github.com/salttechsolutions/marte/tree/main/apps/gymentra-mobile/src/app/member/workout"
click node_workout_session "https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/app/member/workout/session.tsx"
click node_workout_repo "https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/data/firebase/workoutLogRepo.ts"
click node_program_logic "https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/data/program.ts"
click node_exercise_library "https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/data/exerciseLibrary.ts"
click node_rig "https://github.com/salttechsolutions/marte/blob/main/packages/rig/src/rig.ts"
click node_rig_audit "https://github.com/salttechsolutions/marte/blob/main/packages/rig/src/rigAudit.ts"
click node_firebase "https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/services/firebase.ts"
click node_functions "https://github.com/salttechsolutions/marte/blob/main/backend/functions/src/index.ts"
click node_sessions_fn "https://github.com/salttechsolutions/marte/blob/main/backend/functions/src/sessions.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_mobile_app,node_auth,node_social_auth toneBlue
class node_member_booking,node_session_repo,node_trainer_ops,node_admin_ops,node_onboarding,node_firestore toneAmber
class node_workout_routes,node_workout_session,node_workout_repo,node_program_logic,node_exercise_library,node_rig,node_rig_audit toneMint
class node_firebase,node_functions,node_sessions_fn toneRose
class node_member,node_trainer,node_admin,node_firebase_auth toneIndigo
```

## Components

### Mobile app

- [Mobile app routes](https://github.com/salttechsolutions/marte/tree/main/apps/gymentra-mobile/src/app): `apps/gymentra-mobile/src/app`
- [Auth and tenant context](https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/context/AuthContext.tsx): `apps/gymentra-mobile/src/context/AuthContext.tsx`
- [Social sign-in](https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/services/socialAuth.ts): `apps/gymentra-mobile/src/services/socialAuth.ts`

### Gym operations

- [Book PT session](https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/app/member/book-session.tsx): `apps/gymentra-mobile/src/app/member/book-session.tsx`
- [PT session access](https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/data/firebase/ptSessionRepo.ts): `apps/gymentra-mobile/src/data/firebase/ptSessionRepo.ts`
- [Trainer scheduling](https://github.com/salttechsolutions/marte/tree/main/apps/gymentra-mobile/src/app/trainer): `apps/gymentra-mobile/src/app/trainer`
- [Gym administration](https://github.com/salttechsolutions/marte/tree/main/apps/gymentra-mobile/src/app/admin): `apps/gymentra-mobile/src/app/admin`
- [Gym onboarding](https://github.com/salttechsolutions/marte/tree/main/apps/gymentra-mobile/src/app/onboarding): `apps/gymentra-mobile/src/app/onboarding`

### Training

- [Member workouts](https://github.com/salttechsolutions/marte/tree/main/apps/gymentra-mobile/src/app/member/workout): `apps/gymentra-mobile/src/app/member/workout`
- [Workout session](https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/app/member/workout/session.tsx): `apps/gymentra-mobile/src/app/member/workout/session.tsx`
- [Workout log access](https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/data/firebase/workoutLogRepo.ts): `apps/gymentra-mobile/src/data/firebase/workoutLogRepo.ts`
- [Program progression](https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/data/program.ts): `apps/gymentra-mobile/src/data/program.ts`
- [Exercise library](https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/data/exerciseLibrary.ts): `apps/gymentra-mobile/src/data/exerciseLibrary.ts`
- [Training simulator](https://github.com/salttechsolutions/marte/blob/main/packages/rig/src/rig.ts): `packages/rig/src/rig.ts`
- [Rig audit rules](https://github.com/salttechsolutions/marte/blob/main/packages/rig/src/rigAudit.ts): `packages/rig/src/rigAudit.ts`

### Backend services

- [Firebase client](https://github.com/salttechsolutions/marte/blob/main/apps/gymentra-mobile/src/services/firebase.ts): `apps/gymentra-mobile/src/services/firebase.ts`
- [Cloud Functions](https://github.com/salttechsolutions/marte/blob/main/backend/functions/src/index.ts): `backend/functions/src/index.ts`
- [Session booking logic](https://github.com/salttechsolutions/marte/blob/main/backend/functions/src/sessions.ts): `backend/functions/src/sessions.ts`

### Other components

- **Member**
- **Trainer**
- **Gym admin**
- **Firebase Auth**
- **Firestore**

## Connections

- Member → Mobile app routes: uses
- Trainer → Mobile app routes: uses
- Gym admin → Mobile app routes: uses
- Mobile app routes → Auth and tenant context: resolves identity
- Auth and tenant context → Firebase client: reads tenant data
- Social sign-in → Firebase Auth: signs in
- Member → Book PT session: books session
- Book PT session → PT session access: requests booking
- PT session access → Cloud Functions: calls booking function
- Cloud Functions → Session booking logic: dispatches
- Session booking logic → Firestore: reads and writes
- Trainer → Trainer scheduling: manages schedule
- Gym admin → Gym administration: manages gym
- Member → Gym onboarding: joins gym
- Member → Member workouts: trains
- Member workouts → Workout session: opens session
- Workout session → Workout log access: watches log
- Workout session → Program progression: loads history
- Workout session → Exercise library: looks up exercise
- Training simulator → Rig audit rules: applies audit rules
