Files
MindSift/internal/storage/seed_help.go
T
sandrodachandClaude Opus 5.5 ca56220e68
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 2m46s
feat: link dialog finds bullets of all notes; richer sample data with help notes, deep nesting and linked to-dos
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 17:23:53 +01:00

160 lines
11 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package storage
import "github.com/sandrodach/mindsift/internal/domain"
// seedLinkedTodos shows the link between notes and tasks both ways: a checklist in a note whose main
// checkbox became a task (the checkboxes below are its subtasks), and a task deepened into a note.
func (s *Store) seedLinkedTodos(user *domain.User, homelab *domain.TaskList) {
listID := ""
if homelab != nil {
listID = homelab.ID
}
blocks := seedBlocks([]seedBlock{
{typ: "callout", text: "Das Häkchen „Backup-Konzept umsetzen“ ist mit einer Aufgabe in der Liste Homelab verknüpft (Badge „Erweitert“). Die Häkchen direkt darunter sind ihre Unteraufgaben: Abhaken hier oder in der Aufgabe – beide Seiten bleiben gleich."},
{typ: "todo", text: "Backup-Konzept umsetzen #backup"},
{level: 1, typ: "todo", text: "restic-Repository auf der Storage Box anlegen", checked: true},
{level: 1, typ: "todo", text: "Nächtlicher Lauf per systemd-Timer"},
{level: 1, typ: "todo", text: "Wiederherstellung einmal komplett testen"},
{level: 1, text: "Normale Punkte gehören nicht zur Aufgabe – hier ist Platz für Gedanken zum Ablauf"},
{level: 2, text: "Aufbewahrung: 7 tägliche, 4 wöchentliche, 6 monatliche Stände"},
{typ: "h3", text: "So geht's"},
{level: 1, text: "Ein Häkchen über „Erweitert“ (Menü am Häkchen) zur Aufgabe machen"},
{level: 1, text: "Neue Häkchen direkt eine Ebene darunter werden automatisch Unteraufgaben"},
{level: 1, text: "Umgekehrt: In den Aufgaben „Als Notiz vertiefen“ – siehe die Notiz zur Aufgabe „Uptime-Monitoring“"},
})
doc, err := s.CreateDocument(user.ID, "", "Backup-Konzept", "💾", "Projekte", blocks, []string{"homelab"}, false)
if err != nil || doc == nil {
return
}
task, err := s.CreateTaskFromDocBlock(user.ID, doc.ID, blocks[1].ID, blocks[1].Content, false)
if err != nil || task == nil {
return
}
s.ReconcileDocTaskLinks(doc.ID)
high, status := "high", "in_progress"
_, _ = s.UpdateThoughtDetails(user.ID, task.ID, nil, nil, nil, &high, &listID, &status, nil, nil, nil)
// A task of the list deepened into a note: the note starts with its checkbox and subtasks
var monitoringID string
_ = s.db.QueryRow(`SELECT id FROM thoughts WHERE user_id = ? AND content LIKE 'Uptime-Monitoring%'`, user.ID).Scan(&monitoringID)
if monitoringID != "" {
_, _ = s.UpdateThoughtTriage(user.ID, monitoringID, "keep", "document", "", "", "")
}
}
// seedHelpNotes: a short guide to MindSift as notes, so the demo explains itself while showing the block
// types (headings, callouts, numbered lists, code, links to notes).
func (s *Store) seedHelpNotes(user *domain.User) {
_, _ = s.CreateFolder(user.ID, "MindSift-Hilfe")
help := func(title, icon string, spec []seedBlock) {
_, _ = s.CreateDocument(user.ID, "", title, icon, "MindSift-Hilfe", seedBlocks(spec), []string{"hilfe"}, false)
}
help("Erste Schritte", "👋", []seedBlock{
{typ: "callout", text: "Willkommen! Diese Notizen erklären MindSift. Alles hier ist Beispielinhalt – ändern, verschieben und löschen ist ausdrücklich erlaubt. #hilfe"},
{typ: "h2", text: "Die Idee in drei Schritten"},
{typ: "numbered", text: "**Erfassen:** Alles, was dir einfällt, sofort in die Leiste oben (Quick Dump) – Taste `C` oder `/`, am Handy das +."},
{typ: "numbered", text: "**Sortieren:** In der Triage gehst du die Gedanken später durch: verwerfen, Aufgabe, Notiz oder Listeneintrag."},
{typ: "numbered", text: "**Vertiefen:** Aufgaben bekommen Unteraufgaben und Termine, Notizen werden zu Gliederungen, Listen teilst du mit der Familie."},
{typ: "h2", text: "Weiterlesen"},
{level: 1, text: "[[Notizen & Outliner]] – Punkte, Ebenen, Zoom und Verlinken"},
{level: 1, text: "[[Zoom ausprobieren]] – eine Gliederung zehn Ebenen tief"},
{level: 1, text: "[[Aufgaben & Kanban]] – Listen, Spalten, Papierkorb"},
{level: 1, text: "[[Listen & Einkauf]] – gemeinsam einkaufen und packen"},
{level: 1, text: "[[Tastenkürzel]] – schneller arbeiten"},
{level: 1, text: "[[Spracheingabe]] – diktieren statt tippen"},
{level: 1, text: "[[Teilen & gemeinsam bearbeiten]]"},
{level: 1, text: "[[API & Smart Home]] – Home Assistant und KI-Agenten anbinden"},
})
help("Notizen & Outliner", "📝", []seedBlock{
{typ: "h2", text: "Punkte und Ebenen"},
{level: 1, text: "`Enter` legt einen neuen Punkt an, `Tab` rückt ein, `Shift+Tab` rückt aus"},
{level: 1, text: "Punkte mit Unterpunkten lassen sich auf- und zuklappen (Pfeil links beim Drüberfahren)"},
{level: 1, text: "Am Punkt (•) ziehen verschiebt den ganzen Ast"},
{level: 1, text: "Klick auf den Punkt (•) **zoomt** in den Ast – probier es in [[Zoom ausprobieren]]"},
{typ: "h2", text: "Formatieren"},
{level: 1, text: "Am Zeilenanfang: `- ` Punkt, `1. ` Nummer, `[] ` Häkchen, `# ` Überschrift"},
{level: 1, text: "`/` öffnet das Menü: /todo, /h1, /code, /callout, /image, /audio, /diktat, /extract …"},
{level: 1, text: "**fett** mit `Strg+B`, *kursiv* mit `Strg+I`, Link mit `Strg+K`"},
{typ: "h2", text: "Verlinken"},
{level: 1, text: "`[[Notiztitel]]` verlinkt eine Notiz, z. B. [[Erste Schritte]]"},
{level: 1, text: "Auch einzelne Punkte lassen sich verlinken: im Verlinken-Fenster nach Text suchen, gefundene Punkte stehen unter den Notizen"},
{level: 1, text: "`#Hashtags` sammeln Fundstellen über alle Notizen, z. B. #hilfe"},
{typ: "h2", text: "Markieren und löschen"},
{level: 1, text: "Mit der Maus über mehrere Punkte ziehen markiert Text über Punktgrenzen; Entf löscht wie in einem Texteditor"},
{level: 1, text: "`Strg+Z` nimmt jede eigene Änderung zurück"},
{typ: "callout", text: "Gelöschte Notizen landen im Papierkorb unten in der Ordnerleiste. Wie lange sie dort bleiben, steht unter Kontoeinstellungen → Aufbewahrung."},
})
help("Zoom ausprobieren", "🔍", []seedBlock{
{typ: "callout", text: "Klick auf einen Punkt (•) zeigt nur diesen Ast. Oben erscheint der Pfad – ein Klick darauf geht Ebene für Ebene zurück."},
{text: "Ebene 1: Projekt „Garten neu anlegen“"},
{level: 1, text: "Ebene 2: Beete"},
{level: 2, text: "Ebene 3: Hochbeet am Zaun"},
{level: 3, text: "Ebene 4: Bepflanzung"},
{level: 4, text: "Ebene 5: Frühjahr"},
{level: 5, text: "Ebene 6: Salat und Radieschen"},
{level: 6, text: "Ebene 7: Sorten"},
{level: 7, text: "Ebene 8: Pflücksalat „Lollo Rosso“"},
{level: 8, text: "Ebene 9: Aussaat ab Mitte März"},
{level: 9, text: "Ebene 10: alle zwei Wochen nachsäen – so gibt es den ganzen Sommer Salat 🥗"},
{level: 7, text: "Ebene 8: Radieschen „Eiszapfen“"},
{level: 5, text: "Ebene 6: Kräuter"},
{level: 6, text: "Ebene 7: Schnittlauch, Petersilie, Basilikum"},
{level: 4, text: "Ebene 5: Sommer"},
{level: 5, text: "Ebene 6: Tomaten und Zucchini"},
{level: 2, text: "Ebene 3: Kräuterspirale"},
{level: 1, text: "Ebene 2: Rasen"},
{level: 2, typ: "todo", text: "Ebene 3: Vertikutieren im April"},
})
help("Aufgaben & Kanban", "✅", []seedBlock{
{typ: "h2", text: "Ansichten"},
{level: 1, text: "**Liste** mit den Reitern Offen, Erledigt und Papierkorb; Gruppe und Sortierung stehen rechts darüber"},
{level: 1, text: "**Kanban** mit eigenen Spalten je Aufgabenliste (Spalten anpassen: Name, Farbe, Erledigt-Spalte)"},
{level: 1, text: "„Alle Aufgaben“ zeigt die Spalten aller Listen zusammengeführt"},
{typ: "h2", text: "Arbeiten mit Aufgaben"},
{level: 1, text: "Klick öffnet die Details: Priorität, Fälligkeit mit Uhrzeit, Wiederholung, Unteraufgaben, Notizen (mit Mikrofon)"},
{level: 1, text: "Ziehen sortiert um oder wechselt die Spalte; `Strg+Z` nimmt Löschen, Verschieben und Abhaken zurück"},
{level: 1, text: "Aufgaben und Notizen lassen sich verknüpfen – Beispiel: [[Backup-Konzept]]"},
{typ: "h2", text: "Aufräumen"},
{level: 1, text: "Erledigte wandern nach einer Frist in den Papierkorb, der sich später selbst leert"},
{level: 1, text: "Die Fristen stellst du unter Kontoeinstellungen → Aufbewahrung ein"},
})
help("Listen & Einkauf", "🛒", []seedBlock{
{text: "Kategorien entstehen aus Hashtags: `Hafermilch #Kühlregal` landet unter „Kühlregal“"},
{text: "Mengen ins eigene Feld, z. B. `500 g` oder `3x`"},
{text: "Geteilte Listen zeigen Abhaken bei allen sofort – ideal für den Wocheneinkauf"},
{text: "Abgehakte Einträge verschwinden nach einer Woche von selbst (einstellbar unter Aufbewahrung)"},
})
help("Tastenkürzel", "⌨️", []seedBlock{
{typ: "h2", text: "Überall"},
{level: 1, text: "`C` oder `/` – Quick Dump"},
{level: 1, text: "`Strg+K` – globale Suche über Notizen, Aufgaben und Listen"},
{typ: "h2", text: "Triage"},
{level: 1, text: "`H` / `←` verwerfen, `L` / `→` Aufgabe, `T` mit Termin, `D` Notiz, Leertaste später"},
{typ: "h2", text: "Notizen"},
{level: 1, text: "`Tab` / `Shift+Tab` ein- und ausrücken, `Strg+Z` / `Strg+Shift+Z` rückgängig und wiederholen"},
{level: 1, text: "`Strg+Shift+F` Fokus-Modus – nur die Notiz, in Lesebreite"},
{typ: "h2", text: "Aufgaben"},
{level: 1, text: "`Strg+Z` nimmt Löschen, Verschieben und Abhaken zurück"},
})
help("Spracheingabe", "🎙️", []seedBlock{
{text: "Mikrofone gibt es im Quick Dump, beim Anlegen von Aufgaben und Listeneinträgen, in den Detailnotizen einer Aufgabe und als `/diktat` in Notizen"},
{text: "Am Handy: das + gedrückt halten startet sofort eine Aufnahme"},
{text: "Mit eigenem Whisper-Server bleibt die Aufnahme auf deinem Server; unter Kontoeinstellungen → Spracheingabe wählst du Whisper oder die Erkennung des Browsers"},
{typ: "callout", text: "In dieser Demo nutzt MindSift die Spracherkennung des Browsers."},
})
help("Teilen & gemeinsam bearbeiten", "🤝", []seedBlock{
{text: "Notizen, Ordner, Aufgabenlisten und Listen lassen sich mit Personen oder Gruppen teilen – zum Bearbeiten oder nur zum Lesen"},
{text: "In einer geteilten Notiz schreiben mehrere gleichzeitig; wer in einem Punkt tippt, hält ihn kurz für sich"},
{level: 1, text: "Probier es aus: „Homelab 2.0“ ist mit dem Demo-Konto **user** geteilt – in einem zweiten Browser als user/user anmelden"},
{text: "Aufgaben in geteilten Listen lassen sich Personen zuweisen und beobachten"},
})
help("API & Smart Home", "🔌", []seedBlock{
{text: "Unter Kontoeinstellungen → API legst du Schlüssel mit genau den Rechten an, die ein Gerät braucht"},
{typ: "h3", text: "Heute fällige Aufgaben abfragen"},
{typ: "code", lang: "bash", text: "curl -H \"X-API-Key: mindsift_sec_…\" \\\n \"https://mindsift.example.com/api/v1/tasks?due=today&status=open\""},
{typ: "h3", text: "KI-Agenten (MCP)"},
{text: "Claude Code, Codex und andere Agenten lesen und pflegen Aufgaben und Listen über `/api/v1/mcp`"},
{text: "Was ein Schlüssel anlegt oder ändert, trägt eine kleine Badge mit seinem Namen"},
})
}