# ilittleangel/cgm-remote-monitor architecture

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

- Interactive diagram: https://gitdiagram.com/ilittleangel/cgm-remote-monitor
- Repository: https://github.com/ilittleangel/cgm-remote-monitor

## Overview

Nightscout is a web-based CGM monitor: a server reads glucose and treatment data from MongoDB, exposes APIs and live updates, and caregiver-facing clients visualize readings, predictions, reports, and alarms. The graph separates server/API access, client visualization and plugins, reporting, and administration/realtime services. Some key modules are indexed but unsampled; edges are limited to README statements or relationships visible in excerpts and the source index, so internal data paths not shown there are omitted.

Main entry points: [`lib/client/index.js`](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/client/index.js) (Monitor Client), [`lib/server/app.js`](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/server/app.js) (Web App), [`lib/plugins/index.js`](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/plugins/index.js) (Plugin Registry), [`lib/report_plugins/index.js`](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/report_plugins/index.js) (Report Plugins)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_server["Server and APIs"]
  node_server_process["Server Process<br/>[server.js]"]
  node_web_app["Web App<br/>[app.js]"]
  node_api_v1["REST API<br/>[index.js]"]
  node_api_v2["API v2<br/>[index.js]"]
  node_api_v3["API v3<br/>[index.js]"]
end

subgraph group_client["Caregiver Monitor"]
  node_monitor_client["Monitor Client<br/>[index.js]"]
  node_client_data["Client Data<br/>[ddata.js]"]
  node_client_renderer["Chart Renderer<br/>[renderer.js]"]
  node_client_settings["Browser Settings"]
  node_plugin_registry["Plugin Registry<br/>[index.js]"]
  node_plugin_forecasts["Forecast Plugins<br/>[ar2.js]"]
  node_plugin_loop["Loop Integration<br/>[loop.js]"]
  node_plugin_openaps["OpenAPS Integration<br/>[openaps.js]"]
end

subgraph group_reports["Reports"]
  node_report_client["Report Client<br/>[reportclient.js]"]
  node_report_plugins["Report Plugins<br/>[index.js]"]
  node_report_daily["Daily Reports<br/>[daytoday.js]"]
  node_report_distribution["Glucose Distribution"]
  node_report_loop["Loop Analysis<br/>[loopalyzer.js]"]
end

subgraph group_realtime["Realtime and Admin"]
  node_storage_socket["Storage Updates<br/>[storageSocket.js]"]
  node_authorization["Authorization<br/>[index.js]"]
  node_auth_storage["Auth Storage<br/>[storage.js]"]
  node_admin_plugins["Admin Actions<br/>[index.js]"]
end

node_caregivers(("Caregivers"))
node_mongo[("MongoDB")]

node_caregivers -->|"view monitor"| node_web_app
node_server_process -->|"starts"| node_web_app
node_web_app -->|"mounts routes"| node_api_v1
node_web_app -->|"mounts routes"| node_api_v2
node_web_app -->|"mounts routes"| node_api_v3
node_server_process -->|"reads CGM data"| node_mongo
node_monitor_client -->|"requests status"| node_api_v1
node_monitor_client -->|"uses data model"| node_client_data
node_monitor_client -->|"renders monitor"| node_client_renderer
node_monitor_client -->|"loads settings"| node_client_settings
node_monitor_client -->|"runs plugins"| node_plugin_registry
node_plugin_registry -->|"registers"| node_plugin_forecasts
node_plugin_registry -->|"registers"| node_plugin_loop
node_plugin_registry -->|"registers"| node_plugin_openaps
node_report_client -->|"loads reports"| node_report_plugins
node_report_plugins -->|"registers"| node_report_daily
node_report_plugins -->|"registers"| node_report_distribution
node_report_plugins -->|"registers"| node_report_loop
node_api_v3 -->|"initializes"| node_storage_socket
node_storage_socket -->|"checks access"| node_authorization
node_authorization -->|"uses storage"| node_auth_storage
node_auth_storage -.->|"queries records"| node_mongo
node_admin_plugins -.->|"offers admin actions"| node_caregivers

