Architecture

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")}

How the parts depend on each other

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()}