# shreyas-sv1/nutrivision-ai architecture

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

- Interactive diagram: https://gitdiagram.com/shreyas-sv1/nutrivision-ai
- Repository: https://github.com/shreyas-sv1/nutrivision-ai

## Overview

AI Fitness Analyzer accepts food photos for classification and nutrition estimates, and body-view photos plus demographics for body-fat and composition analysis. The React app exposes food analysis and a history dashboard; FastAPI routes coordinate model inference, nutrition lookup, and body-fat persistence. README-documented capabilities are included, but frontend API wiring and dashboard data sources are not fully evidenced by the sampled excerpts, so those links are limited.

Main entry points: [`backend/app/routes/food_routes.py`](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/routes/food_routes.py) (Food endpoints), [`frontend/src/App.jsx`](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/frontend/src/App.jsx) (App routes), [`frontend/src/components/FoodUpload.jsx`](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/frontend/src/components/FoodUpload.jsx) (Food upload), [`backend/app/main.py`](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/main.py) (FastAPI app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web app"]
  node_app["App routes<br/>[App.jsx]"]
  node_food_ui["Food upload<br/>[FoodUpload.jsx]"]
  node_dashboard["History dashboard<br/>[Dashboard.jsx]"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_api["API layer"]
  node_server["FastAPI app<br/>[main.py]"]
  node_food_route["Food endpoints<br/>[food_routes.py]"]
  node_body_route["Body-fat endpoint<br/>[bodyfat_routes.py]"]
end

subgraph group_food["Food analysis"]
  node_classifier["Food classifier<br/>[food_model.py]"]
  node_food_weights["Classifier weights"]
  node_nutrition["Nutrition lookup"]
  node_nutrition_data["Nutrition records<br/>[nutrition_db.json]"]
end

subgraph group_body["Body analysis"]
  node_body_service["Body-fat analysis<br/>[bodyfat_service.py]"]
  node_body_weights["Regression weights<br/>[bodyfat_model.pkl]"]
  node_pose_model["Pose landmarks"]
end

subgraph group_state["Data and history"]
  node_db_layer["Database access<br/>[db.py]"]
  node_prediction_db[("Prediction store")]
end

node_user(("User"))

node_user -->|"uses"| node_app
node_app -->|"routes to"| node_food_ui
node_app -->|"routes to"| node_dashboard
node_food_ui -->|"requests analysis"| node_api_client
node_api_client -->|"sends API requests"| node_server
node_server -->|"dispatches food"| node_food_route
node_server -->|"dispatches body-fat"| node_body_route
node_food_route -->|"runs inference"| node_classifier
node_classifier -->|"loads weights"| node_food_weights
node_food_route -->|"looks up nutrients"| node_nutrition
node_nutrition -->|"reads"| node_nutrition_data
node_food_route -->|"returns estimates"| node_api_client
node_body_route -->|"requests analysis"| node_body_service
node_body_service -->|"loads model"| node_body_weights
node_body_service -->|"detects landmarks"| node_pose_model
node_body_route -->|"saves prediction"| node_db_layer
node_db_layer -->|"writes body-fat record"| node_prediction_db
node_food_ui -.->|"records local history"| node_dashboard

click node_app "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/frontend/src/App.jsx"
click node_food_ui "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/frontend/src/components/FoodUpload.jsx"
click node_dashboard "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/frontend/src/components/Dashboard.jsx"
click node_api_client "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/frontend/src/api.js"
click node_server "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/main.py"
click node_food_route "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/routes/food_routes.py"
click node_body_route "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/routes/bodyfat_routes.py"
click node_classifier "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/models/food_model.py"
click node_food_weights "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/ml_models/food_classifier/food_classifier.pth"
click node_nutrition "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/services/nutrition_service.py"
click node_nutrition_data "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/data/nutrition_db.json"
click node_body_service "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/services/bodyfat_service.py"
click node_body_weights "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/ml_models/bodyfat_regression/bodyfat_model.pkl"
click node_pose_model "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/ml_models/pose_landmarker_heavy.task"
click node_db_layer "https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/database/db.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_food_ui,node_dashboard,node_api_client,node_user toneBlue
class node_server,node_food_route,node_body_route toneAmber
class node_classifier,node_food_weights,node_nutrition,node_nutrition_data toneMint
class node_body_service,node_body_weights,node_pose_model toneRose
class node_db_layer,node_prediction_db toneIndigo
```

## Components

### Web app

- [App routes](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Food upload](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/frontend/src/components/FoodUpload.jsx): `frontend/src/components/FoodUpload.jsx`
- [History dashboard](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/frontend/src/components/Dashboard.jsx): `frontend/src/components/Dashboard.jsx`
- [API client](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/frontend/src/api.js): `frontend/src/api.js`

### API layer

- [FastAPI app](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/main.py): `backend/app/main.py`
- [Food endpoints](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/routes/food_routes.py): `backend/app/routes/food_routes.py`
- [Body-fat endpoint](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/routes/bodyfat_routes.py): `backend/app/routes/bodyfat_routes.py`

### Food analysis

- [Food classifier](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/models/food_model.py): `backend/app/models/food_model.py`
- [Classifier weights](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/ml_models/food_classifier/food_classifier.pth): `ml_models/food_classifier/food_classifier.pth`
- [Nutrition lookup](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/services/nutrition_service.py): `backend/app/services/nutrition_service.py`
- [Nutrition records](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/data/nutrition_db.json): `backend/app/data/nutrition_db.json`

### Body analysis

- [Body-fat analysis](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/services/bodyfat_service.py): `backend/app/services/bodyfat_service.py`
- [Regression weights](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/ml_models/bodyfat_regression/bodyfat_model.pkl): `ml_models/bodyfat_regression/bodyfat_model.pkl`
- [Pose landmarks](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/ml_models/pose_landmarker_heavy.task): `ml_models/pose_landmarker_heavy.task`

### Data and history

- [Database access](https://github.com/shreyas-sv1/nutrivision-ai/blob/main/backend/app/database/db.py): `backend/app/database/db.py`
- **Prediction store**

### Other components

- **User**

## Connections

- User → App routes: uses
- App routes → Food upload: routes to
- App routes → History dashboard: routes to
- Food upload → API client: requests analysis
- API client → FastAPI app: sends API requests
- FastAPI app → Food endpoints: dispatches food
- FastAPI app → Body-fat endpoint: dispatches body-fat
- Food endpoints → Food classifier: runs inference
- Food classifier → Classifier weights: loads weights
- Food endpoints → Nutrition lookup: looks up nutrients
- Nutrition lookup → Nutrition records: reads
- Food endpoints → API client: returns estimates
- Body-fat endpoint → Body-fat analysis: requests analysis
- Body-fat analysis → Regression weights: loads model
- Body-fat analysis → Pose landmarks: detects landmarks
- Body-fat endpoint → Database access: saves prediction
- Database access → Prediction store: writes body-fat record
- Food upload → History dashboard: records local history
