···47474848All singletons live in `www/models/`:
49495050-- **`app`** (`app.ts`) — single source of truth for all user data: assignments, settings, overrides. Wraps `Store` (IndexedDB via `@byojs/storage` + optional `@civility/sync` remote sync). Call `app.notify()` after mutating state; call `app.persist()` to write to storage.
5050+- **`app`** (`app.ts`) — single source of truth for all user data: assignments, settings, overrides. Wraps `Store` (IndexedDB via `@civility/store/idb`) and exposes `app.synced` (a `@civility/sync` `Synced` instance) for remote sync of collections. Call `app.notify()` after mutating state.
5151- **`subjects`** (`subjects.ts`) — static subject data loaded from `www/static/gen/characters.json` + `www/static/gen/vocabulary.json`. Also exports `scheduler` (FSRS-based flashcard scheduler) and `deck`.
5252- **`downloads`** (`downloads.ts`) — tracks audio download progress per subject/locale.
5353