From 10323867e9c4c87a4b1e3cb9fffcfcdeddea8715 Mon Sep 17 00:00:00 2001 From: Sandro Date: Sat, 24 Oct 2026 18:17:03 +0200 Subject: [PATCH 01/20] chore: switch active development to dev branch --- BRAIN.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/BRAIN.md b/BRAIN.md index 0fe9498..f5710c9 100644 --- a/BRAIN.md +++ b/BRAIN.md @@ -172,12 +172,14 @@ sqlite3 ./dev-data/mindsift.db ".tables" "SELECT * FROM thoughts LIMIT 5;" ## 🚀 7. Gitea CI/CD & Docker Tagging-Strategie +* **Aktiver Arbeits-Branch:** `dev` (hier entwickeln und pushen wir immer) * **Registry:** `git.dsit.me/sandrodach/mindsift` +* **Entwickler-Image:** `git.dsit.me/sandrodach/mindsift:dev` (wird bei jedem Push auf `dev` ĂŒberschrieben – kein ZumĂŒllen der Registry!) * **Gitea Secret fĂŒr Registry-Login:** `secrets.PUSH_TOKEN` * **API-Endpunkt zum Auslesen der Pipeline:** `https://git.dsit.me/api/v1/repos/sandrodach/MindSift/actions/tasks` * **Branch- & Release-Regeln ([`.gitea/workflows/build-and-publish.yaml`](file:///home/sandro/Dokumente/git/MindSift/.gitea/workflows/build-and-publish.yaml)):** - * **Push auf `main`:** FĂŒhrt **nur** Linter, TypeScript-Checks (`tsc --noEmit`) und Unit-Tests aus. **Kein Docker-Build/Push** (hĂ€lt die Registry sauber). - * **Push auf Test-/RC-Branch (z. B. `1.1-rc`, `latest`, `test-feature`):** FĂŒhrt Tests aus **und** baut/pusht das Image mit dem Branch-Namen (`:1.1-rc`, `:latest`). - * **Git-Tag / Release (z. B. `v1.0`, `1.1`):** FĂŒhrt Tests aus **und** baut/pusht das Release-Image (`:v1.0`, `:1.1`). + * **Push auf `dev`:** FĂŒhrt Linter, TypeScript-Checks (`tsc --noEmit`), Unit-Tests aus **und** ĂŒberschreibt das Image `:dev`. + * **Push auf `main`:** Ignoriert (löst keinen Runner aus). + * **Git-Tag / Release (z. B. `v1.0`, `1.1`, `latest`):** Wird manuell bei echten Releases erstellt und baut das entsprechende Release-Image. * **Cross-Compile Speedup:** `Dockerfile` nutzt `FROM --platform=$BUILDPLATFORM` fĂŒr Node & Go und kompiliert `amd64` + `arm64` nativ ĂŒber `GOOS=${TARGETOS} GOARCH=${TARGETARCH}` ohne langsames QEMU. -- 2.54.0 From 31aa43c460c3be3e8fa0237f9ab73dd2fdad7358 Mon Sep 17 00:00:00 2001 From: Sandro Date: Sat, 24 Oct 2026 18:32:03 +0200 Subject: [PATCH 02/20] style: overhaul design to authentic Google Gemini Material 3 Dark theme --- BRAIN.md | 41 +++-- docker-compose.yml | 2 +- frontend/src/App.tsx | 147 +++++++-------- .../features/capture/InstantCaptureBar.tsx | 72 ++++---- .../src/features/lists/SharedListsView.tsx | 114 ++++++------ .../src/features/settings/EcosystemView.tsx | 66 +++---- frontend/src/features/triage/TasksView.tsx | 68 +++---- frontend/src/features/triage/TriageDeck.tsx | 171 +++++++++--------- .../src/features/workspace/WorkspaceView.tsx | 100 +++++----- frontend/src/index.css | 47 +++-- frontend/tailwind.config.js | 29 +-- 11 files changed, 413 insertions(+), 444 deletions(-) diff --git a/BRAIN.md b/BRAIN.md index f5710c9..52bb27e 100644 --- a/BRAIN.md +++ b/BRAIN.md @@ -5,34 +5,37 @@ ## 🎹 1. Design-Tokens & Gemini-Dark-Theme (Copy & Paste) -### Farbpalette (Strict Hex Values) +### Farbpalette (Strict Hex Values - Google Gemini Material 3 Dark) ```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 */ +/* Backgrounds (Material 3 Dark Theme) */ +--bg-canvas: #131314; /* Google Gemini Canvas */ +--bg-surface: #1e1f20; /* Surface Container (Karten, Dialoge, Panels) */ +--bg-elevated: #282a2c; /* Elevated Container / Tonal Chips / Hover */ +--bg-field: #131314; /* Input Field Fill */ /* Borders & Dividers */ ---border-subtle: rgba(255, 255, 255, 0.08); /* 1px Standard-Kante */ ---border-focus: rgba(138, 180, 248, 0.40); /* Gemini Blue Glow */ +--border-subtle: rgba(255, 255, 255, 0.08); /* 1px Hairline Kante */ +--border-focus: rgba(168, 199, 250, 0.40); /* Gemini Primary Blue Hairline */ -/* 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) */ +/* Akzente & Status (Material 3 Soft Pastels - KEINE grellen AI-FarbverlĂ€ufe) */ +--color-primary: #a8c7fa; /* Google Gemini Primary Blue */ +--color-on-pri: #041e49; /* Text on Primary Container */ +--color-success: #a8dab5; /* Soft Green (Check / Kept) */ +--color-danger: #f28b82; /* Soft Coral Red (Discard / Delete) */ +--color-warning: #fdd663; /* Warm Amber */ /* Typografie */ ---text-primary: #e3e3e3; /* Haupttext (hoher Kontrast, augenschonend) */ ---text-muted: #9aa0a6; /* SekundĂ€rtexte, Metadaten, Placeholders */ ---text-subtle: #5f6368; /* Timestamps, Footer, Deaktiviert */ +--text-primary: #e3e3e3; /* High Emphasis */ +--text-secondary: #c4c7c5; /* Medium Emphasis */ +--text-muted: #8e918f; /* Low Emphasis / Subtle */ ``` ### 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. +* **Keine grellen FarbverlĂ€ufe:** Niemals Blau-zu-Lila-Gradienten wie billige AI-Templates. Strikte neutrale Anthrazit-FlĂ€chen mit sanften Pastell-Akzenten. +* **Keine grellen Glow-Schatten:** Keine starken farbigen Drop-Shadows oder Neon-Glows. Feine `border: 1px solid rgba(255,255,255,0.08)` Hairlines nutzen. +* **Buttons / Pills:** `rounded-full` (`border-radius: 9999px`) fĂŒr Filter, Actions und Navigation. +* **Karten:** `rounded-2xl` (`16px`) oder `rounded-3xl` (`24px`), Padding `p-5` bis `p-6`, Border `1px solid rgba(255, 255, 255, 0.08)`. +* **Input-Feld (Instant Capture):** Prompt-Box-Stil wie Google Gemini, 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 }` diff --git a/docker-compose.yml b/docker-compose.yml index 1d214ca..d257c66 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ services: build: context: . dockerfile: Dockerfile - image: git.dsit.me/sandrodach/mindsift:latest + image: git.dsit.me/sandrodach/mindsift:dev container_name: mindsift restart: unless-stopped ports: diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 62712e6..a5841e3 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -8,7 +8,6 @@ import { Brain, LogOut, User as UserIcon, - Sparkles, } from 'lucide-react'; import { DashboardStats, SharedList, Thought, User } from './lib/types'; import { api, clearToken, getToken } from './lib/api'; @@ -128,12 +127,9 @@ export const App: React.FC = () => { }; return ( -
- {/* Ambient Top Gemini Glow */} -
- +
{/* Header Bar */} -
+
{/* Brand Logo */}
{ setActiveTab('triage'); setCaptureFocusCount((c) => c + 1); }} - className="flex items-center gap-2.5 cursor-pointer group" + className="flex items-center gap-2.5 cursor-pointer group select-none" > -
- +
+
-
- +
+ MindSift - - Der Kopf frei in drei Sekunden. + + Der Kopf frei in drei Sekunden
@@ -160,10 +156,10 @@ export const App: React.FC = () => {
@@ -171,35 +167,29 @@ export const App: React.FC = () => {
{/* Main Content Container */} -
- {/* Global Instant Capture Section (Always Ready at Top) */} -
+
+ {/* Global Instant Capture Section */} +
- {/* Pill Navigation Tabs */} -