MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 39s
86 lines
5.0 KiB
Markdown
86 lines
5.0 KiB
Markdown
# 📝 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.
|