# emoisan22/nutrition architecture

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

- Interactive diagram: https://gitdiagram.com/emoisan22/nutrition
- Repository: https://github.com/emoisan22/nutrition

## Overview

NutriTracker is a cycling and triathlon nutrition and performance application. Athletes use the React app to review training and nutrition, plan fueling and supplements, and sync activity data; the FastAPI backend serves these workflows and persists athlete records. The README documents AI plans, analytics, gamification, PWA support and Stripe tiers. Sampled excerpts confirm selected nutrition, training, supplement and Strava paths; several other capability links reflect the documented product and tree, not inspected call sites.

Main entry points: [`backend/routes/nutrition_routes.py`](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/routes/nutrition_routes.py) (Nutrition routes), [`backend/app.py`](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/app.py) (FastAPI app), [`frontend/src/App.jsx`](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/frontend/src/App.jsx) (App shell), [`frontend/src/api/client.js`](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/frontend/src/api/client.js) (API client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Athlete experience"]
  node_app["App shell<br/>[App.jsx]"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_plannerui["Weekly planner<br/>[WeeklyPlanner.jsx]"]
  node_suppui["Supplements manager"]
  node_apiclient["API client<br/>[client.js]"]
end

subgraph group_api["API and identity"]
  node_apiapp["FastAPI app<br/>[app.py]"]
  node_auth["JWT auth<br/>[auth_middleware.py]"]
end

subgraph group_training["Training and integrations"]
  node_trainingroutes["Training routes<br/>[training_routes.py]"]
  node_trainingservice["Training service"]
  node_integrations["Activity integrations"]
  node_strava["Strava OAuth<br/>[strava_routes.py]"]
end

subgraph group_nutrition["Nutrition and guidance"]
  node_nutritionroutes["Nutrition routes"]
  node_nutritionservice["Nutrition service"]
  node_aiplans["AI plans"]
  node_supplements["Supplement guidance<br/>[ai_supplements.py]"]
  node_hydration["Hydration planning<br/>[hydration.py]"]
  node_raceday["Race-day planning"]
end

subgraph group_platform["Persistence and account"]
  node_database[("Application database<br/>[database.py]")]
  node_models["Domain models<br/>[models.py]"]
  node_subscription["Plans and billing<br/>[subscription.py]"]
end

node_athlete(("Athlete"))
node_stripe["Stripe"]
node_activityproviders["Activity providers"]

node_athlete -->|"uses"| node_app
node_app -->|"renders"| node_dashboard
node_app -->|"renders"| node_plannerui
node_app -->|"renders"| node_suppui
node_dashboard -->|"requests data"| node_apiclient
node_plannerui -->|"requests plans"| node_apiclient
node_suppui -->|"logs intake"| node_apiclient
node_apiclient -->|"HTTP requests"| node_apiapp
node_apiapp -->|"validates tokens"| node_auth
node_apiapp -->|"dispatches"| node_trainingroutes
node_apiapp -->|"dispatches"| node_nutritionroutes
node_trainingroutes -->|"delegates"| node_trainingservice
node_trainingroutes -->|"reads and writes"| node_database
node_trainingservice -->|"reads and writes"| node_database
node_integrations -.->|"syncs activities"| node_activityproviders
node_strava -.->|"exchanges OAuth"| node_activityproviders
node_nutritionroutes -->|"loads training"| node_trainingservice
node_nutritionroutes -->|"generates plans"| node_nutritionservice
node_nutritionroutes -->|"generates protocols"| node_supplements
node_nutritionroutes -->|"plans hydration"| node_hydration
node_nutritionservice -.->|"generates guidance"| node_aiplans
node_nutritionroutes -->|"reads and writes"| node_database
node_suppui -->|"records intake"| node_nutritionroutes
node_nutritionroutes -->|"requests race plans"| node_raceday
node_database -->|"stores records"| node_models
node_apiapp -->|"checks access"| node_subscription
node_subscription -.->|"bills users"| node_stripe

click node_app "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/frontend/src/App.jsx"
click node_dashboard "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/frontend/src/pages/Dashboard.jsx"
click node_plannerui "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/frontend/src/pages/WeeklyPlanner.jsx"
click node_suppui "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/frontend/src/components/SupplementsManager.jsx"
click node_apiclient "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/frontend/src/api/client.js"
click node_apiapp "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/app.py"
click node_auth "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/auth_middleware.py"
click node_trainingroutes "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/routes/training_routes.py"
click node_trainingservice "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/services/training_service.py"
click node_integrations "https://github.com/emoisan22/nutrition/tree/feat/strava-integration/backend/integrations"
click node_strava "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/strava_routes.py"
click node_nutritionroutes "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/routes/nutrition_routes.py"
click node_nutritionservice "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/services/nutrition_service.py"
click node_aiplans "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/ai_complete_nutrition_strategy.py"
click node_supplements "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/ai_supplements.py"
click node_hydration "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/hydration.py"
click node_raceday "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/race_day_service.py"
click node_database "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/database.py"
click node_models "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/models.py"
click node_subscription "https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/subscription.py"

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_plannerui,node_suppui,node_apiclient toneBlue
class node_apiapp,node_auth toneAmber
class node_trainingroutes,node_trainingservice,node_integrations,node_strava toneMint
class node_nutritionroutes,node_nutritionservice,node_aiplans,node_supplements,node_hydration,node_raceday toneRose
class node_database,node_models,node_subscription,node_athlete,node_stripe,node_activityproviders toneIndigo
```

## Components

### Athlete experience

- [App shell](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Dashboard](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/frontend/src/pages/Dashboard.jsx): `frontend/src/pages/Dashboard.jsx`
- [Weekly planner](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/frontend/src/pages/WeeklyPlanner.jsx): `frontend/src/pages/WeeklyPlanner.jsx`
- [Supplements manager](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/frontend/src/components/SupplementsManager.jsx): `frontend/src/components/SupplementsManager.jsx`
- [API client](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/frontend/src/api/client.js): `frontend/src/api/client.js`

### API and identity

- [FastAPI app](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/app.py): `backend/app.py`
- [JWT auth](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/auth_middleware.py): `backend/auth_middleware.py`

### Training and integrations

- [Training routes](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/routes/training_routes.py): `backend/routes/training_routes.py`
- [Training service](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/services/training_service.py): `backend/services/training_service.py`
- [Activity integrations](https://github.com/emoisan22/nutrition/tree/feat/strava-integration/backend/integrations): `backend/integrations`
- [Strava OAuth](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/strava_routes.py): `backend/strava_routes.py`

### Nutrition and guidance

- [Nutrition routes](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/routes/nutrition_routes.py): `backend/routes/nutrition_routes.py`
- [Nutrition service](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/services/nutrition_service.py): `backend/services/nutrition_service.py`
- [AI plans](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/ai_complete_nutrition_strategy.py): `backend/ai_complete_nutrition_strategy.py`
- [Supplement guidance](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/ai_supplements.py): `backend/ai_supplements.py`
- [Hydration planning](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/hydration.py): `backend/hydration.py`
- [Race-day planning](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/race_day_service.py): `backend/race_day_service.py`

### Persistence and account

- [Application database](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/database.py): `backend/database.py`
- [Domain models](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/models.py): `backend/models.py`
- [Plans and billing](https://github.com/emoisan22/nutrition/blob/feat/strava-integration/backend/subscription.py): `backend/subscription.py`

### Other components

- **Athlete**
- **Stripe**
- **Activity providers**

## Connections

- Athlete → App shell: uses
- App shell → Dashboard: renders
- App shell → Weekly planner: renders
- App shell → Supplements manager: renders
- Dashboard → API client: requests data
- Weekly planner → API client: requests plans
- Supplements manager → API client: logs intake
- API client → FastAPI app: HTTP requests
- FastAPI app → JWT auth: validates tokens
- FastAPI app → Training routes: dispatches
- FastAPI app → Nutrition routes: dispatches
- Training routes → Training service: delegates
- Training routes → Application database: reads and writes
- Training service → Application database: reads and writes
- Activity integrations → Activity providers: syncs activities
- Strava OAuth → Activity providers: exchanges OAuth
- Nutrition routes → Training service: loads training
- Nutrition routes → Nutrition service: generates plans
- Nutrition routes → Supplement guidance: generates protocols
- Nutrition routes → Hydration planning: plans hydration
- Nutrition service → AI plans: generates guidance
- Nutrition routes → Application database: reads and writes
- Supplements manager → Nutrition routes: records intake
- Nutrition routes → Race-day planning: requests race plans
- Application database → Domain models: stores records
- FastAPI app → Plans and billing: checks access
- Plans and billing → Stripe: bills users
