How Schrollar is put together, from the device to the database. Start with the High Level Design, then read the component pages in any order.
${sch.contents("Architecture")}
flowchart TB
subgraph Shared packages
P[protocol<br/>mutations · payloads]
L[learning<br/>FSRS · mastery]
E[events<br/>catalogue]
X[experiments<br/>assignment]
CS[content-schema<br/>boxes · release]
D[decisions · planner]
end
WEB[apps/web<br/>client + Worker] --> P & L & E & X & CS & D
API[apps/api<br/>API + jobs] --> P & L & E & X
CLI[tools/content-cli] --> CS & E
MOB[apps/mobile<br/>Capacitor shells] --> WEB
The client and the API import the same protocol, learning and experiment code, so a card's due date or an experiment variant is computed identically on a phone and on the server.
${sch.nav()}