digraph { node [color=lightgrey fontname=Arial shape=ellipse style=filled] edge [fontname=Arial] subgraph cluster_sensor_nodes { color=blue label="Ad-hoc Network" style=dashed "Sensor Nodes 1" [label="ESP8266 Nodes (Temperature Sensors)"] "Sensor Nodes 2" [label="ESP8266 Nodes (Temperature Sensors)"] "Sensor Nodes 3" [label="ESP8266 Nodes (Temperature Sensors)"] "Sensor Nodes 4" [label="ESP8266 Nodes (Temperature Sensors)"] } "Exit Node" [label="ESP8266 (Exit Node)"] "Backend Server" [label="Rust Backend (on PC)"] "Postgres DB" [label="PostgreSQL Database"] Frontend [label="Frontend (Web Browser/App)"] API [label=API] User [label=User] "Sensor Nodes 1" -> "Exit Node" [label="Sends Data"] "Sensor Nodes 2" -> "Exit Node" [label="Sends Data"] "Sensor Nodes 3" -> "Exit Node" [label="Sends Data"] "Sensor Nodes 4" -> "Sensor Nodes 3" [label="Sends Data"] "Exit Node" -> "Backend Server" [label="Sends Data over WLAN"] "Backend Server" -> "Postgres DB" [label="Persists Data in DB"] "Backend Server" -> API [label="Provides API Endpoints"] Frontend -> API [label="API Calls to Backend"] User -> Frontend [label="Interacts with Frontend"] }