diff --git a/docs/MIGRATION.md b/docs/MIGRATION.md new file mode 100644 index 0000000..d995d79 --- /dev/null +++ b/docs/MIGRATION.md @@ -0,0 +1,248 @@ +# Migration-Guide: Obsidian → Mind-o-Mat + +Dieser Guide erklärt, wie du von einem bestehenden Obsidian-Vault zu Mind-o-Mat wechselst. + +## Überblick + +Mind-o-Mat ist **kein Obsidian-Klon**, sondern eine eigenständige Implementation mit: +- Eigenem Markdown-Format (kompatibel, aber mit eigenen Konventionen) +- Eigener PWA statt Obsidian-App +- Eigenem Wiki-System statt Obsidian-Plugins +- Eigener Cluster-Logik statt Obsidian-Tags + +**Du behältst:** deine Markdown-Dateien, deine Ordnerstruktur, deine Grundkonzepte. +**Du wechselst:** vom Obsidian-Editor zur PWA, vom Plugin-System zu eingebauten Befehlen. + +## Schritt 1: Vault-Struktur anpassen + +Obsidian verwendet typischerweise diese Struktur: + +``` +MeinVault/ +├── .obsidian/ # Obsidian-Konfiguration +├── Daily Notes/ # Tagesnotizen +├── Projekte/ +├── Templates/ +└── ... +``` + +Mind-o-Mat erwartet diese Struktur: + +``` +MeinVault/ +├── 00_Inbox/ # Eingangskorb +├── 01_Daily/ # Tagesnotizen +├── 10_Wiki/Seiten/ # Wiki-Themenseiten +├── 20_Projekte/ +├── 90_Templates/ +└── 99_System/ # System-Dateien +``` + +**Skript für die Migration:** + +```bash +# In deinem Obsidian-Vault-Verzeichnis (PowerShell) +$vault = "C:\Pfad\Zu\MeinemVault" + +# Ordner umbenennen oder neu anlegen +New-Item -ItemType Directory -Path "$vault\00_Inbox" -Force +New-Item -ItemType Directory -Path "$vault\01_Daily" -Force +New-Item -ItemType Directory -Path "$vault\10_Wiki\Seiten" -Force +New-Item -ItemType Directory -Path "$vault\20_Projekte" -Force +New-Item -ItemType Directory -Path "$vault\90_Templates" -Force +New-Item -ItemType Directory -Path "$vault\99_System" -Force +``` + +## Schritt 2: Notiz-Konventionen angleichen + +Mind-o-Mat verwendet strengere Konventionen als Obsidian: + +### Datei-Naming +- **Obsidian:** Beliebige Namen, mit oder ohne Datum +- **Mind-o-Mat:** + - Dailies: `YYYY-MM-DD.md` (Obsidian: `2024-01-15.md` ✓ OK) + - Wiki: `Pascal_Snake_Case.md` (Obsidian: `Mein Wiki.md` → umbenennen) + - Inbox: `YYYY-MM-DD_Titel.md` + - Sonderzeichen: nur `[a-zA-Z0-9_]` und `-` für Datums-Trennzeichen + +**Skript zum Umbenennen** (PowerShell): + +```powershell +Get-ChildItem -Recurse -Filter "*.md" | ForEach-Object { + $newName = $_.Name -replace '[^\w\-]', '_' -replace '\s+', '_' + if ($_.Name -ne $newName) { + Rename-Item $_.FullName $newName + } +} +``` + +### Frontmatter +- **Obsidian:** Optional, oft ohne `---` am Ende +- **Mind-o-Mat:** Pflicht-Frontmatter mit allen Feldern + +```yaml +--- +title: +created: YYYY-MM-DD +aktualisiert: YYYY-MM-DD # automatisch durch Ingest/Indexer +type: +status: +--- +``` + +**Wichtig:** Mind-o-Mat verwendet deutsche Keys (`aktualisiert`, nicht `updated`). + +### Wikilinks +- **Obsidian:** `[[Datei]]` oder `[[Datei|Anzeige]]` — kompatibel mit Mind-o-Mat ✓ +- **Mind-o-Mat:** Erkennt beide Formate + +## Schritt 3: Tags und Cluster + +Obsidian verwendet `#tags`, Mind-o-Mat ebenfalls — aber: +- Mind-o-Mat unterstützt nur **eine Ebene** Hierarchie: `#kategorie/thema` +- Mehr-Ebenen-Tags wie `#projekt/arbeit/2024` werden zu `#projekt/arbeit_2024` normalisiert + +```bash +# Migration: Tags mit > 1 Ebene umschreiben +Get-ChildItem -Recurse -Filter "*.md" | ForEach-Object { + $content = Get-Content $_.FullName -Raw + $content = $content -replace '#(\w+)/(\w+)/(\w+)', '#$1_$2_$3' + Set-Content $_.FullName $content -NoNewline +} +``` + +## Schritt 4: Obsidian-Plugins abschalten + +Mind-o-Mat hat eigene Mechanismen für: +- **Graph View** → Webapp Tab 1 (Cytoscape) +- **Daily Notes** → `01_Daily/` + Ingest +- **Backlinks** → landkarte.json (mit `--vault` Argument) +- **Tags** → unterstützt, aber mit Hierarchie-Constraint +- **Templates** → `90_Templates/` + Konventionen + +Plugins wie Dataview, Templater, Excalidraw sind **nicht kompatibel**. Sie können Schaden anrichten, weil sie das Frontmatter-Format verändern könnten. + +**Vor der Migration:** +1. Obsidian öffnen +2. Settings → Community Plugins → **alle deaktivieren** +3. Optional: `.obsidian/` Ordner löschen (oder behalten, er wird ignoriert) + +## Schritt 5: Tool installieren und Vault initialisieren + +```bash +# Tool global installieren +cd C:\GitHub\Mind-o-Mat +npm install +npm run build +npm link + +# Vault initialisieren +mindomat init-vault C:\Pfad\Zu\MeinemVault --remote https://git.example.com/Dein-Name/MeinVault.git +``` + +Das `init-vault`-Skript erstellt: +- 12 Standard-Ordner +- `99_System/Konfig.md` mit Defaults +- `README.md` +- `CLAUDE.md`-Template +- 2 Demo-Notizen +- `.gitignore` +- git init + gitea-Remote + +**Achtung:** `init-vault` erstellt Ordner neu. Wenn dein Vault schon die richtigen Ordner hat, ist das idempotent. Sonst sichere vorher. + +## Schritt 6: QMD einrichten + +```bash +cd C:\Pfad\Zu\MeinemVault + +# QMD global installieren +npm install -g @tobilu/qmd + +# Collections anlegen +qmd collection add 00_Inbox --name inbox +qmd collection add 01_Daily --name daily +qmd collection add 10_Wiki --name wiki +qmd collection add 20_Projekte --name projekte + +# Embeddings generieren (~2 GB Download, einmalig) +qmd embed +``` + +## Schritt 7: Erste Indexierung + +```bash +# Erstellt landkarte.json + 99_System/Index.md + 10_Wiki/Index.md +mindomat index +``` + +## Schritt 8: PWA öffnen + +```bash +cd C:\GitHub\Mind-o-Mat\webapp +npm install +npm run dev +``` + +Browser öffnet `http://localhost:5173`. Erste Schritte: +- Vault-Pfad setzen: in `.env` oder direkt beim Aufruf +- Tabs ausprobieren: Graph, Cluster-Karte, Radial +- Klick auf Notiz öffnet den PWA-Editor (Tiptap) +- Sync-Button ruft `mindomat sync` auf + +## Schritt 9: Workflow-Anpassung + +### Obsidian-Workflow +1. Notiz in Obsidian öffnen +2. Schreiben +3. Speichern (automatisch) +4. Obsidian-Plugins verarbeiten (Dataview, etc.) + +### Mind-o-Mat-Workflow +1. Notiz in `00_Inbox/` ablegen (manuell oder via Editor) +2. `mindomat ingest` läuft (manuell oder via Watch-Mode) +3. LLM pflegt Wiki (oder macht Notiz zu Wiki) +4. `mindomat index` aktualisiert Landkarte +5. Webapp zeigt aktualisierten Graph +6. `mindomat sync` pusht zu gitea + +**Im Vergleich:** Obsidian ist WYSIWYG, Mind-o-Mat ist Pipeline-basiert. Mehr Kontrolle, mehr Schritte. + +## Was NICHT funktioniert + +- **Obsidian-Sync** über Cloud → wird durch gitea-Sync ersetzt +- **Obsidian Publish** → keine direkte Entsprechung (PWA ist lokal) +- **Excalidraw, Kanban, etc.** → nicht unterstützt (Markdown-only) +- **Daily Note automatisch erstellen** → nicht in PWA, manuell oder via `mindomat ingest --note ...` + +## Häufige Probleme + +### "Meine alten Notizen werden nicht gefunden" +- Dateinamen mit Sonderzeichen: `mindomat index` zeigt sie als `unknown`-Typ +- Lösung: Skript zum Umbenennen (siehe Schritt 2) + +### "Wikilinks sind rot" +- Zieldatei fehlt oder hat falschen Namen +- Lösung: `99_System/Index.md` zeigt verwaiste Links + +### "Inbox wird nicht verarbeitet" +- Datei hat kein Frontmatter +- Lösung: `mindomat ingest --mock` zeigt, was die Pipeline macht + +### "Graph ist leer" +- `mindomat index` wurde nicht ausgeführt +- Lösung: einmal laufen lassen + +## Rückkehr zu Obsidian? + +Wenn du zurück willst, ist das einfach: +- Obsidian öffnen, Vault-Ordner wählen +- Obsidian liest Markdown-Dateien direkt +- Aber: Mind-o-Mat-spezifische Frontmatter-Felder werden ignoriert (kein Schaden) + +## Weitere Hilfe + +- `10_Wiki/SPEC.md` — vollständige Spezifikation +- `10_Wiki/Plan.md` — Roadmap mit allen 20 Aufgaben +- `README.md` — Install-Anleitung +- GitHub Issues — für Bug-Reports und Feature-Wünsche