flowchart TD
subgraph L1[Browser]
Comp["Component"]:::browser
Client["Client Library"]:::browser
Queue[("Offline Queue")]:::browser
end
subgraph L2[LRS]
Endpoint["Statement Endpoint"]:::lrs
Storage[("Storage")]:::lrs
QueryAPI["Query API"]:::lrs
end
subgraph L3[Analytics]
Stream["Stream Processor"]:::analytics
OLAP[("OLAP Store")]:::analytics
end
subgraph L4[Dashboards]
Dash["Grafana / Observable"]:::dash
end
Comp --> Client --> Queue --> Endpoint
Endpoint --> Storage --> QueryAPI
Storage --> Stream --> OLAP --> Dash
click Comp call showNode("Comp")
click Client call showNode("Client")
click Queue call showNode("Queue")
click Endpoint call showNode("Endpoint")
click Storage call showNode("Storage")
click QueryAPI call showNode("QueryAPI")
click Stream call showNode("Stream")
click OLAP call showNode("OLAP")
click Dash call showNode("Dash")
classDef browser fill:#1e293b,stroke:#0f172a,color:#fff,font-weight:bold
classDef lrs fill:#dc2626,stroke:#7f1d1d,color:#fff,font-weight:bold
classDef analytics fill:#7c3aed,stroke:#4c1d95,color:#fff,font-weight:bold
classDef dash fill:#16a34a,stroke:#14532d,color:#fff,font-weight:bold
linkStyle default stroke:#64748b,stroke-width:2px