flowchart TD
Start(["New deployment"]):::start
Q1{"Is the device
often offline?"}:::decision
Q2{"Data sovereignty
forbids 3rd-party hosting?"}:::decision
Q3{"Ops capacity to run
a database 24/7?"}:::decision
Q4{"Sustained volume
above 5k stmts/sec?"}:::decision
Embedded["Embedded LRS
(with sync to central)"]:::outcome
SelfHostedSov["Self-hosted
open source"]:::outcome
SaaS["Hosted SaaS LRS"]:::outcome
SelfHostedScale["Self-hosted open source
(Ralph or scaled Learning Locker)"]:::outcome
EitherFits["Hosted SaaS or
self-hosted (either fits)"]:::outcome
Start --> Q1
Q1 -->|Yes| Embedded
Q1 -->|No| Q2
Q2 -->|Yes| SelfHostedSov
Q2 -->|No| Q3
Q3 -->|No| SaaS
Q3 -->|Yes| Q4
Q4 -->|Yes| SelfHostedScale
Q4 -->|No| EitherFits
click Start call showHostingNode("Start")
click Q1 call showHostingNode("Q1")
click Q2 call showHostingNode("Q2")
click Q3 call showHostingNode("Q3")
click Q4 call showHostingNode("Q4")
click Embedded call showHostingNode("Embedded")
click SelfHostedSov call showHostingNode("SelfHostedSov")
click SaaS call showHostingNode("SaaS")
click SelfHostedScale call showHostingNode("SelfHostedScale")
click EitherFits call showHostingNode("EitherFits")
classDef start fill:#1e293b,stroke:#0f172a,color:#fff,font-size:15px,font-weight:bold
classDef decision fill:#b45309,stroke:#78350f,color:#fff,font-size:14px,font-weight:bold
classDef outcome fill:#0d9488,stroke:#134e4a,color:#fff,font-size:14px
linkStyle default stroke:#64748b,stroke-width:2px,font-size:13px