2026-09-23·by Sijie Wang#node#lucerna#software#architecture

key-designs

Parent: architecture

The load-bearing subsystems of Lucerna, each verified against code (deep-read, not surveyed). Grouped by what they serve.

The reading substance

  • raw-display-cursor — the dual-coordinate backbone: every position stored as a book-absolute raw offset, display reconstructed → layout-independent bookmarks/notes/vocab/karaoke.
  • dynamic-paginationDOM-measured pagination that reflows on font/viewport; a repaginate-only fast path; LayoutKey + PAGINATION_VERSION.
  • all-forms-underline — mark one inflection, light up every form of its lemma; the elision tokenizer that must agree across underline/POS/LLM.
  • vocabulary-loop — tap → 3-tier lookup → verb enrichment → save → all-forms → server-owned SM-2.
  • full-text-search — per-book FlexSearch at sentence granularity, disk-persisted (restore-vs-rebuild + versioning).
  • tts-audiobook — desktop-local Piper/sherpa-onnx audiobook + word-level karaoke timed from PCM energy, raw-offset-anchored.

The linguistic core

  • linguistic-two-engines — two parallel engines: TS/LLM-first (any language) vs Python/spaCy dep-parse (deterministic, DE+EN).
  • upload-ingestion — client-side EPUB/PDF/text parse (server OCR for scans) → contentHash, the join key everything anchors to.

The architecture pillars

  • cross-platform-seams — one framework-agnostic core drives web + desktop via three registry seams + a lazy binding proxy; HTTP-delegate vs Hybrid-wrapper repos.
  • offline-first-outbox — desktop offline-first: transactional Outbox (same-tx atomicity), cloud-authoritative wipe-and-refill, IPC tx-id bridge, temp-id reconcile.
  • backends-three-services — the auth / mainbackend / nlp-api split (why three, what each owns; SRS + i18n live here).
about this entry

One of sijie's wiki entries. The AI on this site is grounded in the same corpus and answers in sijie's voice, with citations back to entries like this one — answering costs sijie money, so it waits behind a code: enter an access code →

key-designs