# beatrizgomes1/nutriia architecture

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

- Interactive diagram: https://gitdiagram.com/beatrizgomes1/nutriia
- Repository: https://github.com/beatrizgomes1/nutriia

## Overview

NutriIA is an Android nutrition assistant backed by a Python API and analysis core. Users create a profile and dietary restrictions, capture a product label or scan its barcode, and receive a personalized ingredient analysis they can revisit in history. The graph includes authentication, profile management, analysis, persistence, and AI/product-data capabilities documented by the README or source index. Some subsystem internals were not excerpted; dashed links mark documented but unverified integrations.

Main entry points: [`backend/app/services/nutrition_workflow_service.py`](https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/services/nutrition_workflow_service.py) (Analysis workflow), [`frontend/app/src/main/java/com/uece/nutriia/ui/inicio/InicioActivity.kt`](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/inicio/InicioActivity.kt) (Home screen), [`frontend/app/src/main/java/com/uece/nutriia/data/repository/AuthRepository.kt`](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/data/repository/AuthRepository.kt) (Authentication repository), [`backend/app/api/routes.py`](https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/api/routes.py) (API routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mobile["Android app"]
  node_home["Home screen<br/>[InicioActivity.kt]"]
  node_scan["Product capture"]
  node_progress["Analysis progress"]
  node_result["Analysis result"]
  node_history["Analysis history"]
  node_profileui["Profile and restrictions<br/>[PerfilActivity.kt]"]
  node_authui["Account screens<br/>[LoginActivity.kt]"]
  node_authrepo["Authentication repository<br/>[AuthRepository.kt]"]
  node_analysisrepo["Analysis repository"]
  node_api["HTTP API client<br/>[NutriIaApi.kt]"]
  node_session[("Session storage<br/>[SessionManager.kt]")]
end

subgraph group_api["Backend API"]
  node_routes["API routes<br/>[routes.py]"]
  node_auth["Authentication service<br/>[auth_service.py]"]
end

subgraph group_analysis["Nutrition analysis"]
  node_workflow["Analysis workflow"]
  node_nutrition["Nutrition assessment"]
  node_domain["Product and profile models<br/>[nutrition.py]"]
  node_profiles["Profile model<br/>[user.py]"]
end

subgraph group_data["Backend data"]
  node_dbservice["Persistence services"]
  node_db[("Database<br/>[models.py]")]
end

subgraph group_integrations["External integrations"]
  node_foodfacts["Barcode product lookup<br/>[open_food_facts.py]"]
  node_gemini["Gemini provider<br/>[nutrition_ai.py]"]
end

node_user(("User"))
node_foodservice["Open Food Facts"]
node_ai["Gemini service"]

node_user -->|"uses"| node_home
node_home -->|"opens capture"| node_scan
node_scan -->|"starts analysis"| node_progress
node_progress -->|"opens result"| node_result
node_home -->|"loads latest"| node_analysisrepo
node_history -->|"loads history"| node_analysisrepo
node_history -->|"opens result"| node_result
node_authui -->|"submits credentials"| node_authrepo
node_profileui -.->|"sets preferences"| node_user
node_authrepo -->|"calls endpoints"| node_api
node_authrepo -->|"saves tokens"| node_session
node_analysisrepo -.->|"calls endpoints"| node_api
node_api -->|"HTTP requests"| node_routes
node_routes -->|"auth operations"| node_auth
node_routes -->|"analysis requests"| node_workflow
node_workflow -->|"assesses product"| node_nutrition
node_workflow -->|"persists analysis"| node_dbservice
node_workflow -->|"looks up barcode"| node_foodfacts
node_nutrition -->|"uses domain models"| node_domain
node_nutrition -.->|"optional AI analysis"| node_gemini
node_foodfacts -.->|"queries products"| node_foodservice
node_gemini -.->|"requests inference"| node_ai
node_dbservice -->|"reads and writes"| node_db

click node_home "https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/inicio/InicioActivity.kt"
click node_scan "https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/escanear/EscanearActivity.kt"
click node_progress "https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/analise/AnaliseAndamentoActivity.kt"
click node_result "https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/resultado/ResultadoActivity.kt"
click node_history "https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/historico/HistoricoActivity.kt"
click node_profileui "https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/perfil/PerfilActivity.kt"
click node_authui "https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/login/LoginActivity.kt"
click node_authrepo "https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/data/repository/AuthRepository.kt"
click node_analysisrepo "https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/data/repository/AnaliseRepository.kt"
click node_api "https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/data/remote/NutriIaApi.kt"
click node_session "https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/data/local/SessionManager.kt"
click node_routes "https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/api/routes.py"
click node_auth "https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/services/auth_service.py"
click node_workflow "https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/services/nutrition_workflow_service.py"
click node_nutrition "https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/services/nutrition_service.py"
click node_domain "https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/models/nutrition.py"
click node_profiles "https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/models/user.py"
click node_dbservice "https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/services/database_service.py"
click node_db "https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/db/models.py"
click node_foodfacts "https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/services/open_food_facts.py"
click node_gemini "https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/gemini/nutrition_ai.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_home,node_scan,node_progress,node_result,node_history,node_profileui,node_authui,node_authrepo,node_analysisrepo,node_api,node_session,node_user toneBlue
class node_routes,node_auth toneAmber
class node_workflow,node_nutrition,node_domain,node_profiles toneMint
class node_dbservice,node_db toneRose
class node_foodfacts,node_gemini,node_foodservice,node_ai toneIndigo
```

## Components

### Android app

- [Home screen](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/inicio/InicioActivity.kt): `frontend/app/src/main/java/com/uece/nutriia/ui/inicio/InicioActivity.kt`
- [Product capture](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/escanear/EscanearActivity.kt): `frontend/app/src/main/java/com/uece/nutriia/ui/escanear/EscanearActivity.kt`
- [Analysis progress](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/analise/AnaliseAndamentoActivity.kt): `frontend/app/src/main/java/com/uece/nutriia/ui/analise/AnaliseAndamentoActivity.kt`
- [Analysis result](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/resultado/ResultadoActivity.kt): `frontend/app/src/main/java/com/uece/nutriia/ui/resultado/ResultadoActivity.kt`
- [Analysis history](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/historico/HistoricoActivity.kt): `frontend/app/src/main/java/com/uece/nutriia/ui/historico/HistoricoActivity.kt`
- [Profile and restrictions](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/perfil/PerfilActivity.kt): `frontend/app/src/main/java/com/uece/nutriia/ui/perfil/PerfilActivity.kt`
- [Account screens](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/ui/login/LoginActivity.kt): `frontend/app/src/main/java/com/uece/nutriia/ui/login/LoginActivity.kt`
- [Authentication repository](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/data/repository/AuthRepository.kt): `frontend/app/src/main/java/com/uece/nutriia/data/repository/AuthRepository.kt`
- [Analysis repository](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/data/repository/AnaliseRepository.kt): `frontend/app/src/main/java/com/uece/nutriia/data/repository/AnaliseRepository.kt`
- [HTTP API client](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/data/remote/NutriIaApi.kt): `frontend/app/src/main/java/com/uece/nutriia/data/remote/NutriIaApi.kt`
- [Session storage](https://github.com/beatrizgomes1/nutriia/blob/main/frontend/app/src/main/java/com/uece/nutriia/data/local/SessionManager.kt): `frontend/app/src/main/java/com/uece/nutriia/data/local/SessionManager.kt`

### Backend API

- [API routes](https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/api/routes.py): `backend/app/api/routes.py`
- [Authentication service](https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/services/auth_service.py): `backend/app/services/auth_service.py`

### Nutrition analysis

- [Analysis workflow](https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/services/nutrition_workflow_service.py): `backend/app/services/nutrition_workflow_service.py`
- [Nutrition assessment](https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/services/nutrition_service.py): `backend/app/services/nutrition_service.py`
- [Product and profile models](https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/models/nutrition.py): `backend/app/models/nutrition.py`
- [Profile model](https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/models/user.py): `backend/app/models/user.py`

### Backend data

- [Persistence services](https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/services/database_service.py): `backend/app/services/database_service.py`
- [Database](https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/db/models.py): `backend/app/db/models.py`

### External integrations

- [Barcode product lookup](https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/services/open_food_facts.py): `backend/app/services/open_food_facts.py`
- [Gemini provider](https://github.com/beatrizgomes1/nutriia/blob/main/backend/app/gemini/nutrition_ai.py): `backend/app/gemini/nutrition_ai.py`

### Other components

- **User**
- **Open Food Facts**
- **Gemini service**

## Connections

- User → Home screen: uses (evidence: `frontend/app/src/main/java/com/uece/nutriia/ui/inicio/InicioActivity.kt`)
- Home screen → Product capture: opens capture (evidence: `frontend/app/src/main/java/com/uece/nutriia/ui/inicio/InicioActivity.kt`)
- Product capture → Analysis progress: starts analysis (evidence: `frontend/app/src/main/java/com/uece/nutriia/ui/escanear/EscanearActivity.kt`)
- Analysis progress → Analysis result: opens result (evidence: `frontend/app/src/main/java/com/uece/nutriia/ui/analise/AnaliseAndamentoActivity.kt`)
- Home screen → Analysis repository: loads latest (evidence: `frontend/app/src/main/java/com/uece/nutriia/ui/inicio/InicioActivity.kt`)
- Analysis history → Analysis repository: loads history (evidence: `frontend/app/src/main/java/com/uece/nutriia/ui/historico/HistoricoActivity.kt`)
- Analysis history → Analysis result: opens result (evidence: `frontend/app/src/main/java/com/uece/nutriia/ui/historico/HistoricoActivity.kt`)
- Account screens → Authentication repository: submits credentials (evidence: `frontend/app/src/main/java/com/uece/nutriia/data/repository/AuthRepository.kt`)
- Profile and restrictions → User: sets preferences
- Authentication repository → HTTP API client: calls endpoints (evidence: `frontend/app/src/main/java/com/uece/nutriia/data/repository/AuthRepository.kt`)
- Authentication repository → Session storage: saves tokens (evidence: `frontend/app/src/main/java/com/uece/nutriia/data/repository/AuthRepository.kt`)
- Analysis repository → HTTP API client: calls endpoints (evidence: `frontend/app/src/main/java/com/uece/nutriia/data/repository/AnaliseRepository.kt`)
- HTTP API client → API routes: HTTP requests (evidence: `README.md`)
- API routes → Authentication service: auth operations (evidence: `backend/app/api/routes.py`)
- API routes → Analysis workflow: analysis requests (evidence: `backend/app/api/routes.py`)
- Analysis workflow → Nutrition assessment: assesses product (evidence: `backend/app/services/nutrition_workflow_service.py`)
- Analysis workflow → Persistence services: persists analysis (evidence: `backend/app/services/nutrition_workflow_service.py`)
- Analysis workflow → Barcode product lookup: looks up barcode (evidence: `backend/app/services/nutrition_workflow_service.py`)
- Nutrition assessment → Product and profile models: uses domain models (evidence: `backend/app/services/nutrition_service.py`)
- Nutrition assessment → Gemini provider: optional AI analysis
- Barcode product lookup → Open Food Facts: queries products
- Gemini provider → Gemini service: requests inference
- Persistence services → Database: reads and writes (evidence: `backend/app/services/database_service.py`)
