# ivanerricis/easylab-web architecture

> Architecture diagram of the GitHub repository ivanerricis/easylab-web, 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/ivanerricis/easylab-web
- Repository: https://github.com/ivanerricis/easylab-web

## Overview

EasyLab Web gestisce un laboratorio di riparazione: il personale mantiene clienti e dispositivi, registra interventi e guasti e produce report/ricevute PDF per i clienti. Il percorso principale parte dalle pagine React, passa per l’API Express e termina nelle funzionalità di gestione e persistenza. Il prodotto include anche calendario, dashboard, autenticazione e impostazioni operative, tra cui backup e configurazione email. Le relazioni tra pagine e rotte sono documentate in parte; i collegamenti non verificati nel codice campionato sono indicati come non verificati.

Main entry points: [`frontend/src/lib/api/client.ts`](https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/lib/api/client.ts) (Client API), [`backend/src/app.ts`](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/app.ts) (Server Express), [`frontend/src/App.tsx`](https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/App.tsx) (App e rotte), [`backend/src/routes/reports.ts`](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/routes/reports.ts) (Rotte report)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Interfaccia laboratorio"]
  node_app["App e rotte<br/>[App.tsx]"]
  node_customer_pages["Clienti<br/>[CustomerPage.tsx]"]
  node_intervention_pages["Interventi"]
  node_report_pages["Report PDF<br/>[ReportsPage.tsx]"]
  node_calendar["Calendario"]
  node_dashboard["Dashboard<br/>[DashboardPage.tsx]"]
  node_settings_ui["Impostazioni<br/>[SettingsPage.tsx]"]
  node_api_client["Client API<br/>[client.ts]"]
end

subgraph group_backend["API e dominio"]
  node_server["Server Express<br/>[app.ts]"]
  node_entity_routes["Rotte laboratorio<br/>[interventions.ts]"]
  node_report_routes["Rotte report<br/>[reports.ts]"]
end

subgraph group_data["Dati persistenti"]
  node_schema["Schema dati<br/>[schema.ts]"]
  node_postgres[("PostgreSQL")]
end

subgraph group_security["Accesso e impostazioni"]
  node_auth_routes["Autenticazione<br/>[auth.ts]"]
  node_settings_routes["Rotte impostazioni<br/>[settings.ts]"]
  node_auth_manager["Gestione account<br/>[authManager.ts]"]
  node_company_settings["Dati azienda<br/>[companyManager.ts]"]
end

subgraph group_operations["Operazioni e output"]
  node_backup["Backup e restore<br/>[backupManager.ts]"]
  node_email["Email<br/>[emailManager.ts]"]
  node_notifications["Notifiche"]
  node_pdf_service["Generazione PDF<br/>[reportPdf.ts]"]
end

node_staff(("Personale"))

node_staff -->|"usa"| node_app
node_app -->|"instrada"| node_customer_pages
node_app -->|"instrada"| node_intervention_pages
node_app -->|"instrada"| node_report_pages
node_app -->|"instrada"| node_settings_ui
node_customer_pages -.->|"richiede dati"| node_api_client
node_intervention_pages -.->|"richiede dati"| node_api_client
node_report_pages -.->|"richiede dati"| node_api_client
node_calendar -.->|"carica interventi"| node_api_client
node_dashboard -.->|"carica statistiche"| node_api_client
node_settings_ui -.->|"gestisce impostazioni"| node_api_client
node_api_client -->|"chiama API"| node_server
node_server -->|"monta rotte"| node_auth_routes
node_server -->|"monta rotte"| node_entity_routes
node_server -->|"monta rotte"| node_report_routes
node_server -.->|"monta rotte"| node_settings_routes
node_entity_routes -.->|"accede ai dati"| node_schema
node_report_routes -.->|"accede ai dati"| node_schema
node_schema -->|"definisce struttura"| node_postgres
node_auth_routes -->|"delega account"| node_auth_manager
node_auth_manager -->|"legge e scrive"| node_postgres
node_auth_manager -->|"registra accessi"| node_notifications
node_settings_routes -.->|"configura azienda"| node_company_settings
node_server -->|"avvia scheduler"| node_backup
node_backup -->|"legge dati azienda"| node_company_settings
node_backup -->|"invia avvisi"| node_email
node_report_routes -.->|"genera ricevute"| node_pdf_service
node_report_pages -->|"gestisce report"| node_report_routes

