Files
sandrodach 3480859d8a
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 8s
docs: add comprehensive technical wiki documentation and flaws analysis; remove legacy BRAIN.md
2026-10-26 13:27:35 +01:00

4.2 KiB

📋 Kernmodul 2: Aufgaben & Kanban-System

Das Aufgaben-Modul (TasksView.tsx) bietet eine flexible Aufgabenverwaltung mit frei konfigurierbaren Listen, Kanban-Boards, Subtask-Checklisten und einem automatisierten Multi-Channel Alarm-System.


🗂️ 1. Datenmodell & Listen-Hierarchie

Aufgaben basieren technisch auf der Tabelle thoughts in SQLite. Ein Eintrag gilt als Aufgabe, wenn status = 'kept' oder (status = 'converted' AND converted_type = 'task') zutrifft.

Benutzer (users)
  └── Aufgabenlisten (task_lists)
        ├── Eigene Listen (z.B. "Privat", "Homelab")
        └── Mit Teams geteilte Listen (task_list_shares)
              └── Aufgaben (thoughts)
                    ├── Kanban-Status (todo, in_progress, done)
                    ├── Priorität (low, normal, high, urgent)
                    ├── Fälligkeitsdatum (dueDate)
                    ├── Notizen (notes)
                    └── Subtasks (JSON Array von Teilaufgaben)

Listen-Sharing & Avatar-Stack

Aufgabenlisten können für Gruppen/Teams freigegeben werden. Ein Avatar-Stack im Listen-Header und in der Tab-Leiste visualisiert alle Mitglieder, die Zugriff auf die jeweilige Liste haben.


🖥️ 2. Ansichten: Liste vs. Kanban-Board

Der Benutzer kann jederzeit nahtlos zwischen zwei Ansichten umschalten:

1. Kompakte Listenansicht

  • Optimiert für schnelles Abarbeiten und Tastatursteuerung.
  • Zeigt Checkbox, Titel, Prioritäts-Badge, Herkunfts-Pille (Webhook, Diktat), Fälligkeitsdatum und Subtask-Zähler (2/5).
  • 1-Klick-Prioritäts-Wechsel: Klick auf ein Badge rotiert durch die Prioritäten.

2. Kanban-Board (Drag & Drop)

  • Standardmäßig 3 Spalten: Zu erledigen (todo), In Arbeit (in_progress) und Erledigt (done).
  • Freie Spalten-Konfiguration: Über das Spalten-Menü können Spalten umbenannt, farblich markiert oder neue Spalten hinzugefügt werden.
  • Drag & Drop: Aufgaben können per HTML5 Drag & Drop zwischen Spalten verschoben werden. Das Backend speichert die relative Position (sort_order) und den neuen kanban_status automatisch.

🎯 3. Prioritäten & Subtasks

4-Stufen-Prioritätensystem

Aufgaben unterstützen vier einheitliche Prioritätsstufen:

  • Niedrig (low): Dezent grau hinterlegt.
  • Normal (normal): Akzentfarbe.
  • Wichtig (high): Gelb hervorgehoben mit Warndreieck (⚠️ Wichtig).
  • Dringend (urgent): Rot pulsierend mit Flammen-Icon (🔥 Dringend).

Subtasks (Teilaufgaben)

Jede Aufgabe kann eine hierarchische Checkliste von Subtasks enthalten:

  • Gespeichert als JSON in der Spalte subtasks.
  • Fortschrittsanzeige im Kartenkopf (z.B. 3/5 erledigt).
  • Einzelnes Abhaken synchronisiert direkt in die Datenbank.

⏰ 4. Multi-Channel Alarm-Scheduler

MindSift enthält einen serverseitigen Hintergrund-Ticker in Go (internal/api/server.go), der fällige Aufgaben proaktiv an externe Kanäle meldet.

flowchart TD
    Ticker["Go Background Ticker (alle 30s)"] --> Query["SELECT thoughts WHERE due_date <= now + Vorwarnzeit AND alarm_sent = 0"]
    Query --> CheckChannels{"Welche Kanäle sind beim User aktiv?"}
    
    CheckChannels -->|email| SendSMTP["E-Mail via SMTP versenden"]
    CheckChannels -->|discord| SendDiscord["Discord Webhook POST"]
    CheckChannels -->|webhook| SendCustom["Custom HTTP POST Webhook"]
    
    SendSMTP --> MarkSent["UPDATE thoughts SET alarm_sent = 1"]
    SendDiscord --> MarkSent
    SendCustom --> MarkSent

Alarm-Konfiguration

  1. Vorwarnzeit: Einstellbar in Minuten (z.B. 15, 30, 60 Minuten vor Fälligkeit).
  2. Kanal-Multi-Select: Benutzer können beliebig viele Kanäle parallel aktivieren:
    • E-Mail: Versand über den in den Admin-Einstellungen hinterlegten SMTP-Server.
    • Discord: Benachrichtigung mit formatierter Embed-Karte in einen Discord-Kanal.
    • Eigener Webhook: Beliebige HTTP POST JSON Endpunkte (z.B. Gotify, Ntfy, Home Assistant).
  3. Schutz vor Doppel-Alarmen: Sobald ein Alarm abgesetzt wurde, wird alarm_sent = 1 gesetzt. Wird das Datum der Aufgabe später geändert, setzt der Server alarm_sent = 0 automatisch zurück.