# marioshehan22/nutrition-fitness architecture

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

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

## Overview

This is a nutrition-planning and tracking app with an AI-assisted plan generator and chat. The main workflow is to enter dietary requirements, generate a plan, enroll in a plan option, track meals and water, and review progress. The graph also shows chat and the server’s plan, logging, and progress layers. Some client-to-server wiring is inferred from the API structure, so that edge is marked unverified; unsampled implementation details are not expanded.

Main entry points: [`packages/client/src/App.tsx`](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/App.tsx) (Page router), [`packages/client/src/api/http.ts`](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/api/http.ts) (HTTP client), [`packages/server/routes.ts`](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/routes.ts) (API router), [`packages/server/models`](https://github.com/marioshehan22/nutrition-fitness/tree/main/packages/server/models) (Plan records)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client app"]
  node_app["Page router<br/>[App.tsx]"]
  node_requirements["Requirements"]
  node_generate["Plan generation"]
  node_enroll["Plan enrollment<br/>[EnrollPage.tsx]"]
  node_today["Daily tracking<br/>[TodayPage.tsx]"]
  node_food["Food logging<br/>[LogFoodPage.tsx]"]
  node_progress["Progress view<br/>[ProgressPage.tsx]"]
  node_chatui["Chat interface<br/>[ChatBot.tsx]"]
  node_http["HTTP client<br/>[http.ts]"]
end

subgraph group_api["Server API"]
  node_router["API router<br/>[routes.ts]"]
  node_plancontroller["Plan controller<br/>[plan.controller.ts]"]
  node_enrollcontroller["Enrollment controller"]
  node_dailycontroller["Daily log controller"]
  node_chatcontroller["Chat controller<br/>[chat.controller.ts]"]
end

subgraph group_domain["Nutrition services"]
  node_planservice["Plan service<br/>[plan.service.ts]"]
  node_enrollservice["Enrollment service"]
  node_dailyservice["Daily log service"]
  node_progressservice["Progress service"]
  node_llm["LLM client<br/>[client.ts]"]
end

subgraph group_data["Persistence"]
  node_planrepo["Plan repository<br/>[plan.repository.ts]"]
  node_planmodels[("Plan records")]
  node_dailylogmodel[("Daily log record<br/>[DailyLog.ts]")]
end

node_user(("User"))
node_mongo[("MongoDB")]
node_openrouter["OpenRouter"]

node_user -->|"uses"| node_app
node_app -->|"routes to"| node_requirements
node_app -->|"routes to"| node_generate
node_app -->|"routes to"| node_enroll
node_app -->|"routes to"| node_today
node_app -->|"routes to"| node_food
node_app -->|"routes to"| node_progress
node_app -->|"routes to"| node_chatui
node_requirements -->|"calls API"| node_http
node_generate -->|"calls API"| node_http
node_enroll -->|"calls API"| node_http
node_today -->|"calls API"| node_http
node_food -->|"calls API"| node_http
node_progress -->|"calls API"| node_http
node_http -.->|"sends requests"| node_router
node_router -->|"routes requests"| node_plancontroller
node_router -->|"routes requests"| node_dailycontroller
node_router -->|"routes requests"| node_chatcontroller
node_plancontroller -->|"delegates to"| node_planservice
node_plancontroller -->|"reads plans"| node_planrepo
node_enrollcontroller -->|"delegates to"| node_enrollservice
node_dailycontroller -->|"delegates to"| node_dailyservice
node_chatcontroller -.->|"uses via service"| node_openrouter
node_planservice -->|"stores plans"| node_planrepo
node_planservice -->|"generates with"| node_llm
node_llm -->|"sends prompts"| node_openrouter
node_enrollservice -->|"reads and writes"| node_planmodels
node_planrepo -->|"queries"| node_planmodels
node_dailyservice -->|"reads and writes"| node_dailylogmodel
node_dailyservice -->|"loads active plan"| node_planmodels
node_planmodels -.->|"persists in"| node_mongo
node_dailylogmodel -.->|"persists in"| node_mongo
node_router -->|"mounts enrollment routes"| node_enrollcontroller
node_router -->|"mounts progress routes"| node_progressservice

click node_app "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/App.tsx"
click node_requirements "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/pages/RequirementsPage.tsx"
click node_generate "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/pages/GeneratePlanPage.tsx"
click node_enroll "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/pages/EnrollPage.tsx"
click node_today "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/pages/TodayPage.tsx"
click node_food "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/pages/LogFoodPage.tsx"
click node_progress "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/pages/ProgressPage.tsx"
click node_chatui "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/components/chat/ChatBot.tsx"
click node_http "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/api/http.ts"
click node_router "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/routes.ts"
click node_plancontroller "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/controllers/plan.controller.ts"
click node_enrollcontroller "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/controllers/planEnrollment.controller.ts"
click node_dailycontroller "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/controllers/dailyLog.controller.ts"
click node_chatcontroller "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/controllers/chat.controller.ts"
click node_planservice "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/services/plan.service.ts"
click node_enrollservice "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/services/planEnrollment.service.ts"
click node_dailyservice "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/services/dailyLog.service.ts"
click node_progressservice "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/services/progress.service.ts"
click node_llm "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/llm/client.ts"
click node_planrepo "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/repositories/plan.repository.ts"
click node_planmodels "https://github.com/marioshehan22/nutrition-fitness/tree/main/packages/server/models"
click node_dailylogmodel "https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/models/DailyLog.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_requirements,node_generate,node_enroll,node_today,node_food,node_progress,node_chatui,node_http,node_user toneBlue
class node_router,node_plancontroller,node_enrollcontroller,node_dailycontroller,node_chatcontroller,node_mongo toneAmber
class node_planservice,node_enrollservice,node_dailyservice,node_progressservice,node_llm,node_openrouter toneMint
class node_planrepo,node_planmodels,node_dailylogmodel toneRose
```

## Components

### Client app

- [Page router](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/App.tsx): `packages/client/src/App.tsx`
- [Requirements](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/pages/RequirementsPage.tsx): `packages/client/src/pages/RequirementsPage.tsx`
- [Plan generation](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/pages/GeneratePlanPage.tsx): `packages/client/src/pages/GeneratePlanPage.tsx`
- [Plan enrollment](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/pages/EnrollPage.tsx): `packages/client/src/pages/EnrollPage.tsx`
- [Daily tracking](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/pages/TodayPage.tsx): `packages/client/src/pages/TodayPage.tsx`
- [Food logging](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/pages/LogFoodPage.tsx): `packages/client/src/pages/LogFoodPage.tsx`
- [Progress view](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/pages/ProgressPage.tsx): `packages/client/src/pages/ProgressPage.tsx`
- [Chat interface](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/components/chat/ChatBot.tsx): `packages/client/src/components/chat/ChatBot.tsx`
- [HTTP client](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/client/src/api/http.ts): `packages/client/src/api/http.ts`

### Server API

- [API router](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/routes.ts): `packages/server/routes.ts`
- [Plan controller](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/controllers/plan.controller.ts): `packages/server/controllers/plan.controller.ts`
- [Enrollment controller](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/controllers/planEnrollment.controller.ts): `packages/server/controllers/planEnrollment.controller.ts`
- [Daily log controller](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/controllers/dailyLog.controller.ts): `packages/server/controllers/dailyLog.controller.ts`
- [Chat controller](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/controllers/chat.controller.ts): `packages/server/controllers/chat.controller.ts`

### Nutrition services

- [Plan service](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/services/plan.service.ts): `packages/server/services/plan.service.ts`
- [Enrollment service](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/services/planEnrollment.service.ts): `packages/server/services/planEnrollment.service.ts`
- [Daily log service](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/services/dailyLog.service.ts): `packages/server/services/dailyLog.service.ts`
- [Progress service](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/services/progress.service.ts): `packages/server/services/progress.service.ts`
- [LLM client](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/llm/client.ts): `packages/server/llm/client.ts`

### Persistence

- [Plan repository](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/repositories/plan.repository.ts): `packages/server/repositories/plan.repository.ts`
- [Plan records](https://github.com/marioshehan22/nutrition-fitness/tree/main/packages/server/models): `packages/server/models`
- [Daily log record](https://github.com/marioshehan22/nutrition-fitness/blob/main/packages/server/models/DailyLog.ts): `packages/server/models/DailyLog.ts`

### Other components

- **User**
- **MongoDB**
- **OpenRouter**

## Connections

- User → Page router: uses (evidence: `packages/client/src/App.tsx`)
- Page router → Requirements: routes to (evidence: `packages/client/src/App.tsx`)
- Page router → Plan generation: routes to (evidence: `packages/client/src/App.tsx`)
- Page router → Plan enrollment: routes to (evidence: `packages/client/src/App.tsx`)
- Page router → Daily tracking: routes to (evidence: `packages/client/src/App.tsx`)
- Page router → Food logging: routes to (evidence: `packages/client/src/App.tsx`)
- Page router → Progress view: routes to (evidence: `packages/client/src/App.tsx`)
- Page router → Chat interface: routes to (evidence: `packages/client/src/App.tsx`)
- Requirements → HTTP client: calls API (evidence: `packages/client/src/pages/RequirementsPage.tsx`)
- Plan generation → HTTP client: calls API (evidence: `packages/client/src/pages/GeneratePlanPage.tsx`)
- Plan enrollment → HTTP client: calls API (evidence: `packages/client/src/pages/EnrollPage.tsx`)
- Daily tracking → HTTP client: calls API (evidence: `packages/client/src/pages/TodayPage.tsx`)
- Food logging → HTTP client: calls API (evidence: `packages/client/src/pages/LogFoodPage.tsx`)
- Progress view → HTTP client: calls API (evidence: `packages/client/src/pages/ProgressPage.tsx`)
- HTTP client → API router: sends requests
- API router → Plan controller: routes requests (evidence: `packages/server/routes.ts`)
- API router → Daily log controller: routes requests (evidence: `packages/server/routes.ts`)
- API router → Chat controller: routes requests (evidence: `packages/server/routes.ts`)
- Plan controller → Plan service: delegates to (evidence: `packages/server/controllers/plan.controller.ts`)
- Plan controller → Plan repository: reads plans (evidence: `packages/server/controllers/plan.controller.ts`)
- Enrollment controller → Enrollment service: delegates to (evidence: `packages/server/controllers/planEnrollment.controller.ts`)
- Daily log controller → Daily log service: delegates to (evidence: `packages/server/controllers/dailyLog.controller.ts`)
- Chat controller → OpenRouter: uses via service
- Plan service → Plan repository: stores plans (evidence: `packages/server/services/plan.service.ts`)
- Plan service → LLM client: generates with (evidence: `packages/server/services/plan.service.ts`)
- LLM client → OpenRouter: sends prompts (evidence: `packages/server/llm/client.ts`)
- Enrollment service → Plan records: reads and writes (evidence: `packages/server/services/planEnrollment.service.ts`)
- Plan repository → Plan records: queries (evidence: `packages/server/repositories/plan.repository.ts`)
- Daily log service → Daily log record: reads and writes (evidence: `packages/server/services/dailyLog.service.ts`)
- Daily log service → Plan records: loads active plan (evidence: `packages/server/services/dailyLog.service.ts`)
- Plan records → MongoDB: persists in
- Daily log record → MongoDB: persists in
- API router → Enrollment controller: mounts enrollment routes (evidence: `packages/server/routes.ts`)
- API router → Progress service: mounts progress routes (evidence: `packages/server/routes.ts`)