click node_app "https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/App.tsx"
click node_customer_pages "https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/pages/customers/CustomerPage.tsx"
click node_intervention_pages "https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/pages/interventions/InterventionsPage.tsx"
click node_report_pages "https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/pages/reports/ReportsPage.tsx"
click node_calendar "https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/pages/calendar/components/interventions-calendar.tsx"
click node_dashboard "https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/pages/dashboard/DashboardPage.tsx"
click node_settings_ui "https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/pages/settings/SettingsPage.tsx"
click node_api_client "https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/lib/api/client.ts"
click node_server "https://github.com/ivanerricis/easylab-web/blob/main/backend/src/app.ts"
click node_auth_routes "https://github.com/ivanerricis/easylab-web/blob/main/backend/src/routes/auth.ts"
click node_entity_routes "https://github.com/ivanerricis/easylab-web/blob/main/backend/src/routes/interventions.ts"
click node_report_routes "https://github.com/ivanerricis/easylab-web/blob/main/backend/src/routes/reports.ts"
click node_settings_routes "https://github.com/ivanerricis/easylab-web/blob/main/backend/src/routes/settings.ts"
click node_schema "https://github.com/ivanerricis/easylab-web/blob/main/backend/src/db/schema.ts"
click node_auth_manager "https://github.com/ivanerricis/easylab-web/blob/main/backend/src/services/authManager.ts"
click node_company_settings "https://github.com/ivanerricis/easylab-web/blob/main/backend/src/services/companyManager.ts"
click node_backup "https://github.com/ivanerricis/easylab-web/blob/main/backend/src/services/backupManager.ts"
click node_email "https://github.com/ivanerricis/easylab-web/blob/main/backend/src/services/emailManager.ts"
click node_notifications "https://github.com/ivanerricis/easylab-web/blob/main/backend/src/services/notificationManager.ts"
click node_pdf_service "https://github.com/ivanerricis/easylab-web/blob/main/backend/src/services/reportPdf.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_customer_pages,node_intervention_pages,node_report_pages,node_calendar,node_dashboard,node_settings_ui,node_api_client toneBlue
class node_server,node_entity_routes,node_report_routes toneAmber
class node_schema,node_postgres toneMint
class node_auth_routes,node_settings_routes,node_auth_manager,node_company_settings toneRose
class node_backup,node_email,node_notifications,node_pdf_service,node_staff toneIndigo
```

## Components

### Interfaccia laboratorio

- [App e rotte](https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Clienti](https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/pages/customers/CustomerPage.tsx): `frontend/src/pages/customers/CustomerPage.tsx`
- [Interventi](https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/pages/interventions/InterventionsPage.tsx): `frontend/src/pages/interventions/InterventionsPage.tsx`
- [Report PDF](https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/pages/reports/ReportsPage.tsx): `frontend/src/pages/reports/ReportsPage.tsx`
- [Calendario](https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/pages/calendar/components/interventions-calendar.tsx): `frontend/src/pages/calendar/components/interventions-calendar.tsx`
- [Dashboard](https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/pages/dashboard/DashboardPage.tsx): `frontend/src/pages/dashboard/DashboardPage.tsx`
- [Impostazioni](https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/pages/settings/SettingsPage.tsx): `frontend/src/pages/settings/SettingsPage.tsx`
- [Client API](https://github.com/ivanerricis/easylab-web/blob/main/frontend/src/lib/api/client.ts): `frontend/src/lib/api/client.ts`

### API e dominio

- [Server Express](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/app.ts): `backend/src/app.ts`
- [Rotte laboratorio](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/routes/interventions.ts): `backend/src/routes/interventions.ts`
- [Rotte report](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/routes/reports.ts): `backend/src/routes/reports.ts`

### Dati persistenti

- [Schema dati](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/db/schema.ts): `backend/src/db/schema.ts`
- **PostgreSQL**

### Accesso e impostazioni

- [Autenticazione](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/routes/auth.ts): `backend/src/routes/auth.ts`
- [Rotte impostazioni](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/routes/settings.ts): `backend/src/routes/settings.ts`
- [Gestione account](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/services/authManager.ts): `backend/src/services/authManager.ts`
- [Dati azienda](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/services/companyManager.ts): `backend/src/services/companyManager.ts`

### Operazioni e output

- [Backup e restore](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/services/backupManager.ts): `backend/src/services/backupManager.ts`
- [Email](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/services/emailManager.ts): `backend/src/services/emailManager.ts`
- [Notifiche](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/services/notificationManager.ts): `backend/src/services/notificationManager.ts`
- [Generazione PDF](https://github.com/ivanerricis/easylab-web/blob/main/backend/src/services/reportPdf.ts): `backend/src/services/reportPdf.ts`

### Other components

- **Personale**

## Connections

- Personale → App e rotte: usa (evidence: `README.md`)
- App e rotte → Clienti: instrada (evidence: `frontend/src/App.tsx`)
- App e rotte → Interventi: instrada (evidence: `frontend/src/App.tsx`)
- App e rotte → Report PDF: instrada (evidence: `frontend/src/App.tsx`)
- App e rotte → Impostazioni: instrada (evidence: `frontend/src/App.tsx`)
- Clienti → Client API: richiede dati
- Interventi → Client API: richiede dati
- Report PDF → Client API: richiede dati
- Calendario → Client API: carica interventi
- Dashboard → Client API: carica statistiche
- Impostazioni → Client API: gestisce impostazioni
- Client API → Server Express: chiama API (evidence: `README.md`)
- Server Express → Autenticazione: monta rotte (evidence: `backend/src/app.ts`)
- Server Express → Rotte laboratorio: monta rotte (evidence: `backend/src/app.ts`)
- Server Express → Rotte report: monta rotte (evidence: `backend/src/app.ts`)
- Server Express → Rotte impostazioni: monta rotte (evidence: `backend/src/app.ts`)
- Rotte laboratorio → Schema dati: accede ai dati
- Rotte report → Schema dati: accede ai dati
- Schema dati → PostgreSQL: definisce struttura (evidence: `README.md`)
- Autenticazione → Gestione account: delega account (evidence: `backend/src/routes/auth.ts`)
- Gestione account → PostgreSQL: legge e scrive (evidence: `backend/src/services/authManager.ts`)
- Gestione account → Notifiche: registra accessi (evidence: `backend/src/services/authManager.ts`)
- Rotte impostazioni → Dati azienda: configura azienda
- Server Express → Backup e restore: avvia scheduler (evidence: `backend/src/index.ts`)
- Backup e restore → Dati azienda: legge dati azienda (evidence: `backend/src/services/backupManager.ts`)
- Backup e restore → Email: invia avvisi (evidence: `backend/src/services/backupManager.ts`)
- Rotte report → Generazione PDF: genera ricevute
- Report PDF → Rotte report: gestisce report (evidence: `README.md`)
