Files
Lumotia/docs/architecture-map/01-frontend/pages/settings.md
jars a1f3f3f134 docs: architecture map (initial 5-slice generation, 105 pages)
Five-slice navigable map of the entire codebase under
docs/architecture-map/. Each slice is a self-contained
breadcrumbed sub-tree:

  01-frontend (16)              Svelte/SvelteKit UI
  02-tauri-runtime (26)         src-tauri commands + lifecycle
  03-audio-transcription (16)   audio + transcription crates
  04-llm-formatting-mcp (19)    llm, ai-formatting, mcp, cloud
  05-core-storage-hotkey-build  core, storage, hotkey, workspace,
                          (26) CI, dev glue

Plus master README.md and data-flow-end-to-end.md tracing
audio bytes from microphone to FTS5 search to MCP read.

Generated by 5 parallel subagents on 2026/05/09 against
HEAD 3c47000. Each page has YAML frontmatter, file:line code
refs, sibling cross-links, plain-English summaries.

Aggregated debt surfaced (full lists in master README):
RB-08 macOS power assertion, schema head drift v14 vs v15,
VAD blocked on ort version conflict, streaming primitives
not wired into live.rs, no prompt versioning, MCP has no
auth, cloud-providers in-memory keystore, SettingsPage
2 484 LOC, commands/live.rs 1 737 LOC, dual theme system,
brand rename to Lumenote pending across the codebase.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 14:04:13 +01:00

6.0 KiB

name, type, slice, last_verified
name type slice last_verified
Settings page architecture-map-page 01-frontend 2026/05/09

Settings page

Where you are: Architecture mapFrontendPages overview → Settings

Plain English summary. The configuration panel. Owns audio device selection, vocabulary, profiles, templates, transcription engine choice and model management (Whisper + Parakeet + LLM), the global hotkey, rituals, nudges, accessibility, text-to-speech, diagnostics, and locale selection. It is by far the largest single file in the frontend at 2 484 lines.

At a glance

  • Path: src/lib/pages/SettingsPage.svelte
  • LOC: 2 484
  • Imports (selected):
    • Stores: settings, saveSettings, profiles, saveProfiles, templates, saveTemplates, page, addProfileTaskList, removeProfileTaskList from page.svelte.ts. getPreferences, updatePreferences. profilesStore, DEFAULT_PROFILE_ID. toasts. refreshLlmStatus.
    • Components: Card, Toggle, SegmentedButton, HotkeyRecorder, ImplementationRulesEditor, SettingsGroup, ZonePicker, AccessibilityControls.
    • Utils: clampTextLines, bodyPretextLineHeight, pretextFontShorthand, formatDuration.
    • i18n: _, SUPPORTED_LOCALES, setLocale, currentLocale.
    • External: lucide-svelte (Check, Search, X, Mic, BookOpen, Type, Sparkles, SquareCheck, Clipboard, Sliders).

Sections (top level)

Built from SettingsGroup accordions. Top level groups (line refs are anchors in the file):

  1. Audio (SettingsPage.svelte:1141). Device list (from list_audio_devices), microphone selection.
  2. Vocabulary (SettingsPage.svelte:1191). Two nested groups:
    • Terms and profiles (SettingsPage.svelte:1197). Vocabulary terms attached to the active profile, plus the active profile selector.
    • Profiles and templates (SettingsPage.svelte:1415). Two further nested groups:
      • Profiles (SettingsPage.svelte:1423). Create, rename, delete; default profile cannot be deleted.
      • Templates (SettingsPage.svelte:1481). Per profile templates injected at recording start.
  3. Processing (also referred to in file as the engine + AI tier section). Phase 9c style group with onopen hook that probes check_engine, check_parakeet_engine, list_models, detect_paste_backends, etc.
  4. Hotkey. Wraps HotkeyRecorder. Search navigation jumps here when the user clicks the hotkey chip in another section (SettingsPage.svelte:477).
  5. Rituals. Morning triage, evening wind down toggles.
  6. Nudges and implementation intentions. Wraps ImplementationRulesEditor.
  7. Accessibility. Wraps AccessibilityControls. Theme, zone (ZonePicker), font family, sizes, line height, letter spacing, bionic reading, reduce motion.
  8. Read aloud (TTS) (SettingsPage.svelte:759). Voice selection from tts_list_voices, rate, sample play.
  9. Diagnostics (SettingsPage.svelte:377-405). Generates and saves a redacted diagnostic report.
  10. Tasks (sparkline toggle, relocated in Phase 9c).
  11. Launch at login. Wires @tauri-apps/plugin-autostart.
  12. Locale. svelte-i18n locale picker.

Key state

  • audioDevices, downloadedModels, parakeetOk, parakeetDownloaded, pasteBackends, systemInfo, runtimeCapabilities, llmLoaded, llmModels, llmStatuses, ttsVoices.
  • Search query (X/Search icons) drives a force open mode for SettingsGroup (SettingsPage.svelte:432-477).
  • Three concurrent download progress listeners: Whisper (model-download-progress), Parakeet (parakeet-download-progress), LLM (magnotia:llm-download-progress) (SettingsPage.svelte:864-880).

Tauri command surface

Audio: list_audio_devices. Models (Whisper): list_models, download_model, load_model, check_engine. Models (Parakeet): check_parakeet_engine, check_parakeet_model, download_parakeet_model, load_parakeet_model. Models (LLM): recommend_llm_tier, check_llm_model, download_llm_model, load_llm_model, unload_llm_model, delete_llm_model, test_llm_model, get_llm_status. Capabilities: get_runtime_capabilities, probe_system, detect_paste_backends. TTS: tts_list_voices, tts_speak. Diagnostics: generate_diagnostic_report, save_diagnostic_report. Plus the implicit save_preferences invoked by the preferences store on every accessibility toggle.

Events listened to: model-download-progress, parakeet-download-progress, magnotia:llm-download-progress.

Watch outs

  • 2 484 lines, hand rolled accordion, Phase 9c handover already deferred the deeper restructure. New options should be added inside the existing SettingsGroup topology rather than threaded into the global header.
  • settings.theme ("Light"/"Dark"/"System") is the legacy field; preferences.theme is the new one. +layout.svelte:61-68 re maps every effect cycle. Adding new theme options needs both stores.
  • page.current = "shutdown" button at line 816 is the only entrance from settings into the wind down ritual (other than the tray).
  • The model-download-progress event payload is shared across Whisper and Parakeet listeners. Take care that progress UI does not cross wires when both downloads run concurrently (rare but possible if +layout.svelte triggers a prewarm while Settings is open).
  • The diagnostics path strips secrets in Rust; do not re add raw paths or env values to the report payload here.
  • Accessibility writes go through preferences (Tauri persisted) but settings.fontSize writes through localStorage. Two persistence channels for similar surfaces.

See also