# prattyush09/trainiq architecture

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

- Interactive diagram: https://gitdiagram.com/prattyush09/trainiq
- Repository: https://github.com/prattyush09/trainiq

## Overview

TrainIQ is a React fitness tracker whose main flow is account access to a personalized dashboard, then workout, nutrition, and progress tracking. The dashboard’s recommendation logic builds user context from profile and activity data; scoring evaluates training, nutrition, consistency, and optional hydration coverage. Workout sessions persist resumable progress and completions. The README also documents profile setup, targets, water history, and analytics. Firebase-backed services and a Gemini briefing endpoint are represented where evidenced; page-to-service wiring is not inferred from the sampled excerpts.

Main entry points: [`frontend/src/App.jsx`](https://github.com/prattyush09/trainiq/blob/main/frontend/src/App.jsx) (Routes & access), [`frontend/src/services/userService.js`](https://github.com/prattyush09/trainiq/blob/main/frontend/src/services/userService.js) (Profile service), [`frontend/src/pages/Dashboard.jsx`](https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Dashboard.jsx) (Dashboard), [`frontend/src/pages/WorkoutSession.jsx`](https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/WorkoutSession.jsx) (Workout session)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_app["Routes &amp; access<br/>[App.jsx]"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_profile["Profile &amp; targets<br/>[Profile.jsx]"]
  node_setup["Profile setup<br/>[ProfileSetup.jsx]"]
  node_settings["Preferences<br/>[Settings.jsx]"]
end

subgraph group_training["Training"]
  node_workouts["Workout programs<br/>[Workouts.jsx]"]
  node_program["Workout library<br/>[Workouts.js]"]
  node_session["Workout session<br/>[WorkoutSession.jsx]"]
  node_history["Workout history &amp; streak<br/>[workoutService.js]"]
end

subgraph group_wellness["Nutrition &amp; Progress"]
  node_recommend["Recommendation engine"]
  node_score["TrainIQ score<br/>[scoreService.js]"]
  node_diet["Diet &amp; hydration<br/>[Diet.jsx]"]
  node_dietdata["Diet history<br/>[dietService.js]"]
  node_progress["Progress analytics<br/>[Progress.jsx]"]
end

subgraph group_data["Persistence &amp; Integrations"]
  node_auth[("Firebase Auth")]
  node_userservice["Profile service<br/>[userService.js]"]
  node_firestore[("Cloud Firestore")]
  node_geminiapi["AI briefing endpoint<br/>[gemini.js]"]
end

node_user(("Fitness user"))
node_gemini(("Gemini AI"))

node_user -->|"opens"| node_app
node_app -->|"checks identity"| node_auth
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_workouts
node_app -->|"routes to"| node_session
node_app -->|"routes to"| node_diet
node_app -->|"routes to"| node_progress
node_app -->|"routes to"| node_profile
node_app -->|"routes to"| node_setup
node_app -->|"routes to"| node_settings
node_dashboard -->|"uses recommendation"| node_recommend
node_dashboard -->|"uses score"| node_score
node_recommend -->|"selects workout"| node_program
node_workouts -->|"displays program"| node_program
node_session -->|"loads exercises"| node_program
node_session -->|"reads/writes progress"| node_firestore
node_history -->|"reads history"| node_firestore
node_dietdata -->|"reads diet logs"| node_firestore
node_userservice -->|"reads/writes profile"| node_firestore
node_profile -->|"profile data"| node_userservice
node_setup -->|"profile data"| node_userservice
node_settings -->|"profile data"| node_userservice
node_geminiapi -.->|"generates briefing"| node_gemini

click node_app "https://github.com/prattyush09/trainiq/blob/main/frontend/src/App.jsx"
click node_dashboard "https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Dashboard.jsx"
click node_recommend "https://github.com/prattyush09/trainiq/blob/main/frontend/src/services/recommendationEngine.js"
click node_score "https://github.com/prattyush09/trainiq/blob/main/frontend/src/services/scoreService.js"
click node_workouts "https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Workouts.jsx"
click node_program "https://github.com/prattyush09/trainiq/blob/main/frontend/src/data/Workouts.js"
click node_session "https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/WorkoutSession.jsx"
click node_history "https://github.com/prattyush09/trainiq/blob/main/frontend/src/services/workoutService.js"
click node_diet "https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Diet.jsx"
click node_dietdata "https://github.com/prattyush09/trainiq/blob/main/frontend/src/services/dietService.js"
click node_progress "https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Progress.jsx"
click node_profile "https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Profile.jsx"
click node_setup "https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/ProfileSetup.jsx"
click node_settings "https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Settings.jsx"
click node_userservice "https://github.com/prattyush09/trainiq/blob/main/frontend/src/services/userService.js"
click node_geminiapi "https://github.com/prattyush09/trainiq/blob/main/frontend/api/gemini.js"

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_dashboard,node_profile,node_setup,node_settings,node_user toneBlue
class node_workouts,node_program,node_session,node_history toneAmber
class node_recommend,node_score,node_diet,node_dietdata,node_progress toneMint
class node_auth,node_userservice,node_firestore,node_geminiapi toneRose
class node_gemini toneIndigo
```

## Components

### Application

- [Routes & access](https://github.com/prattyush09/trainiq/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Dashboard](https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Dashboard.jsx): `frontend/src/pages/Dashboard.jsx`
- [Profile & targets](https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Profile.jsx): `frontend/src/pages/Profile.jsx`
- [Profile setup](https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/ProfileSetup.jsx): `frontend/src/pages/ProfileSetup.jsx`
- [Preferences](https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Settings.jsx): `frontend/src/pages/Settings.jsx`

### Training

- [Workout programs](https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Workouts.jsx): `frontend/src/pages/Workouts.jsx`
- [Workout library](https://github.com/prattyush09/trainiq/blob/main/frontend/src/data/Workouts.js): `frontend/src/data/Workouts.js`
- [Workout session](https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/WorkoutSession.jsx): `frontend/src/pages/WorkoutSession.jsx`
- [Workout history & streak](https://github.com/prattyush09/trainiq/blob/main/frontend/src/services/workoutService.js): `frontend/src/services/workoutService.js`

### Nutrition & Progress

- [Recommendation engine](https://github.com/prattyush09/trainiq/blob/main/frontend/src/services/recommendationEngine.js): `frontend/src/services/recommendationEngine.js`
- [TrainIQ score](https://github.com/prattyush09/trainiq/blob/main/frontend/src/services/scoreService.js): `frontend/src/services/scoreService.js`
- [Diet & hydration](https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Diet.jsx): `frontend/src/pages/Diet.jsx`
- [Diet history](https://github.com/prattyush09/trainiq/blob/main/frontend/src/services/dietService.js): `frontend/src/services/dietService.js`
- [Progress analytics](https://github.com/prattyush09/trainiq/blob/main/frontend/src/pages/Progress.jsx): `frontend/src/pages/Progress.jsx`

### Persistence & Integrations

- **Firebase Auth**
- [Profile service](https://github.com/prattyush09/trainiq/blob/main/frontend/src/services/userService.js): `frontend/src/services/userService.js`
- **Cloud Firestore**
- [AI briefing endpoint](https://github.com/prattyush09/trainiq/blob/main/frontend/api/gemini.js): `frontend/api/gemini.js`

### Other components

- **Fitness user**
- **Gemini AI**

## Connections

- Fitness user → Routes & access: opens
- Routes & access → Firebase Auth: checks identity
- Routes & access → Dashboard: routes to
- Routes & access → Workout programs: routes to
- Routes & access → Workout session: routes to
- Routes & access → Diet & hydration: routes to
- Routes & access → Progress analytics: routes to
- Routes & access → Profile & targets: routes to
- Routes & access → Profile setup: routes to
- Routes & access → Preferences: routes to
- Dashboard → Recommendation engine: uses recommendation
- Dashboard → TrainIQ score: uses score
- Recommendation engine → Workout library: selects workout
- Workout programs → Workout library: displays program
- Workout session → Workout library: loads exercises
- Workout session → Cloud Firestore: reads/writes progress
- Workout history & streak → Cloud Firestore: reads history
- Diet history → Cloud Firestore: reads diet logs
- Profile service → Cloud Firestore: reads/writes profile
- Profile & targets → Profile service: profile data
- Profile setup → Profile service: profile data
- Preferences → Profile service: profile data
- AI briefing endpoint → Gemini AI: generates briefing
