# pranadeepveerabathini-cmyk/nutribot architecture

> Architecture diagram of the GitHub repository pranadeepveerabathini-cmyk/nutribot, 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/pranadeepveerabathini-cmyk/nutribot
- Repository: https://github.com/pranadeepveerabathini-cmyk/nutribot

## Overview

NutriBot is a Flask-based AI nutrition web app. Users interact through the browser UI; Flask handles requests, applies account and usage rules, invokes nutrition generation where needed, and returns results for display. The product also includes profile and chat persistence, account verification and recovery, subscription billing, meal logging, food-photo analysis, and PDF plan export. README capabilities guide the feature map; sampled excerpts do not show every route’s wiring, so uncertain connections are omitted.

Main entry points: [`app.py`](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py) (Flask routes), [`agent.py`](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/agent.py) (Nutrition agent), [`auth.py`](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/auth.py) (Authentication), [`static/js/app.js`](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/static/js/app.js) (Web interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["Web experience"]
  node_ui["Web interface<br/>[app.js]"]
  node_webapp["Flask routes<br/>[app.py]"]
end

subgraph group_nutrition["Nutrition services"]
  node_nutrition_agent["Nutrition agent<br/>[agent.py]"]
  node_chat["AI chat<br/>[app.py]"]
  node_meal_analysis["Meal analysis<br/>[app.py]"]
  node_meal_plans["Meal planning<br/>[app.py]"]
  node_bmi["BMI advice<br/>[app.py]"]
  node_family_plans["Family planning<br/>[app.py]"]
  node_health_tips["Health tips<br/>[app.py]"]
  node_food_scanner["Food photo scanner<br/>[app.py]"]
  node_meal_log["Meal logging<br/>[app.py]"]
  node_pdf_export["Plan PDF export<br/>[pdf_generator.py]"]
end

subgraph group_accounts["Accounts and billing"]
  node_auth["Authentication<br/>[auth.py]"]
  node_email["Email delivery<br/>[email_sender.py]"]
  node_billing["Subscriptions<br/>[billing.py]"]
end

subgraph group_data["User data"]
  node_models["Data models<br/>[models.py]"]
  node_db[("NutriBot database<br/>[nutribot.db]")]
end

subgraph group_integrations["External integrations"]
  node_gemini{{"Google Gemini"}}
  node_groq{{"Groq"}}
  node_resend{{"Resend"}}
  node_stripe{{"Stripe"}}
end

node_user(("User"))

node_user -->|"uses"| node_ui
node_ui -->|"API requests"| node_webapp
node_webapp -->|"returns results"| node_ui
node_webapp -->|"dispatches"| node_chat
node_webapp -->|"dispatches"| node_meal_analysis
node_webapp -->|"dispatches"| node_meal_plans
node_webapp -->|"dispatches"| node_bmi
node_webapp -->|"dispatches"| node_family_plans
node_webapp -->|"dispatches"| node_health_tips
node_webapp -->|"dispatches"| node_food_scanner
node_webapp -->|"dispatches"| node_meal_log
node_webapp -->|"generates"| node_pdf_export
node_chat -->|"generates response"| node_nutrition_agent
node_meal_analysis -->|"analyzes prompt"| node_nutrition_agent
node_meal_plans -->|"generates plan"| node_nutrition_agent
node_family_plans -->|"generates plan"| node_nutrition_agent
node_food_scanner -->|"analyzes image"| node_nutrition_agent
node_nutrition_agent -->|"generates content"| node_gemini
node_nutrition_agent -.->|"fallback generation"| node_groq
node_webapp -->|"registers blueprint"| node_auth
node_auth -->|"reads and writes"| node_models
node_auth -->|"sends verification"| node_email
node_auth -->|"sends reset link"| node_email
node_email -->|"sends email"| node_resend
node_webapp -->|"queries and updates"| node_models
node_models -->|"persists records"| node_db
node_webapp -->|"handles billing"| node_billing
node_billing -->|"checkout and portal"| node_stripe
node_stripe -->|"webhook events"| node_webapp

click node_ui "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/static/js/app.js"
click node_webapp "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py"
click node_nutrition_agent "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/agent.py"
click node_chat "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py"
click node_meal_analysis "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py"
click node_meal_plans "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py"
click node_bmi "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py"
click node_family_plans "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py"
click node_health_tips "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py"
click node_food_scanner "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py"
click node_meal_log "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py"
click node_pdf_export "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/pdf_generator.py"
click node_auth "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/auth.py"
click node_email "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/email_sender.py"
click node_billing "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/billing.py"
click node_models "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/models.py"
click node_db "https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/instance/nutribot.db"

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_ui,node_webapp,node_user toneBlue
class node_nutrition_agent,node_chat,node_meal_analysis,node_meal_plans,node_bmi,node_family_plans,node_health_tips,node_food_scanner,node_meal_log,node_pdf_export toneAmber
class node_auth,node_email,node_billing toneMint
class node_models,node_db toneRose
class node_gemini,node_groq,node_resend,node_stripe toneIndigo
```

## Components

### Web experience

- [Web interface](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/static/js/app.js): `static/js/app.js`
- [Flask routes](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py): `app.py`

### Nutrition services

- [Nutrition agent](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/agent.py): `agent.py`
- [AI chat](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py): `app.py`
- [Meal analysis](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py): `app.py`
- [Meal planning](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py): `app.py`
- [BMI advice](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py): `app.py`
- [Family planning](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py): `app.py`
- [Health tips](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py): `app.py`
- [Food photo scanner](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py): `app.py`
- [Meal logging](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/app.py): `app.py`
- [Plan PDF export](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/pdf_generator.py): `pdf_generator.py`

### Accounts and billing

- [Authentication](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/auth.py): `auth.py`
- [Email delivery](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/email_sender.py): `email_sender.py`
- [Subscriptions](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/billing.py): `billing.py`

### User data

- [Data models](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/models.py): `models.py`
- [NutriBot database](https://github.com/pranadeepveerabathini-cmyk/nutribot/blob/main/instance/nutribot.db): `instance/nutribot.db`

### External integrations

- **Google Gemini**
- **Groq**
- **Resend**
- **Stripe**

### Other components

- **User**

## Connections

- User → Web interface: uses
- Web interface → Flask routes: API requests
- Flask routes → Web interface: returns results
- Flask routes → AI chat: dispatches
- Flask routes → Meal analysis: dispatches
- Flask routes → Meal planning: dispatches
- Flask routes → BMI advice: dispatches
- Flask routes → Family planning: dispatches
- Flask routes → Health tips: dispatches
- Flask routes → Food photo scanner: dispatches
- Flask routes → Meal logging: dispatches
- Flask routes → Plan PDF export: generates
- AI chat → Nutrition agent: generates response
- Meal analysis → Nutrition agent: analyzes prompt
- Meal planning → Nutrition agent: generates plan
- Family planning → Nutrition agent: generates plan
- Food photo scanner → Nutrition agent: analyzes image
- Nutrition agent → Google Gemini: generates content
- Nutrition agent → Groq: fallback generation
- Flask routes → Authentication: registers blueprint
- Authentication → Data models: reads and writes
- Authentication → Email delivery: sends verification
- Authentication → Email delivery: sends reset link
- Email delivery → Resend: sends email
- Flask routes → Data models: queries and updates
- Data models → NutriBot database: persists records
- Flask routes → Subscriptions: handles billing
- Subscriptions → Stripe: checkout and portal
- Stripe → Flask routes: webhook events
