flowchart TB
subgraph CLIENT["Client-side"]
direction TB
CB["Browser"]:::cnode
CL[("LRS")]:::cnode
CB -->|"POST statement"| CL
end
subgraph SERVER["Server-side"]
direction TB
SB["Browser"]:::snode
SS["Backend"]:::snode
SL[("LRS")]:::snode
SB -->|"event"| SS -->|"POST statement"| SL
end
subgraph HYBRID["Hybrid (recommended)"]
direction TB
HB["Browser"]:::hnode
HS["Backend"]:::hnode
HL[("LRS")]:::hnode
HB -->|"analytics"| HL
HB -->|"graded event"| HS
HS -->|"POST statement"| HL
end
click CB call showNodeInfo("CB")
click CL call showNodeInfo("CL")
click SB call showNodeInfo("SB")
click SS call showNodeInfo("SS")
click SL call showNodeInfo("SL")
click HB call showNodeInfo("HB")
click HS call showNodeInfo("HS")
click HL call showNodeInfo("HL")
classDef cnode fill:#0d9488,stroke:#134e4a,color:#fff,font-size:14px,font-weight:bold
classDef snode fill:#4338ca,stroke:#312e81,color:#fff,font-size:14px,font-weight:bold
classDef hnode fill:#be185d,stroke:#831843,color:#fff,font-size:14px,font-weight:bold
style CLIENT fill:#ecfdf5,stroke:#0d9488,stroke-width:2px,color:#0f766e
style SERVER fill:#eef2ff,stroke:#4338ca,stroke-width:2px,color:#3730a3
style HYBRID fill:#fdf2f8,stroke:#be185d,stroke-width:2px,color:#9d174d
linkStyle default stroke:#64748b,stroke-width:2px,font-size:12px
Path Details
Click any Browser, Backend, or LRS node in any of the three topologies to see the kinds of statements that flow through it and the security implications.
Client-side — fast, forgeable, analytics
Server-side — slower, authoritative, grades
Hybrid — production default