# 📝 Kernmodul 3: Workspace Outliner-Engine, Wiki-Links & Pure-DB Storage Der MindSift Workspace ([`WorkspaceView.tsx`](../../frontend/src/features/workspace/WorkspaceView.tsx)) kombiniert ein **hierarchisches Bullet-Point Notizsystem (inspiriert von Logseq)** mit einem **persönlichen Wiki** und einem **globalen To-Do Rollup Dashboard**. --- ## 🌳 1. Die Logseq-Outliner-Engine Im Gegensatz zu klassischen Fließtext-Editoren basiert der MindSift Workspace auf **Blöcken** (`document_blocks` in SQLite). Jeder Block ist ein gedanklicher Knotenpunkt mit einer flexiblen Einrückungsebene (`level: 0, 1, 2, ...`). ``` • Projekt MindSift v2.0 (level 0) • Architektur-Entscheidung (level 1) - [x] Database-First Blocks implementieren (level 2) - [ ] Performance Benchmark mit 10.000 Blöcken (level 2) • Notizen aus dem Dev-Meeting (level 1) > Wichtig: Keine verschachtelten SQLite Queries ausführen! (level 2) ``` ### Tastatur-Navigation & Shortcuts - `Enter`: Erstellt einen neuen Block auf derselben Hierarchieebene. - `Tab`: Rückt den aktuellen Block ein (wird Kindknoten des vorherigen Blocks). - `Shift + Tab`: Rückt den Block um eine Ebene aus (verringert die Tiefe). - `Shift + Enter`: Weicher Zeilenumbruch innerhalb desselben Blocks (z.B. für mehrzeilige Notizen oder Code). - `Backspace` (auf leerem Block): Rückt den Block aus oder löscht ihn, wenn er auf Level 0 ist. - `/` (Slash-Commands): Öffnet das Umwandlungsmenü (`/todo`, `/h1`, `/h2`, `/h3`, `/code`, `/callout`, `/quote`, `/divider`). ### Zoom-In Hoisting (Fokus-Modus) Klickt der Benutzer auf den Bullet-Dot (`•`) eines Blocks, blendet der Editor alle übergeordneten und benachbarten Blöcke aus und zoomt **ausschließlich in diesen Ast** hinein. - Eine dezente Breadcrumb-Leiste oben zeigt den Pfad an (z.B. `Workspace / Projekte / MindSift / Architektur`). - Ein Klick auf ein beliebiges Breadcrumb-Element zoomt sofort auf die jeweilige Ebene zurück. ### Drag & Drop von Blöcken Der Bullet-Dot dient gleichzeitig als Drag-Anfasser. Wird ein Block verschoben, erkennt die Engine automatisch alle untergeordneten Kind-Blöcke (`isDescendantBlock`) und verschiebt den **kompletten Unterbaum** an die neue Zielposition. --- ## 🔗 2. Wiki-Links (`[[Link]]`) & Hashtags 1. **Interne Wiki-Links:** - Text in doppelten eckigen Klammern (z.B. `[[Reiseplanung 2026]]`) wird automatisch als klickbarer Link gerendert. - Ein Klick darauf durchsucht die Notizen des Benutzers und öffnet das Ziel-Dokument direkt im Editor. 2. **Hashtags (`#tag`):** - Hashtags im Fließtext werden automatisch indiziert (`doc_block_tags`-Tabelle). - In der linken Leiste listet der Tag-Explorer alle verwendeten Schlagworte auf. Klick auf ein Tag filtert alle Dokumente und Blöcke, die dieses Tag enthalten. --- ## 💾 3. Pure-Database Architecture (Keine MD-Dateien auf Platte) MindSift speichert Notizen und Outliner-Bäume **zu 100% relational in SQLite**. Es werden bewusst **keine Markdown-Dateien auf dem Dateisystem** abgelegt: ``` Client (Block-Editor) │ PUT /api/v1/documents/:id/blocks (oder WebSocket) ▼ Backend Engine ┌──────────────────────────────────────────────┐ │ Atomare Transaktion in SQLite: │ │ 1. DELETE FROM document_blocks WHERE doc_id │ │ 2. Batch INSERT der Blöcke: │ │ -> id, doc_id, content, level, checked, │ │ sort_order, collapsed │ │ 3. WebSocket Broadcast an Raum (doc:id) │ └──────────────────────────────────────────────┘ ``` ### Vorteile der reinen Datenbank-Architektur 1. **Kein Dual-Storage & kein Drift:** - Keine Inkonsistenzen zwischen Festplattendateien und Datenbankzeilen. - Keine Dateisystem-Sperren, Race-Conditions oder Berechtigungskonflikte auf Betriebssystemebene. 2. **Atomare Transaktionen (ACID):** - Strukturänderungen (Einrücken, Unterbaum verschieben, Blöcke löschen) sind atomar in einer Transaktion gekapselt. 3. **Skalierbare Abfragen & Rollups:** - Aggregationen (wie das globale To-Do Dashboard oder Tag-Suchen) erfolgen mit hochoptimierten SQL-Abfragen über relationale Indizes, anstatt Hunderte `.md`-Dateien von der Festplatte parsen zu müssen. --- ## 📊 4. Globaler To-Do Rollup Dashboard Über den Tab **„Globale To-Dos"** bietet der Workspace eine aggregierte Übersicht aller im gesamten Wiki verteilten Aufgaben: - Scannt in Echtzeit alle unvollendeten `- [ ] ` Checkboxen über alle Ordner und Notizen hinweg. - Übersichtliche Gruppierung nach **Ordner ➔ Dokument ➔ Aufgabe**. - **Ordner-Filter:** Klick auf einen Ordner isoliert nur dessen Aufgaben für fokussiertes Arbeiten. - **2-Wege-Live-Sync:** Wird eine Checkbox im Rollup abgehakt, wird der Block in SQLite sofort auf `checked = 1` aktualisiert und via WebSocket an alle aktiven Clients gebroadcastet.