Files
Jake 26c7307607
Some checks failed
check / cargo check (macos-latest) (push) Has been cancelled
check / cargo check (ubuntu-22.04) (push) Has been cancelled
check / cargo check (windows-latest) (push) Has been cancelled
check / svelte build + lint (push) Has been cancelled
agent: lumotia-rebrand — docs, scripts, root config, residuals
Phase 9 of the rebrand cascade. Sweep covers everything the Phase 8
frontend pass deliberately skipped: docs/, root markdown, scripts,
Cargo.toml descriptions, code comments that survived earlier
word-boundary sed, plus a handful of identifiers caught on the final
verify pass.

transcription-app changes:
- README.md, HANDOVER.md, KNOWN-ISSUES.md, run.sh — magnotia/Magnotia
  -> lumotia/Lumotia.
- docs/ — sweep across all subdirs except docs/handovers/ (preserved
  as immutable audit trail). Includes architecture-map references
  to magnotia_core::*, magnotia_storage::*, etc. now pointing at
  lumotia_*; dev-setup.md tracing output examples (lumotia_startup
  target); brief/ + superpowers/ + issues/ + whisper-ecosystem/ +
  audit/.
- Cargo.toml descriptions on 9 crates (core, audio, cloud-providers,
  hotkey, llm, mcp, plus referenced others).
- crates/core/src/{error,hardware,recommendation,paths}.rs +
  crates/audio/src/wav.rs + crates/llm/src/model_manager.rs +
  crates/cloud-providers/src/keystore.rs + crates/mcp/src/lib.rs —
  doc comments and a model-manager user-agent string.
- Caught on final pass: BroadcastChannel("magnotia_task_sync") -> ...
  ("lumotia_task_sync"); magnotia_locale i18n localStorage key
  renamed + migration shim added; CSS keyframe names
  magnotiaPulse / magnotiaBar / magnotiaFade renamed in the design-
  system kit; magnotia_viewer_item / magnotia_viewer_mode handoff
  keys renamed in HistoryPage + viewer/+page.svelte; src/assets/
  wordmark.svg text.
- src-tauri/src/lib.rs comment cleanup ("magnotia era" was sed'd
  to "lumotia era" earlier — restored).

Preserved (intentional):
- crates/core/src/paths.rs — keeps "magnotia" / "Magnotia" / ".magnotia"
  legacy detection strings in legacy_and_target_paths() so the
  migration shim can still find user data from the magnotia era.
- src/lib/stores/{page,focusTimer}.svelte.ts + src/lib/i18n/index.ts
  — migration call sites reference the legacy magnotia keys
  deliberately.
- docs/handovers/ — historical audit trail.

cargo build --workspace passes. npm run check: 0 errors / 0 warnings
(3958 files). cargo test --workspace: 339 pass / 0 fail.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 12:38:03 +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 (lumotia: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, lumotia: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