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>
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 (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
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.