Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Architecture

graph LR
  subgraph candidate[Candidate devices]
    dApp["Desktop App<br/>[dApp]"]
    wApp["Web App<br/>[wApp]"]
  end

  aAPI["Auth API<br/>[aAPI]"]
  cAPI["Curriculum API<br/>[cAPI]"]
  cDb[("Curriculum Database<br/>[cDb]")]
  mDb[("Moderation Database<br/>[mDb]")]
  eDd["Examiner Dashboard<br/>[eDd]"]
  eDb[("Examiner Database<br/>[eDb]")]

  dApp <--> aAPI
  wApp <--> aAPI
  aAPI --> cAPI
  cAPI <--> cDb
  aAPI <--> mDb
  eDd <--> cAPI
  eDd <--> mDb
  eDd <--> eDb
  eDd --- cDbClone[("Authoring clone<br/>[Dolt]")]
  cDb -. fetch, driven by cAPI .-> cDbClone
  cDbClone -. clone and schema pull, read-only .-> cDb
ApplicationResponsibility
dAppServes exam content to the candidate and observes the station.
wAppEntrypoint for candidates to create accounts, verify identity, view certifications, and register for exams. Captures biometrics, and can operate as second proctoring device.
aAPIOwns candidate identity and the attempt path. The only application candidate devices reach. Reads content through cAPI; writes attempts and evidence to mDb.
cAPISole holder of cDb credentials and sole writer of cDb. Fetches authored history from eDd’s clone, fast-forwards dev, owns promotion, and serves redacted content to aAPI.
cDbExam content and its whole history. Self-hosted Dolt.
mDbCandidate identity, attempts, responses, and evidence. All candidate data.
eDdWhere examiners author, review, promote, and moderate. Owns examiner identity, roles, and scopes, and runs its own Dolt instance - the authoring clone - where all authoring happens. This is both a server and web-app.
eDbEverything eDd owns that is not versioned curriculum content.