# fonsecabarreto/envirosense-temperature-alert-system architecture

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

- Interactive diagram: https://gitdiagram.com/fonsecabarreto/envirosense-temperature-alert-system
- Repository: https://github.com/fonsecabarreto/envirosense-temperature-alert-system

## Overview

Envirosense collects temperature and humidity from an Arduino device, persists readings through an API, alerts registered contacts when temperature exceeds 30°C, and provides a Flutter reports application. The server routes and persistence/email calls are supported by sampled source. Flutter internals and Arduino implementation were not sampled, so their documented roles are shown without speculative internal wiring.

Main entry points: [`server/index.js`](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/index.js) (Express API), [`app-trablho/flutter_application_sig/lib/repositories/global_repository.dart`](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/app-trablho/flutter_application_sig/lib/repositories/global_repository.dart) (Global repository), [`arduino/index/index.ino`](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/arduino/index/index.ino) (Arduino monitor), [`server/src/controllers/metrics.js`](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/src/controllers/metrics.js) (Metrics controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_device["Sensing device"]
  node_sensor["Arduino monitor<br/>[index.ino]"]
end

subgraph group_api["API and persistence"]
  node_api_entry["Express API<br/>[index.js]"]
  node_metric_model["Metric model<br/>[metrics.js]"]
  node_metric_controller["Metrics controller<br/>[metrics.js]"]
  node_user_controller["Users controller<br/>[users.js]"]
  node_mongo_adapter["Mongo adapter<br/>[MongoAdapter.js]"]
  node_mongo_db[("MongoDB")]
end

subgraph group_alert["Safety alerts"]
  node_alert_logic["Threshold alert<br/>[index.js]"]
  node_email_vendor["Email sender<br/>[NodeMailer.js]"]
  node_smtp["Gmail SMTP"]
end

subgraph group_reports["Reports application"]
  node_app_entry["Flutter app<br/>[main.dart]"]
  node_screens["Report screens"]
  node_app_controllers["App controllers"]
  node_app_repository["Global repository"]
  node_app_models["Report models<br/>[models.dart]"]
end

node_operator(("System operator"))
node_recipients(("Alert recipients"))

node_operator -->|"configures"| node_sensor
node_sensor -->|"posts readings"| node_api_entry
node_api_entry -->|"creates DTO"| node_metric_model
node_api_entry -->|"stores and lists"| node_metric_controller
node_metric_controller -->|"uses database"| node_mongo_adapter
node_mongo_adapter -->|"connects"| node_mongo_db
node_api_entry -->|"checks threshold"| node_alert_logic
node_alert_logic -->|"lists recipients"| node_user_controller
node_alert_logic -->|"sends alert"| node_email_vendor
node_email_vendor -->|"sends mail"| node_smtp
node_smtp -->|"delivers alert"| node_recipients
node_operator -->|"views reports"| node_app_entry
node_app_entry -->|"presents"| node_screens
node_screens -->|"uses"| node_app_controllers
node_app_controllers -->|"requests data"| node_app_repository
node_app_repository -.->|"fetches reports"| node_api_entry
node_app_repository -.->|"uses models"| node_app_models

click node_sensor "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/arduino/index/index.ino"
click node_api_entry "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/index.js"
click node_metric_model "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/src/models/metrics.js"
click node_metric_controller "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/src/controllers/metrics.js"
click node_user_controller "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/src/controllers/users.js"
click node_mongo_adapter "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/src/database/MongoAdapter.js"
click node_alert_logic "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/index.js"
click node_email_vendor "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/src/vendors/NodeMailer.js"
click node_app_entry "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/app-trablho/flutter_application_sig/lib/main.dart"
click node_screens "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/tree/main/app-trablho/flutter_application_sig/lib/screens"
click node_app_controllers "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/tree/main/app-trablho/flutter_application_sig/lib/controllers"
click node_app_repository "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/app-trablho/flutter_application_sig/lib/repositories/global_repository.dart"
click node_app_models "https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/app-trablho/flutter_application_sig/lib/domain/models.dart"

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_sensor toneBlue
class node_api_entry,node_metric_model,node_metric_controller,node_user_controller,node_mongo_adapter,node_mongo_db toneAmber
class node_alert_logic,node_email_vendor,node_smtp toneMint
class node_app_entry,node_screens,node_app_controllers,node_app_repository,node_app_models toneRose
class node_operator,node_recipients toneIndigo
```

## Components

### Sensing device

- [Arduino monitor](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/arduino/index/index.ino): `arduino/index/index.ino`

### API and persistence

- [Express API](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/index.js): `server/index.js`
- [Metric model](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/src/models/metrics.js): `server/src/models/metrics.js`
- [Metrics controller](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/src/controllers/metrics.js): `server/src/controllers/metrics.js`
- [Users controller](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/src/controllers/users.js): `server/src/controllers/users.js`
- [Mongo adapter](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/src/database/MongoAdapter.js): `server/src/database/MongoAdapter.js`
- **MongoDB**

### Safety alerts

- [Threshold alert](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/index.js): `server/index.js`
- [Email sender](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/server/src/vendors/NodeMailer.js): `server/src/vendors/NodeMailer.js`
- **Gmail SMTP**

### Reports application

- [Flutter app](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/app-trablho/flutter_application_sig/lib/main.dart): `app-trablho/flutter_application_sig/lib/main.dart`
- [Report screens](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/tree/main/app-trablho/flutter_application_sig/lib/screens): `app-trablho/flutter_application_sig/lib/screens`
- [App controllers](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/tree/main/app-trablho/flutter_application_sig/lib/controllers): `app-trablho/flutter_application_sig/lib/controllers`
- [Global repository](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/app-trablho/flutter_application_sig/lib/repositories/global_repository.dart): `app-trablho/flutter_application_sig/lib/repositories/global_repository.dart`
- [Report models](https://github.com/fonsecabarreto/envirosense-temperature-alert-system/blob/main/app-trablho/flutter_application_sig/lib/domain/models.dart): `app-trablho/flutter_application_sig/lib/domain/models.dart`

### Other components

- **System operator**
- **Alert recipients**

## Connections

- System operator → Arduino monitor: configures
- Arduino monitor → Express API: posts readings
- Express API → Metric model: creates DTO
- Express API → Metrics controller: stores and lists
- Metrics controller → Mongo adapter: uses database
- Mongo adapter → MongoDB: connects
- Express API → Threshold alert: checks threshold
- Threshold alert → Users controller: lists recipients
- Threshold alert → Email sender: sends alert
- Email sender → Gmail SMTP: sends mail
- Gmail SMTP → Alert recipients: delivers alert
- System operator → Flutter app: views reports
- Flutter app → Report screens: presents
- Report screens → App controllers: uses
- App controllers → Global repository: requests data
- Global repository → Express API: fetches reports
- Global repository → Report models: uses models
