# tailstff/madmax architecture

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

- Interactive diagram: https://gitdiagram.com/tailstff/madmax
- Repository: https://github.com/tailstff/madmax

## Overview

MadMax is an embedded equipment-control and monitoring system. Its principal user workflow is browser navigation to live data or configuration, HTTP requests to the device, and responses rendered in the UI. The device also exposes Modbus TCP memory to clients and publishes queued MQTT messages to a broker. Domain modules cover variables, equipment, pump swapping, timing and control functions. The tree and excerpts establish application setup and several integrations; unsampled domain and API internals are shown as capabilities without speculative call links.

Main entry points: [`src/main.cpp`](https://github.com/tailstff/madmax/blob/pool0/src/main.cpp) (Device startup), [`data/app.js`](https://github.com/tailstff/madmax/blob/pool0/data/app.js) (UI application), [`lib/ModbusServerManager/ModbusServerManager.cpp`](https://github.com/tailstff/madmax/blob/pool0/lib/ModbusServerManager/ModbusServerManager.cpp) (Modbus server), [`src/WebAPI.cpp`](https://github.com/tailstff/madmax/blob/pool0/src/WebAPI.cpp) (Web API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Browser interface"]
  node_appjs["UI application<br/>[app.js]"]
  node_accumnav["Accum navigator<br/>[accumsNavigator.js]"]
  node_variablesnav["Variables navigator"]
  node_pumpswapnav["Pump swaps navigator"]
  node_systemnav["System navigator<br/>[madmaxSystem.js]"]
end

subgraph group_app["Device application"]
  node_main["Device startup<br/>[main.cpp]"]
  node_webapi["Web API<br/>[WebAPI.cpp]"]
  node_myapp["Application logic<br/>[myApp.cpp]"]
  node_environment["Execution environment<br/>[ExecutionEnv.cpp]"]
  node_digitalio["Digital I/O<br/>[DigitalInputs.cpp]"]
end

subgraph group_control["Control domains"]
  node_variables["Variables<br/>[Variable.h]"]
  node_equipment["Digital equipment"]
  node_timing["Timing controls<br/>[DelayOnOff.cpp]"]
  node_pump["Pump swapping<br/>[PumpSwap.cpp]"]
  node_controlmath["Control functions<br/>[PID.cpp]"]
end

subgraph group_integration["Protocols and storage"]
  node_modbus["Modbus server"]
  node_modbusmem[("Modbus memory")]
  node_binding["Protocol bindings<br/>[BindingManager.cpp]"]
  node_adapter["Modbus adapter<br/>[ModbusAdapter.cpp]"]
  node_mqtt["MQTT manager<br/>[MQTTManager.cpp]"]
  node_prefs[("Preferences<br/>[MiniPrefs.cpp]")]
end

node_operator(("Operator"))
node_browser(("Browser"))
node_modbusclient(("Modbus client"))
node_broker(("MQTT broker"))
node_deviceio(("I/O hardware"))

node_operator -->|"uses"| node_browser
node_browser -->|"loads"| node_appjs
node_appjs -->|"opens"| node_accumnav
node_appjs -->|"opens"| node_variablesnav
node_appjs -->|"opens"| node_pumpswapnav
node_appjs -->|"opens"| node_systemnav
node_appjs -->|"requests HTTP"| node_webapi
node_webapi -->|"returns HTTP"| node_browser
node_main -->|"creates"| node_webapi
node_main -->|"creates"| node_myapp
node_main -->|"creates"| node_environment
node_main -->|"starts"| node_modbus
node_main -->|"starts"| node_mqtt
node_main -->|"initializes"| node_digitalio
node_modbusclient -->|"requests Modbus"| node_modbus
node_modbus -->|"reads and writes"| node_modbusmem
node_modbus -->|"returns response"| node_modbusclient
node_binding -->|"dispatches binding"| node_adapter
node_mqtt -->|"publishes"| node_broker
node_deviceio -->|"supplies signals"| node_digitalio

click node_appjs "https://github.com/tailstff/madmax/blob/pool0/data/app.js"
click node_accumnav "https://github.com/tailstff/madmax/blob/pool0/data/accumsNavigator/accumsNavigator.js"
click node_variablesnav "https://github.com/tailstff/madmax/blob/pool0/data/variablesNavigator/variablesNavigator.js"
click node_pumpswapnav "https://github.com/tailstff/madmax/blob/pool0/data/pumpSwapsNavigator/pumpSwapsNavigator.js"
click node_systemnav "https://github.com/tailstff/madmax/blob/pool0/data/madmaxSystem/madmaxSystem.js"
click node_main "https://github.com/tailstff/madmax/blob/pool0/src/main.cpp"
click node_webapi "https://github.com/tailstff/madmax/blob/pool0/src/WebAPI.cpp"
click node_myapp "https://github.com/tailstff/madmax/blob/pool0/src/myApp.cpp"
click node_environment "https://github.com/tailstff/madmax/blob/pool0/lib/ExecutionEnv/ExecutionEnv.cpp"
click node_digitalio "https://github.com/tailstff/madmax/blob/pool0/lib/DigitalInputs/DigitalInputs.cpp"
click node_variables "https://github.com/tailstff/madmax/blob/pool0/lib/Variable/Variable.h"
click node_equipment "https://github.com/tailstff/madmax/blob/pool0/lib/DigitalEquipment/DigitalEquipment.cpp"
click node_timing "https://github.com/tailstff/madmax/blob/pool0/lib/DelayOnOff/DelayOnOff.cpp"
click node_pump "https://github.com/tailstff/madmax/blob/pool0/lib/PumpSwap/PumpSwap.cpp"
click node_controlmath "https://github.com/tailstff/madmax/blob/pool0/lib/PID/PID.cpp"
click node_modbus "https://github.com/tailstff/madmax/blob/pool0/lib/ModbusServerManager/ModbusServerManager.cpp"
click node_modbusmem "https://github.com/tailstff/madmax/blob/pool0/lib/ModbusServerMemoryManager/ModbusServerMemoryManager.cpp"
click node_binding "https://github.com/tailstff/madmax/blob/pool0/lib/Binding/BindingManager.cpp"
click node_adapter "https://github.com/tailstff/madmax/blob/pool0/lib/ProtocolAdapters/ModbusAdapter.cpp"
click node_mqtt "https://github.com/tailstff/madmax/blob/pool0/lib/MQTTManager/MQTTManager.cpp"
click node_prefs "https://github.com/tailstff/madmax/blob/pool0/lib/MiniPrefs/MiniPrefs.cpp"

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_appjs,node_accumnav,node_variablesnav,node_pumpswapnav,node_systemnav,node_browser,node_modbusclient toneBlue
class node_main,node_webapi,node_myapp,node_environment,node_digitalio toneAmber
class node_variables,node_equipment,node_timing,node_pump,node_controlmath toneMint
class node_modbus,node_modbusmem,node_binding,node_adapter,node_mqtt,node_prefs toneRose
class node_operator,node_broker,node_deviceio toneIndigo
```

## Components

### Browser interface

- [UI application](https://github.com/tailstff/madmax/blob/pool0/data/app.js): `data/app.js`
- [Accum navigator](https://github.com/tailstff/madmax/blob/pool0/data/accumsNavigator/accumsNavigator.js): `data/accumsNavigator/accumsNavigator.js`
- [Variables navigator](https://github.com/tailstff/madmax/blob/pool0/data/variablesNavigator/variablesNavigator.js): `data/variablesNavigator/variablesNavigator.js`
- [Pump swaps navigator](https://github.com/tailstff/madmax/blob/pool0/data/pumpSwapsNavigator/pumpSwapsNavigator.js): `data/pumpSwapsNavigator/pumpSwapsNavigator.js`
- [System navigator](https://github.com/tailstff/madmax/blob/pool0/data/madmaxSystem/madmaxSystem.js): `data/madmaxSystem/madmaxSystem.js`

### Device application

- [Device startup](https://github.com/tailstff/madmax/blob/pool0/src/main.cpp): `src/main.cpp`
- [Web API](https://github.com/tailstff/madmax/blob/pool0/src/WebAPI.cpp): `src/WebAPI.cpp`
- [Application logic](https://github.com/tailstff/madmax/blob/pool0/src/myApp.cpp): `src/myApp.cpp`
- [Execution environment](https://github.com/tailstff/madmax/blob/pool0/lib/ExecutionEnv/ExecutionEnv.cpp): `lib/ExecutionEnv/ExecutionEnv.cpp`
- [Digital I/O](https://github.com/tailstff/madmax/blob/pool0/lib/DigitalInputs/DigitalInputs.cpp): `lib/DigitalInputs/DigitalInputs.cpp`

### Control domains

- [Variables](https://github.com/tailstff/madmax/blob/pool0/lib/Variable/Variable.h): `lib/Variable/Variable.h`
- [Digital equipment](https://github.com/tailstff/madmax/blob/pool0/lib/DigitalEquipment/DigitalEquipment.cpp): `lib/DigitalEquipment/DigitalEquipment.cpp`
- [Timing controls](https://github.com/tailstff/madmax/blob/pool0/lib/DelayOnOff/DelayOnOff.cpp): `lib/DelayOnOff/DelayOnOff.cpp`
- [Pump swapping](https://github.com/tailstff/madmax/blob/pool0/lib/PumpSwap/PumpSwap.cpp): `lib/PumpSwap/PumpSwap.cpp`
- [Control functions](https://github.com/tailstff/madmax/blob/pool0/lib/PID/PID.cpp): `lib/PID/PID.cpp`

### Protocols and storage

- [Modbus server](https://github.com/tailstff/madmax/blob/pool0/lib/ModbusServerManager/ModbusServerManager.cpp): `lib/ModbusServerManager/ModbusServerManager.cpp`
- [Modbus memory](https://github.com/tailstff/madmax/blob/pool0/lib/ModbusServerMemoryManager/ModbusServerMemoryManager.cpp): `lib/ModbusServerMemoryManager/ModbusServerMemoryManager.cpp`
- [Protocol bindings](https://github.com/tailstff/madmax/blob/pool0/lib/Binding/BindingManager.cpp): `lib/Binding/BindingManager.cpp`
- [Modbus adapter](https://github.com/tailstff/madmax/blob/pool0/lib/ProtocolAdapters/ModbusAdapter.cpp): `lib/ProtocolAdapters/ModbusAdapter.cpp`
- [MQTT manager](https://github.com/tailstff/madmax/blob/pool0/lib/MQTTManager/MQTTManager.cpp): `lib/MQTTManager/MQTTManager.cpp`
- [Preferences](https://github.com/tailstff/madmax/blob/pool0/lib/MiniPrefs/MiniPrefs.cpp): `lib/MiniPrefs/MiniPrefs.cpp`

### Other components

- **Operator**
- **Browser**
- **Modbus client**
- **MQTT broker**
- **I/O hardware**

## Connections

- Operator → Browser: uses
- Browser → UI application: loads
- UI application → Accum navigator: opens
- UI application → Variables navigator: opens
- UI application → Pump swaps navigator: opens
- UI application → System navigator: opens
- UI application → Web API: requests HTTP
- Web API → Browser: returns HTTP
- Device startup → Web API: creates
- Device startup → Application logic: creates
- Device startup → Execution environment: creates
- Device startup → Modbus server: starts
- Device startup → MQTT manager: starts
- Device startup → Digital I/O: initializes
- Modbus client → Modbus server: requests Modbus
- Modbus server → Modbus memory: reads and writes
- Modbus server → Modbus client: returns response
- Protocol bindings → Modbus adapter: dispatches binding
- MQTT manager → MQTT broker: publishes
- I/O hardware → Digital I/O: supplies signals