click node_server_process "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/server/server.js"
click node_web_app "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/server/app.js"
click node_api_v1 "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/api/index.js"
click node_api_v2 "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/api2/index.js"
click node_api_v3 "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/api3/index.js"
click node_monitor_client "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/client/index.js"
click node_client_data "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/data/ddata.js"
click node_client_renderer "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/client/renderer.js"
click node_client_settings "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/client/browser-settings.js"
click node_plugin_registry "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/plugins/index.js"
click node_plugin_forecasts "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/plugins/ar2.js"
click node_plugin_loop "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/plugins/loop.js"
click node_plugin_openaps "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/plugins/openaps.js"
click node_report_client "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/report/reportclient.js"
click node_report_plugins "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/report_plugins/index.js"
click node_report_daily "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/report_plugins/daytoday.js"
click node_report_distribution "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/report_plugins/glucosedistribution.js"
click node_report_loop "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/report_plugins/loopalyzer.js"
click node_storage_socket "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/api3/storageSocket.js"
click node_authorization "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/authorization/index.js"
click node_auth_storage "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/authorization/storage.js"
click node_admin_plugins "https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/admin_plugins/index.js"

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_server_process,node_web_app,node_api_v1,node_api_v2,node_api_v3 toneBlue
class node_monitor_client,node_client_data,node_client_renderer,node_client_settings,node_plugin_registry,node_plugin_forecasts,node_plugin_loop,node_plugin_openaps,node_mongo toneAmber
class node_report_client,node_report_plugins,node_report_daily,node_report_distribution,node_report_loop toneMint
class node_storage_socket,node_authorization,node_auth_storage,node_admin_plugins toneRose
class node_caregivers toneIndigo
```

## Components

### Server and APIs

- [Server Process](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/server/server.js): `lib/server/server.js`
- [Web App](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/server/app.js): `lib/server/app.js`
- [REST API](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/api/index.js): `lib/api/index.js`
- [API v2](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/api2/index.js): `lib/api2/index.js`
- [API v3](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/api3/index.js): `lib/api3/index.js`

### Caregiver Monitor

- [Monitor Client](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/client/index.js): `lib/client/index.js`
- [Client Data](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/data/ddata.js): `lib/data/ddata.js`
- [Chart Renderer](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/client/renderer.js): `lib/client/renderer.js`
- [Browser Settings](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/client/browser-settings.js): `lib/client/browser-settings.js`
- [Plugin Registry](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/plugins/index.js): `lib/plugins/index.js`
- [Forecast Plugins](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/plugins/ar2.js): `lib/plugins/ar2.js`
- [Loop Integration](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/plugins/loop.js): `lib/plugins/loop.js`
- [OpenAPS Integration](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/plugins/openaps.js): `lib/plugins/openaps.js`

### Reports

- [Report Client](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/report/reportclient.js): `lib/report/reportclient.js`
- [Report Plugins](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/report_plugins/index.js): `lib/report_plugins/index.js`
- [Daily Reports](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/report_plugins/daytoday.js): `lib/report_plugins/daytoday.js`
- [Glucose Distribution](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/report_plugins/glucosedistribution.js): `lib/report_plugins/glucosedistribution.js`
- [Loop Analysis](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/report_plugins/loopalyzer.js): `lib/report_plugins/loopalyzer.js`

### Realtime and Admin

- [Storage Updates](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/api3/storageSocket.js): `lib/api3/storageSocket.js`
- [Authorization](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/authorization/index.js): `lib/authorization/index.js`
- [Auth Storage](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/authorization/storage.js): `lib/authorization/storage.js`
- [Admin Actions](https://github.com/ilittleangel/cgm-remote-monitor/blob/master/lib/admin_plugins/index.js): `lib/admin_plugins/index.js`

### Other components

- **Caregivers**
- **MongoDB**

## Connections

- Caregivers → Web App: view monitor (evidence: `README.md`)
- Server Process → Web App: starts (evidence: `lib/server/server.js`)
- Web App → REST API: mounts routes (evidence: `lib/server/app.js`)
- Web App → API v2: mounts routes (evidence: `lib/server/app.js`)
- Web App → API v3: mounts routes (evidence: `lib/server/app.js`)
- Server Process → MongoDB: reads CGM data (evidence: `README.md`)
- Monitor Client → REST API: requests status (evidence: `lib/client/index.js`)
- Monitor Client → Client Data: uses data model (evidence: `lib/client/index.js`)
- Monitor Client → Chart Renderer: renders monitor (evidence: `lib/client/index.js`)
- Monitor Client → Browser Settings: loads settings (evidence: `lib/client/index.js`)
- Monitor Client → Plugin Registry: runs plugins (evidence: `lib/client/index.js`)
- Plugin Registry → Forecast Plugins: registers (evidence: `lib/plugins/index.js`)
- Plugin Registry → Loop Integration: registers (evidence: `lib/plugins/index.js`)
- Plugin Registry → OpenAPS Integration: registers (evidence: `lib/plugins/index.js`)
- Report Client → Report Plugins: loads reports (evidence: `lib/report_plugins/index.js`)
- Report Plugins → Daily Reports: registers (evidence: `lib/report_plugins/index.js`)
- Report Plugins → Glucose Distribution: registers (evidence: `lib/report_plugins/index.js`)
- Report Plugins → Loop Analysis: registers (evidence: `lib/report_plugins/index.js`)
- API v3 → Storage Updates: initializes (evidence: `lib/api3/index.js`)
- Storage Updates → Authorization: checks access (evidence: `lib/api3/storageSocket.js`)
- Authorization → Auth Storage: uses storage (evidence: `lib/authorization/index.js`)
- Auth Storage → MongoDB: queries records
- Admin Actions → Caregivers: offers admin actions
