agent: lumotia-rebrand — docs, scripts, root config, residuals
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

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>
This commit is contained in:
2026-05-13 12:38:03 +01:00
parent 681a9b26dc
commit 26c7307607
213 changed files with 1175 additions and 1170 deletions

View File

@@ -1,5 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 80" width="240" height="80">
<text x="12" y="54" font-family="&#39;Instrument Serif&#39;, Georgia, serif" font-style="italic" font-weight="400" font-size="48" fill="#e8a87c" letter-spacing="-0.01em">Magnotia</text>
<text x="12" y="54" font-family="&#39;Instrument Serif&#39;, Georgia, serif" font-style="italic" font-weight="400" font-size="48" fill="#e8a87c" letter-spacing="-0.01em">Lumotia</text>
<text x="92" y="46" font-family="&#39;Instrument Serif&#39;, Georgia, serif" font-size="28" fill="#e8a87c"></text>
<text x="12" y="70" font-family="&#39;Lexend&#39;, sans-serif" font-size="9" fill="#716b60" letter-spacing="1.4" text-transform="uppercase" style="text-transform:uppercase">THINK OUT LOUD</text>
</svg>

Before

Width:  |  Height:  |  Size: 597 B

After

Width:  |  Height:  |  Size: 596 B

View File

@@ -1,16 +1,16 @@
# Magnotia — Design System
# Lumotia — Design System
> **Think out loud.** A voice-first dictation app built for neurodivergent minds, by CORBEL.
## What is Magnotia?
## What is Lumotia?
Magnotia is a local-first dictation + thought-capture app. You press a hotkey, speak, and Magnotia transcribes, cleans, and — optionally — extracts tasks from what you said. Everything runs on your machine (Whisper / Parakeet models); nothing is sent anywhere.
Lumotia is a local-first dictation + thought-capture app. You press a hotkey, speak, and Lumotia transcribes, cleans, and — optionally — extracts tasks from what you said. Everything runs on your machine (Whisper / Parakeet models); nothing is sent anywhere.
**Company:** CORBEL — an AI consultancy and technology integrator that removes friction from day-to-day life and work.
**Product essence:** *Clarity without friction.* Every design decision is measured against it. If something adds cognitive load, it doesn't ship.
**Archetypes:** Sage (primary) + Magician (secondary). Magnotia listens more than it speaks.
**Archetypes:** Sage (primary) + Magician (secondary). Lumotia listens more than it speaks.
**Visual reference points:** The Barbican, Muji, Amsterdam urban design, Nujabes album art — warm brutalism, honest materials, structural clarity. **Anti-references:** Notion-style feature density, generic blue/white SaaS, FAANG aesthetics.
@@ -18,9 +18,9 @@ Magnotia is a local-first dictation + thought-capture app. You press a hotkey, s
## Sources
- **Repo:** `github.com/jakejars/magnotia` — Tauri + Svelte 5 + Tailwind v4 desktop app. Imported into `magnotia-source/` (lib components + routes).
- **Repo:** `github.com/jakejars/lumotia` — Tauri + Svelte 5 + Tailwind v4 desktop app. Imported into `lumotia-source/` (lib components + routes).
- **Design brief:** Pasted in the initial message — complete token system, type scale, motion guidelines, ideology.
- **Key reads in `magnotia-source/`:**
- **Key reads in `lumotia-source/`:**
- `app.css`@theme tokens, global base, zone + motion system
- `lib/Sidebar.svelte` — navigation shell
- `lib/pages/DictationPage.svelte` — record / transcribe (the hero screen)
@@ -41,8 +41,8 @@ Magnotia is a local-first dictation + thought-capture app. You press a hotkey, s
| `SKILL.md` | Agent-skill manifest (cross-compatible with Claude Code Agent Skills). |
| `assets/` | Logos, the sinhala wordmark glyph, grain texture, icon references |
| `preview/` | HTML spec cards shown in the Design System tab (swatches, specimens, components) |
| `ui_kits/magnotia-app/` | UI kit — pixel-level recreation of the Magnotia desktop app with interactive click-thru |
| `magnotia-source/` | Imported Svelte source — the ground truth for component structure |
| `ui_kits/lumotia-app/` | UI kit — pixel-level recreation of the Lumotia desktop app with interactive click-thru |
| `lumotia-source/` | Imported Svelte source — the ground truth for component structure |
No slide template was attached, so `slides/` is not created.
@@ -52,12 +52,12 @@ No slide template was attached, so `slides/` is not created.
> **Voice:** A calm friend who has already done the anxious part for you.
**Person.** Addresses the user as *you*; never refers to itself as *I*. Brand name "Magnotia" appears sparingly — the product speaks, it doesn't narrate itself. *(Settings labels: "Save recordings", "British English" — never "I'll save your recordings".)*
**Person.** Addresses the user as *you*; never refers to itself as *I*. Brand name "Lumotia" appears sparingly — the product speaks, it doesn't narrate itself. *(Settings labels: "Save recordings", "British English" — never "I'll save your recordings".)*
**Sentence shape.** Short. Direct. Rarely more than ~12 words per line of UI copy. Never exclaims. Never hypes. Full stops inside UI labels are dropped; in prose (empty states, toasts) they're used naturally.
**Tone.**
- **Ambient, not demanding.** Empty states are *"Your words will appear here…"* — not *"Record your first transcript!"* Blank screens trigger freeze; Magnotia offers presence instead of prompting.
- **Ambient, not demanding.** Empty states are *"Your words will appear here…"* — not *"Record your first transcript!"* Blank screens trigger freeze; Lumotia offers presence instead of prompting.
- **Calm on failure.** Failed transcription copy leads with *"Your audio is saved"* — the anxiety reducer, not the apology. Never red all-caps.
- **No guilt, no streaks.** No streak-shaming, no *"keep it up!"*, no urgency.
- **British English.** "Minimise", "finalising", "customise". `britishEnglish` is a first-class setting.
@@ -65,7 +65,7 @@ No slide template was attached, so `slides/` is not created.
**Casing.**
- Sentence case for all headings and buttons. *"Start recording"*, *"Clear all"*, *"Sensory zone"* — never *Start Recording* or *START RECORDING*.
- Eyebrow labels (10px, uppercase, 0.12em tracking) are the **only** place all-caps appears — e.g. *THINK OUT LOUD* under the sidebar wordmark. Never apply uppercase to sentences.
- Brand name is always `Magnotia` (capital K, one lowercase letter).
- Brand name is always `Lumotia` (capital K, one lowercase letter).
- Product tagline — *"Think out loud"* — always sentence case.
**Buttons.** Verbs. *Record, Stop, Save, Copy, Clear, Export, Extract Tasks, Open viewer.* The one exception is *Tasks* (noun) as a sidebar toggle — consistent with its icon label.
@@ -147,7 +147,7 @@ Lucide icons, 2px stroke, rounded terminals. 16px in nav, 20px in features, 24px
## Iconography
**Library:** [Lucide Icons](https://lucide.dev) (MIT). Every Lucide glyph Magnotia uses is listed in `magnotia-source/docs/icon-mapping.md`.
**Library:** [Lucide Icons](https://lucide.dev) (MIT). Every Lucide glyph Lumotia uses is listed in `lumotia-source/docs/icon-mapping.md`.
**Stroke weight:** 2px default · 2.5 on active sidebar items · 1 for empty-state illustrations (48px, opacity 40%).
@@ -165,7 +165,7 @@ Lucide icons, 2px stroke, rounded terminals. 16px in nav, 20px in features, 24px
- `--danger` for destructive and the recording state indicator
- `--success` for completion checks
**Core Magnotia set (from the audit):** `Mic` (Dictation), `FileText` (Files), `SquareCheck` (Tasks), `Clock` (History), `Settings`, `Circle`/`Square` (record/stop), `Play`/`Pause`, `Search`, `Upload`, `Download`, `Copy`, `ChevronDown`, `ChevronLeft`, `ChevronRight`, `X`, `Check`, `Plus`, `Pin`, `User`, `AlignLeft`, `AlertTriangle`, `Loader2`.
**Core Lumotia set (from the audit):** `Mic` (Dictation), `FileText` (Files), `SquareCheck` (Tasks), `Clock` (History), `Settings`, `Circle`/`Square` (record/stop), `Play`/`Pause`, `Search`, `Upload`, `Download`, `Copy`, `ChevronDown`, `ChevronLeft`, `ChevronRight`, `X`, `Check`, `Plus`, `Pin`, `User`, `AlignLeft`, `AlertTriangle`, `Loader2`.
**Brand glyph:** The Sinhala letter **ක** (U+0D9A) sits next to the wordmark in `--accent`. Decorative only. During recording it spins slowly (2s linear infinite, `sinhala-spin`). A Unicode codepoint, not an SVG — scales perfectly, no asset needed.

View File

@@ -1,6 +1,6 @@
---
name: magnotia-design
description: Use this skill to generate well-branded interfaces and assets for Magnotia (by CORBEL), either for production or throwaway prototypes/mocks/etc. Contains essential design guidelines, colors, type, fonts, assets, and UI kit components for prototyping.
name: lumotia-design
description: Use this skill to generate well-branded interfaces and assets for Lumotia (by CORBEL), either for production or throwaway prototypes/mocks/etc. Contains essential design guidelines, colors, type, fonts, assets, and UI kit components for prototyping.
user-invocable: true
---
@@ -21,6 +21,6 @@ If the user invokes this skill without any other guidance, ask them what they wa
- `colors_and_type.css` — import this for all tokens + semantic type.
- `README.md` — full brand + content + visual foundations.
- `assets/` — logos, glyph, grain, icon samples.
- `ui_kits/magnotia-app/` — component recreations of the desktop app.
- `ui_kits/lumotia-app/` — component recreations of the desktop app.
- `preview/` — spec cards (swatches, specimens, components).
- `magnotia-source/` — ground-truth Svelte source from the Magnotia repo.
- `lumotia-source/` — ground-truth Svelte source from the Lumotia repo.

View File

@@ -8,7 +8,7 @@ function RecordButton({ recording, onToggle }) {
transition:'all 150ms cubic-bezier(.2,.8,.2,1)',
background: recording ? 'var(--danger)' : 'var(--accent)',
boxShadow: recording ? '0 0 0 0 rgba(232,113,113,.4)' : '0 4px 20px rgba(232,168,124,.3)',
animation: recording ? 'magnotiaPulse 2s ease-in-out infinite' : 'none',
animation: recording ? 'lumotiaPulse 2s ease-in-out infinite' : 'none',
};
return (
<button onClick={onToggle} style={style} aria-label={recording ? 'Stop recording' : 'Start recording'}>
@@ -29,7 +29,7 @@ function Waveform({ recording }) {
<span key={i} style={{
width:2, borderRadius:999, background:'rgba(232,113,113,.7)',
height:`${h*100}%`,
animation:`magnotiaBar 1.2s ease-in-out ${i*60}ms infinite`,
animation:`lumotiaBar 1.2s ease-in-out ${i*60}ms infinite`,
}}/>
))}
</span>

View File

@@ -1,4 +1,4 @@
# Magnotia app · UI kit
# Lumotia app · UI kit
Desktop transcription app — local-first, neurodivergent-first, amber on warm black.
@@ -12,4 +12,4 @@ Desktop transcription app — local-first, neurodivergent-first, amber on warm b
Open `index.html`. Click nav items to switch. Click the amber circle to toggle "recording" — the button pulses and the waveform bars animate. Check tasks off on the Tasks page.
## Notes on fidelity
Recreated from the Svelte source in `magnotia-source/`. The visual language, component shapes, copy tone and icon stroke weights match the app. Local transcription, model loading, Tauri IPC, and the real audio pipeline are stubbed — this kit is for visual + interaction reference.
Recreated from the Svelte source in `lumotia-source/`. The visual language, component shapes, copy tone and icon stroke weights match the app. Local transcription, model loading, Tauri IPC, and the real audio pipeline are stubbed — this kit is for visual + interaction reference.

View File

@@ -42,16 +42,16 @@
background-size: 200px 200px; opacity: .025; mix-blend-mode: overlay;
}
@keyframes magnotiaPulse {
@keyframes lumotiaPulse {
0%,100% { box-shadow: 0 0 0 0 rgba(232,113,113,.4); }
50% { box-shadow: 0 0 0 8px rgba(232,113,113,0); }
}
@keyframes magnotiaBar {
@keyframes lumotiaBar {
0%,100% { transform: scaleY(.5); opacity:.6; }
50% { transform: scaleY(1); opacity:1; }
}
@keyframes magnotiaFade { from { opacity: 0 } to { opacity: 1 } }
[data-fade] { animation: magnotiaFade 300ms cubic-bezier(.2,.8,.2,1); }
@keyframes lumotiaFade { from { opacity: 0 } to { opacity: 1 } }
[data-fade] { animation: lumotiaFade 300ms cubic-bezier(.2,.8,.2,1); }
button:focus-visible, input:focus-visible, textarea:focus-visible {
outline: none; box-shadow: 0 0 0 3px var(--accent-glow);

View File

@@ -19,7 +19,12 @@ export const SUPPORTED_LOCALES: { code: Locale; label: string }[] = [
{ code: "de", label: "Deutsch" },
];
const STORAGE_KEY = "magnotia_locale";
import { migrateLocalStorageKey } from "$lib/utils/localStorageMigration";
const STORAGE_KEY = "lumotia_locale";
// One-shot key rename from the magnotia era. Idempotent.
migrateLocalStorageKey("magnotia_locale", STORAGE_KEY);
register("en", () => import("./locales/en.json"));
register("es", () => import("./locales/es.json"));

View File

@@ -387,12 +387,12 @@
// script.
const handoff = JSON.stringify({ id: String(item.id) });
try {
localStorage.setItem("magnotia_viewer_item", handoff);
localStorage.setItem("magnotia_viewer_mode", "view");
localStorage.setItem("lumotia_viewer_item", handoff);
localStorage.setItem("lumotia_viewer_mode", "view");
await invoke("open_viewer_window");
} catch {
localStorage.setItem("magnotia_viewer_item", handoff);
localStorage.setItem("magnotia_viewer_mode", "view");
localStorage.setItem("lumotia_viewer_item", handoff);
localStorage.setItem("lumotia_viewer_mode", "view");
window.open("/viewer", "_blank", "width=600,height=700");
}
}
@@ -551,12 +551,12 @@
// (see openViewer above for the rationale).
const handoff = JSON.stringify({ id: String(item.id) });
try {
localStorage.setItem("magnotia_viewer_item", handoff);
localStorage.setItem("magnotia_viewer_mode", "edit");
localStorage.setItem("lumotia_viewer_item", handoff);
localStorage.setItem("lumotia_viewer_mode", "edit");
await invoke("open_viewer_window");
} catch {
localStorage.setItem("magnotia_viewer_item", handoff);
localStorage.setItem("magnotia_viewer_mode", "edit");
localStorage.setItem("lumotia_viewer_item", handoff);
localStorage.setItem("lumotia_viewer_mode", "edit");
window.open("/viewer", "_blank", "width=600,height=700");
}
}

View File

@@ -515,7 +515,7 @@ interface TaskChannelMessage {
}
const taskChannel = typeof BroadcastChannel !== "undefined"
? new BroadcastChannel("magnotia_task_sync")
? new BroadcastChannel("lumotia_task_sync")
: null;
if (taskChannel) {

View File

@@ -92,8 +92,8 @@
}
onMount(() => {
loadFromHandoff(localStorage.getItem("magnotia_viewer_item"));
const mode = localStorage.getItem("magnotia_viewer_mode");
loadFromHandoff(localStorage.getItem("lumotia_viewer_item"));
const mode = localStorage.getItem("lumotia_viewer_mode");
if (mode === "edit" || mode === "view") viewerMode = mode;
// Listen for new items via storage events
@@ -139,7 +139,7 @@
}
function handleStorageChange(e: StorageEvent) {
if (e.key === "magnotia_viewer_item" && e.newValue) {
if (e.key === "lumotia_viewer_item" && e.newValue) {
void loadFromHandoff(e.newValue);
}
}
@@ -317,7 +317,7 @@
if (!item) return;
try {
localStorage.setItem(
"magnotia_viewer_item",
"lumotia_viewer_item",
JSON.stringify({ id: String(item.id), stamp: Date.now() }),
);
} catch {}