Remove outdated claims (CRDT, DocRooms, presence, .md files on disk) and document the actual architecture, API, permissions and known flaws. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
🧠 MindSift
Der Kopf frei in drei Sekunden.
MindSift ist eine selbst gehostete Schaltstelle für spontane Gedanken, Aufgaben mit Kanban-Board, hierarchische Outliner-Notizen und gemeinsame Listen. Alles läuft als ein einzelner Container mit eingebetteter SQLite-Datenbank, auf deinem eigenen Server.
Philosophie • Funktionen • Schnellstart • Betrieb • Entwicklung • Dokumentation
💡 Die Philosophie
Die meisten Notiz- und Aufgaben-Apps verlangen Struktur im falschen Moment: Wenn dir ein Gedanke kommt, willst du keinen Ordner suchen und keine Felder ausfüllen. MindSift trennt deshalb Erfassen und Organisieren:
- Abladen: In die Eingabeleiste tippen,
Enter, fertig. Wer will, weist den Gedanken gleich einer Aufgabe, Liste oder Notiz zu. - Sichten (Triage): Später gehst du den Stapel Karte für Karte durch: verwerfen, zur Aufgabe machen, in eine Notiz oder Liste verwandeln.
- Vertiefen: Aus losen Ideen werden Aufgaben mit Unteraufgaben, vernetzte Outliner-Notizen oder geteilte Listen für Familie und Team.
✨ Funktionen
⚡ Schnellerfassung & Triage
- Eingabeleiste im Kopf der App, jederzeit mit
Coder/fokussierbar; auch per Spracheingabe (Browser-Funktion). - Ziel beim Erfassen wählbar: Posteingang, Aufgabe, Listeneintrag oder Notiz.
- Triage-Deck:
H/←verwerfen,L/→zur Aufgabe,TAufgabe mit Termin,Din Notiz verwandeln, Leertaste = später. Auf dem Smartphone per Wischgeste. - Papierkorb mit Wiederherstellen.
✅ Aufgaben & Kanban
- Listen- und Kanban-Ansicht, Spalten pro Aufgabenliste frei konfigurierbar.
- Prioritäten, Fälligkeitsdatum, Hashtags, Unteraufgaben mit Fortschrittsbalken, Markdown-Notizen.
- Filter, Gruppierung und Sortierung; Drag & Drop in Liste und Board.
- Aufgabenlisten teilen mit Benutzern oder Gruppen, wahlweise als Bearbeiter oder nur lesend.
- Alarme bei Fälligkeit per E-Mail, Discord oder eigenem Webhook.
📝 Workspace: Outliner-Notizen
- Jeder Gedanke ein Bullet:
Enter,Tab/Shift+Tab, Ein-/Ausklappen, Drag & Drop ganzer Äste. - Zoom-Fokus per Klick auf den Bullet, Breadcrumbs zum Zurücknavigieren.
- Blocktypen und Slash-Befehle:
/todo,/link,/h1–/h3,/code(mit Syntax-Hervorhebung),/callout,/divider. - Wiki-Links
[[Notiz]], Links und#Hashtags; Tag-Seiten bündeln alle Fundstellen. - Ordner, Favoriten, To-Do-Rollup über alle Notizen und Export einer Notiz als
.md. - Einfügen von mehrzeiligem Markdown wird in Blöcke zerlegt.
- Teilen: Notizen und ganze Ordner lassen sich Benutzern oder Gruppen zum Lesen freigeben. Empfänger sortieren sie in ihren eigenen Baum ein.
🛒 Geteilte Listen
- Einkaufs-, Pack- und Checklisten mit Kategorien per Hashtag (
Hafermilch #Kühlregal), Mengenangaben und Drag & Drop zwischen Kategorien. - Freigabe an Benutzer und Gruppen (Bearbeiter oder Leser); abgehakte Einträge erscheinen bei allen in Echtzeit.
🏢 Benutzer, Gruppen, Administration
- Geführte Ersteinrichtung, Rollen Admin und Mitglied, Einladungscodes, optional offene Registrierung.
- Gruppen mit Gruppen-Admins für Freigaben.
- Admin-Bereich: Benutzer, Einladungen, Instanzname, SMTP, Freigabe-Modus.
- Vier Themes (Dark, Light, High-Contrast, Soft), installierbar als PWA.
🔌 Integrationen
- Webhook / API-Key:
POST /api/v1/webhooks/ingestlegt Aufgaben aus Smarthome, Skripten oder Automationen an. - Persönliche API-Keys, Datenexport als JSON.
🚀 Schnellstart
MindSift läuft als einzelner Container mit Webserver, API, Datenbank und Frontend.
Option 1: Installationsskript
curl -fsSL https://git.dsit.me/sandrodach/MindSift/raw/branch/dev/install.sh | bash
Das Skript legt ein Verzeichnis an, lädt docker-compose.yml und .env.example, erzeugt ein JWT_SECRET und startet den Container.
Option 2: Docker Compose
mkdir -p mindsift && cd mindsift
curl -fsSL https://git.dsit.me/sandrodach/MindSift/raw/branch/dev/docker-compose.yml -o docker-compose.yml
curl -fsSL https://git.dsit.me/sandrodach/MindSift/raw/branch/dev/.env.example -o .env
# In .env: JWT_SECRET durch einen langen Zufallswert ersetzen!
docker compose up -d
Minimal:
services:
mindsift:
image: git.dsit.me/sandrodach/mindsift:dev
restart: unless-stopped
ports: ["8080:8080"]
volumes: ["./data:/data"]
environment:
- JWT_SECRET=hier-ein-langer-zufaelliger-wert
- BASE_URL=https://mindsift.example.com
Ersteinrichtung
Rufe http://localhost:8080 auf. Beim ersten Start führt ein Assistent durch das Anlegen des Administrator-Kontos.
⚠️ Setze
JWT_SECRET. Ohne Angabe nutzt der Server einen öffentlich bekannten Standardwert, mit dem sich Anmelde-Tokens fälschen lassen. Rufe die Instanz außerdem direkt nach dem Start auf, damit kein Fremder das erste Konto anlegt.
⚙️ Betrieb & Konfiguration
| Variable | Standard | Zweck |
|---|---|---|
PORT |
8080 |
HTTP-Port |
DATA_DIR |
/data (Container) |
Ablage der Datenbank mindsift.db |
JWT_SECRET |
unsicherer Standard | Pflicht in Produktion, Signaturschlüssel |
BASE_URL |
http://localhost:8080 |
Öffentliche URL |
ALLOW_REGISTRATION |
false |
Offene Registrierung (im Admin-UI änderbar) |
LOG_LEVEL / DEBUG |
info / false |
Logging |
SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_FROM, SMTP_TLS |
leer | E-Mail-Alarme (auch im Admin-UI) |
MINDA_DEMO |
false |
Legt Demo-Konten admin/admin, user/user an. Nie auf öffentlichen Servern! |
- Reverse-Proxy: WebSocket-Upgrade und ungepufferte SSE-Streams müssen durchgereicht werden. Beispiele für Nginx, Traefik, Caddy und Cloudflare: Doku/reverse-proxy.md.
- Datensicherung: Alle Daten liegen in
data/mindsift.db(+-wal/-shm). Sichere sie mitsqlite3 mindsift.db ".backup 'backup.db'"oder bei gestopptem Container. Zusätzlich gibt es einen JSON-Export pro Benutzer. - Updates: Neues Image ziehen und Container neu starten (
docker compose pull && docker compose up -d). Das Schema wird beim Start automatisch angepasst.
🛠 Entwicklung
Voraussetzungen: Go 1.23, Node 22.
# Backend: Vet und Tests
go vet ./... && go test ./...
# Frontend
cd frontend
npm ci
npm run dev # Vite-Entwicklungsserver
npx tsc --noEmit # Typprüfung
npm run build # Produktions-Build
Für das Binary wird das gebaute Frontend nach cmd/server/dist kopiert (go:embed); das mehrstufige Dockerfile erledigt das und führt Vet und Tests beim Image-Build aus.
Stack: Go (chi, gorilla/websocket, JWT, modernc SQLite) · React 18, TypeScript, Vite, Tailwind.
📚 Dokumentation
Die technische Doku liegt unter Doku/: Architektur, Datenbank, REST- und Echtzeit-API, Module, Freigaben und Berechtigungen, Themes. Bekannte Schwachstellen und offene Punkte stehen in Doku/flaws.md.
🔒 Deine Daten gehören dir
- Selbst gehostet, keine Telemetrie, keine Fremddienste. Ausgehende Verbindungen gibt es nur zu den Alarm-Zielen, die du selbst einrichtest (SMTP, Discord, Webhook).
- Alle Inhalte liegen in einer einzigen SQLite-Datei; Notizen lassen sich als Markdown exportieren, alle Daten eines Benutzers als JSON.
📄 Lizenz
Im Repository liegt derzeit keine LICENSE-Datei; die Lizenz ist damit nicht festgelegt.




