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>
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 map → Frontend → Pages 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,removeProfileTaskListfrompage.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).
- Stores:
Sections (top level)
Built from SettingsGroup accordions. Top level groups (line refs are anchors in the file):
- Audio (
SettingsPage.svelte:1141). Device list (fromlist_audio_devices), microphone selection. - 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.
- Profiles (
- Terms and profiles (
- Processing (also referred to in file as the engine + AI tier section). Phase 9c style group with
onopenhook that probescheck_engine,check_parakeet_engine,list_models,detect_paste_backends, etc. - Hotkey. Wraps
HotkeyRecorder. Search navigation jumps here when the user clicks the hotkey chip in another section (SettingsPage.svelte:477). - Rituals. Morning triage, evening wind down toggles.
- Nudges and implementation intentions. Wraps
ImplementationRulesEditor. - Accessibility. Wraps
AccessibilityControls. Theme, zone (ZonePicker), font family, sizes, line height, letter spacing, bionic reading, reduce motion. - Read aloud (TTS) (
SettingsPage.svelte:759). Voice selection fromtts_list_voices, rate, sample play. - Diagnostics (
SettingsPage.svelte:377-405). Generates and saves a redacted diagnostic report. - Tasks (sparkline toggle, relocated in Phase 9c).
- Launch at login. Wires
@tauri-apps/plugin-autostart. - Locale. svelte-i18n locale picker.
Key state
audioDevices,downloadedModels,parakeetOk,parakeetDownloaded,pasteBackends,systemInfo,runtimeCapabilities,llmLoaded,llmModels,llmStatuses,ttsVoices.- Search query (
X/Searchicons) drives a force open mode forSettingsGroup(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
SettingsGrouptopology rather than threaded into the global header. settings.theme("Light"/"Dark"/"System") is the legacy field;preferences.themeis the new one.+layout.svelte:61-68re 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-progressevent 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.sveltetriggers 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) butsettings.fontSizewrites throughlocalStorage. Two persistence channels for similar surfaces.
See also
- Components.
SettingsGroup,HotkeyRecorder,ImplementationRulesEditor,ZonePicker,AccessibilityControls,Toggle,SegmentedButton. - Stores.
pagesettings + profiles + templates.preferences.llmStatus. - Frontend ↔ Tauri bridge. All command names referenced here.
- Internationalisation. Locale picker.