From aba52f2b3c1d168395de87d795c0fc02725fb998 Mon Sep 17 00:00:00 2001 From: Sandro Date: Sat, 24 Oct 2026 16:26:41 +0200 Subject: [PATCH] add brain.md --- BRAIN.md | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 BRAIN.md diff --git a/BRAIN.md b/BRAIN.md new file mode 100644 index 0000000..c22addc --- /dev/null +++ b/BRAIN.md @@ -0,0 +1,169 @@ +# 🧠 BRAIN.md β€” MindSift Internal Dev Cheat Sheet +> **Zweck:** Rein internes, ungeschΓΆntes Nachschlagewerk fΓΌr uns Entwickler. Keine Marketing-Texte, nur knallharte Fakten, Farbwerte, State-Machines, Namenskonventionen und Quick-Commands. + +--- + +## 🎨 1. Design-Tokens & Gemini-Dark-Theme (Copy & Paste) + +### Farbpalette (Strict Hex Values) +```css +/* Backgrounds */ +--bg-app: #0b0f19; /* Tiefstes Obsidian / OLED Base */ +--bg-surface: #131314; /* Leicht erhobene Panels, Sidebar */ +--bg-card: #1e1f20; /* Swipe-Karten, Dialoge, Dropdowns */ +--bg-card-hover: #282a2c; /* Hover-ZustΓ€nde */ + +/* Borders & Dividers */ +--border-subtle: rgba(255, 255, 255, 0.08); /* 1px Standard-Kante */ +--border-focus: rgba(138, 180, 248, 0.40); /* Gemini Blue Glow */ + +/* Akzente & Status */ +--accent-blue: #8ab4f8; /* Gemini PrimΓ€rblau (Buttons, Links, Active) */ +--accent-purple: #c58af9; /* Gemini Voice / Magic Glow */ +--swipe-keep: #81c995; /* Swipe Rechts (Behalten / ToDo / Success) */ +--swipe-discard: #f28b82; /* Swipe Links (Verwerfen / Archive / Danger) */ + +/* Typografie */ +--text-primary: #e3e3e3; /* Haupttext (hoher Kontrast, augenschonend) */ +--text-muted: #9aa0a6; /* SekundΓ€rtexte, Metadaten, Placeholders */ +--text-subtle: #5f6368; /* Timestamps, Footer, Deaktiviert */ +``` + +### UI-Regeln & Radien +* **Buttons / Pills:** Ausnahmslos `rounded-full` (`border-radius: 9999px`). +* **Karten (Triage Deck):** `rounded-3xl` (`24px`), Padding `p-6`, Border `1px solid var(--border-subtle)`. +* **Input-Feld (Instant Capture):** `rounded-full`, HΓΆhe `h-14` (56px) fΓΌr mobile Daumenbedienung, Autofokus bei Mount. +* **Gesten-Physik (Framer Motion):** + * Swipe-Schwellenwert: `dragConstraints={{ left: -150, right: 150 }}` + * Spring-Config: `{ type: "spring", stiffness: 350, damping: 25 }` + * Swipe-Winkel-Rotation: `rotate = x * 0.1` + +--- + +## βš™οΈ 2. State-Machine: Gedanken-Lifecycle + +``` + [ INSTANT CAPTURE ] + β”‚ + β–Ό + status: 'inbox' + β”‚ + β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” + β”‚ (Swipe Left) β”‚ (Swipe Right) + β–Ό β–Ό + status: 'discarded' status: 'kept' + (Soft Delete) β”‚ + β”Œβ”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β” + β”‚ (Convert) β”‚ (Direct Task) + β–Ό β–Ό + status: 'converted' due_date != null + β”œβ”€β”€ target: 'task' + β”œβ”€β”€ target: 'document' + └── target: 'list_item' +``` + +### GΓΌltige Status-Enums +* `inbox` – Frisch eingekippt, wartet auf Triage. +* `discarded` – Nach links gewischt (bleibt fΓΌr 30 Tage im Papierkorb, dann Hard Delete). +* `kept` – Nach rechts gewischt, bleibt als To-Do oder Gedanke archiviert. +* `converted` – In vollwertiges Dokument, Aufgabe oder Listen-Item transformiert. + +--- + +## πŸ“‘ 3. WebSocket Realtime Protocol (Family Lists) + +Verbindungs-URL: `wss:///api/v1/ws/spaces/:spaceId` + +### Nachrichten-Format (JSON) +```typescript +interface WSMessage { + event: 'ITEM_CREATED' | 'ITEM_UPDATED' | 'ITEM_TOGGLED' | 'ITEM_DELETED' | 'USER_PRESENCE'; + space_id: string; + list_id: string; + payload: T; + timestamp: string; // ISO 8601 +} +``` + +### Schnelle Event-Referenz +* `ITEM_TOGGLED`: Wenn jemand die Hafermilch abhakt: + `{ "item_id": "itm_123", "is_completed": true, "completed_by": "usr_sandro" }` +* `Optimistic UI`: Frontend schlΓ€gt das Item sofort lokal durch und rollt nur bei WebSocket-Fehler zurΓΌck. + +--- + +## πŸ—‚οΈ 4. Ordnerstruktur & Code-Konventionen + +``` +mindsift/ +β”œβ”€β”€ cmd/ +β”‚ └── server/ # Go Main Entrypoint (bindet embed.FS ein) +β”œβ”€β”€ internal/ +β”‚ β”œβ”€β”€ api/ # HTTP Chi Handler, Routing & Middleware +β”‚ β”œβ”€β”€ domain/ # Entities, Interfaces & Domain Logic +β”‚ β”œβ”€β”€ storage/ # SQLite / Postgres Adapter (sqlc generiert) +β”‚ β”œβ”€β”€ ws/ # WebSocket Hub & Raumverwaltung +β”‚ └── webhook/ # Smarthome Ingestion Logic +β”œβ”€β”€ migrations/ # Reine .sql Migrationsdateien +β”œβ”€β”€ frontend/ +β”‚ β”œβ”€β”€ src/ +β”‚ β”‚ β”œβ”€β”€ components/ # UI Primitives (Button, Pill, Input, Modal) +β”‚ β”‚ β”œβ”€β”€ features/ +β”‚ β”‚ β”‚ β”œβ”€β”€ capture/ # Instant-Input & Voice Recording +β”‚ β”‚ β”‚ β”œβ”€β”€ triage/ # Framer Motion Swipe Deck +β”‚ β”‚ β”‚ β”œβ”€β”€ workspace/ # Tiptap Block Editor +β”‚ β”‚ β”‚ └── lists/ # Realtime Shopping / Todo Lists +β”‚ β”‚ β”œβ”€β”€ lib/ # WS Client, API Client, Sound/Haptics +β”‚ β”‚ └── index.css # Tailwind v4 & Gemini CSS Variablen +β”œβ”€β”€ .gitea/workflows/ # Gitea Actions CI/CD +β”œβ”€β”€ Dockerfile # Multi-Stage Build (< 35 MB) +β”œβ”€β”€ docker-compose.yml +β”œβ”€β”€ README.md # Γ–ffentliche Doku & Vision +└── BRAIN.md # Dieses Dokument (Dev Cheat Sheet) +``` + +### Namens- & ID-Konventionen +* **Entity IDs:** PrΓ€fix-basierte Strings fΓΌr Lesbarkeit beim Debuggen: + * `usr_` = User (`usr_9k2m1a`) + * `th_` = Thought (`th_4x8z19`) + * `doc_` = Document (`doc_81na72`) + * `lst_` = List (`lst_33fa09`) + * `itm_` = List Item (`itm_77bb41`) +* **Datenbank:** `snake_case` (z. B. `is_completed`, `due_date`) +* **JSON API:** `camelCase` (z. B. `isCompleted`, `dueDate`) +* **Timestamps:** Immer UTC ISO-8601 (`2026-10-24T14:20:00Z`) + +--- + +## ⌨️ 5. Power-User Tastatur-Shortcuts (Desktop) + +| Taste | Kontext | Aktion | +| :--- | :--- | :--- | +| `C` oder `/` | Überall | Fokus sofort auf das Capture-Eingabefeld | +| `H` oder `←` | Triage | Karte nach links wischen (Verwerfen) | +| `L` oder `β†’` | Triage | Karte nach rechts wischen (Behalten) | +| `T` | Triage | Sofort in Aufgabe mit FΓ€lligkeitsdatum verwandeln | +| `D` | Triage | In Workspace-Dokument umwandeln | +| `Esc` | Modal/Capture | Abbrechen / Eingabe leeren | + +--- + +## ⚑ 6. Cheat Sheet: Lokale Entwickler-Befehle + +```bash +# 1. Frontend Dev Server (Hot Reload) +cd frontend && npm run dev + +# 2. Go Backend starten (Hot Reload via air oder go run) +go run ./cmd/server + +# 3. Datenbank-Migrationen lokal ausfΓΌhren +go run ./cmd/migrate -direction=up + +# 4. Lokalen Multi-Stage Docker-Build testen +docker build -t mindsift:dev . +docker run -p 8080:8080 -v $(pwd)/dev-data:/data -e JWT_SECRET="dev-secret-12345" mindsift:dev + +# 5. SQLite DB direkt per CLI inspizieren +sqlite3 ./dev-data/mindsift.db ".tables" "SELECT * FROM thoughts LIMIT 5;" +```