docs: add devlog for evening session 2026-03-23

Context menus in 12 apps, shared-llm package, onboarding for 16 apps,
todo redesign, QuickInputBar rollout, and dashboard widgets.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-03-24 09:47:54 +01:00
parent 56ffcbac39
commit 52e9aa5889

View file

@ -0,0 +1,270 @@
---
title: 'Context Menus Everywhere, Shared LLM Package, Onboarding & Todo Redesign'
description: 'Shared ContextMenu-Component in 12 Apps integriert, neues @manacore/shared-llm Package für alle Backends, Onboarding für 16 Apps, Todo-App komplett überarbeitet mit Notepad-Design und Auto-Save.'
date: 2026-03-23
author: 'Till Schneider'
category: 'feature'
tags:
[
'context-menu',
'shared-ui',
'llm',
'gemini',
'onboarding',
'todo',
'quickinputbar',
'dashboard',
'ux',
'refactoring',
'testing',
]
featured: true
commits: 27
readTime: 12
stats:
filesChanged: 180
linesAdded: 10064
linesRemoved: 2830
contributors:
- name: 'Till Schneider'
handle: 'Till-JS'
commits: 27
workingHours:
start: '2026-03-23T14:00'
end: '2026-03-23T23:30'
---
Intensive Abend-Session mit **27 Commits** über **180 Dateien** und netto **+7.234 Zeilen**:
- **Context Menus Everywhere** - Shared `ContextMenu`-Component aus `@manacore/shared-ui` in 12 Apps integriert
- **Shared LLM Package** - Neues `@manacore/shared-llm` Package mit Google Gemini Fallback für alle Backends
- **Onboarding** - App-Onboarding für 6 neue Apps + Feature-Intro-Step für alle 16 Apps
- **Todo Redesign** - Komplett neues Notepad-Design, Auto-Save, vereinheitlichte Filter, Skeleton Loader
- **QuickInputBar** - In 6 weitere Apps integriert mit Locale-Support und Deferred Search
- **Dashboard Widgets** - Neue Widgets für Mukke, Presi und Context
---
## 1. Context Menus: Shared Component in 12 Apps
Das bestehende `ContextMenu`-Component aus `@manacore/shared-ui` wurde systematisch in alle Apps integriert, die bisher kein Rechtsklick-Menü hatten. Vorher nutzten nur Contacts (Alphabet-Nav) und Mukke (Library) das shared Component.
### Rollout-Übersicht
| App | Komponente | Aktionen | Commit |
| ------------ | ---------------- | ---------------------------------------------------------------- | ---------- |
| **Todo** | TaskList | Bearbeiten, Complete, Priorität, Projekt verschieben, Löschen | `0893e47a` |
| **Calendar** | WeekView Events | Bearbeiten, Duplizieren, Löschen (i18n: DE/EN/FR/ES/IT) | `e7bf58c5` |
| **Presi** | Deck-Karten | Öffnen, Löschen | `28286d12` |
| **ManaDeck** | Deck-Karten | Öffnen, Löschen | `28286d12` |
| **Photos** | PhotoGrid | Anzeigen, Favorit toggle, Löschen | `28286d12` |
| **Photos** | AlbumGrid | Öffnen, Löschen | `28286d12` |
| **Zitare** | Favoriten | Aus Favoriten entfernen, Kopieren, Teilen | `28286d12` |
| **Calendar** | AgendaView | Bearbeiten, Duplizieren, Löschen | `ecda4535` |
| **Chat** | ConversationList | Umbenennen, Archivieren, Löschen | `ecda4535` |
| **Contacts** | ContactGridView | Öffnen, Favorit, Anrufen, E-Mail, Löschen | `ecda4535` |
| **Storage** | FileCard | Herunterladen, Umbenennen, Teilen, Favorit, Verschieben, Löschen | `ecda4535` |
### Implementierungsmuster
Alle Implementierungen folgen dem gleichen Pattern:
```typescript
import { ContextMenu, type ContextMenuItem } from '@manacore/shared-ui';
let contextMenuVisible = $state(false);
let contextMenuX = $state(0);
let contextMenuY = $state(0);
let contextMenuTarget = $state<TargetType | null>(null);
function handleContextMenu(e: MouseEvent, target: TargetType) {
e.preventDefault();
e.stopPropagation();
contextMenuX = e.clientX;
contextMenuY = e.clientY;
contextMenuTarget = target;
contextMenuVisible = true;
}
```
### Besonderheiten
- **Calendar**: i18n-Keys für alle 5 Sprachen (DE, EN, FR, ES, IT) angelegt und in WeekView und AgendaView wiederverwendet
- **Storage**: Das bestehende custom Dropdown-Menü wurde durch das shared ContextMenu ersetzt — gleiche Aktionen, konsistentes Look & Feel
- **Todo**: Dynamische Projekt-Verschiebung — das Menü zeigt alle aktiven Projekte + Inbox
- **Contacts**: Anrufen/E-Mail-Optionen werden automatisch disabled wenn keine Telefonnummer/E-Mail vorhanden
- **Photos**: `deletePhoto`-Methode im Store neu implementiert für die Context-Menu-Aktion
---
## 2. Shared LLM Package: `@manacore/shared-llm`
Neues monorepo-weites Package, das die LLM-Integration für alle Backends vereinheitlicht. Statt dass jeder Backend-Service seine eigene AI-Integration pflegt, gibt es jetzt eine zentrale Abstraktion.
### Architektur
```
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Chat Backend │ │ Zitare Backend│ │ Planta Backend│
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────┐
@manacore/shared-llm │
│ ┌─────────┐ ┌──────────┐ ┌─────────────────┐ │
│ │ mana-llm│ │ Ollama │ │ Google Gemini │ │
│ │ (lokal) │ │ (direkt) │ │ (Cloud Fallback)│ │
│ └─────────┘ └──────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────┘
```
### Migration
**48 Dateien geändert**, +2.477 / -1.298 Zeilen. Alle Backends migriert:
- `@chat/backend` — Chat AI-Completions
- `@zitare/backend` — Zitat-Analyse (vorher eigener Ollama-Service)
- `@planta/backend` — Pflanzen-Vision-Analyse
- `@nutriphi/backend` — Ernährungs-Analyse (Gemini)
- `mana-core-auth` — AI-Service für Auth-Features
### Google Gemini Fallback
Neuer Gemini-Provider als Cloud-Fallback wenn lokale Modelle nicht verfügbar sind:
```typescript
// Auto-Routing: Lokal → Cloud Fallback
const result = await llmService.generate({
prompt: 'Analysiere dieses Bild',
image: base64Image,
preferLocal: true, // Versucht zuerst mana-llm/Ollama
});
```
---
## 3. Onboarding für 16 Apps
Onboarding-Flows für 6 neue Apps hinzugefügt und einen Feature-Intro-Step in alle 16 Apps integriert. **35 Dateien**, +872 Zeilen.
### Neue Onboarding-Apps
Die `@manacore/shared-app-onboarding` Komponente wurde in 6 weitere Apps integriert, die bisher keinen Onboarding-Flow hatten.
### Feature-Intro-Step
Alle 16 Apps zeigen jetzt beim ersten Start einen Feature-Intro-Step, der die wichtigsten Funktionen der jeweiligen App erklärt.
---
## 4. Todo-App: Komplettes Redesign
Die Todo-App wurde in dieser Session massiv überarbeitet — vom visuellen Design über die Filter bis hin zu Auto-Save.
### Notepad-Design (3 Commits)
Komplett neues Design für die Task-Liste im Stil eines physischen Notizblocks:
- Papier-ähnlicher Hintergrund mit subtiler Textur
- Linierte Zeilen als visuelle Führung
- Drag-Handle, Priority-Dot, Checkbox und Expand-Button inline
- Clean, minimalistisches Design
### Auto-Save
Save- und Cancel-Buttons entfernt. Tasks werden jetzt automatisch gespeichert mit 500ms Debounce nach jeder Änderung. Initializer-Flag verhindert unnötige Saves beim Öffnen des Edit-Formulars.
### Unified TaskFilters
`FilterStrip` und `KanbanFilters` zu einer einheitlichen `TaskFilters`-Komponente zusammengeführt:
- **841 Zeilen** neuer Code, **761 Zeilen** alter Code entfernt
- Beide Views (Liste und Kanban) nutzen jetzt denselben Filter-State
- Filter-State im `viewStore` zentralisiert
### Tests
371 neue Testzeilen für die vereinheitlichten TaskFilters und den viewStore Filter-State.
### Skeleton Loader & UI Polish
- Pixel-perfekte Skeleton Loader für Tasks, Kanban-Spalten und Statistiken
- PillNav mit Tab-Group-Semantik
- SSR Head-Fix für korrekte Seitentitel
---
## 5. QuickInputBar: 6 Weitere Apps
Die `QuickInputBar`-Komponente wurde in 6 weitere Apps integriert:
| App | Zweck |
| ------------ | ------------------- |
| **Mukke** | Song-Suche |
| **Matrix** | Room/Chat-Suche |
| **ManaDeck** | Deck-Suche |
| **Planta** | Pflanzen-Suche |
| **Photos** | Foto-Suche |
| **Presi** | Präsentations-Suche |
### Shared-UI Verbesserungen
- **Locale-aware Highlighting**: Suchbegriffe werden korrekt hervorgehoben, auch bei Umlauten und Sonderzeichen
- **Success Feedback**: Visuelles Feedback nach erfolgreicher Eingabe
- **Deferred Search Mode**: Suche wird erst nach Bestätigung ausgelöst (nicht bei jedem Tastendruck)
---
## 6. Dashboard Widgets
### Neue Widgets
Drei neue Dashboard-Widgets für die ManaCore-Startseite:
| Widget | Features |
| ----------- | --------------------------------------------- |
| **Mukke** | Aktuelle Songs, Play-Count, Lieblingsgenres |
| **Presi** | Anzahl Decks, letzte Bearbeitung, Slide-Count |
| **Context** | Dokument-Übersicht, Spaces, letzte Aktivität |
### Fixes
- Alle Dashboard-Widgets nutzen jetzt `APP_URLS` aus `@manacore/shared-branding` statt hardcodierter `localhost`-URLs
- Todo-Widgets verbessert mit korrektem Port-Mapping
- Test-Mock für Todo-Service an neuen Task-Type angepasst
---
## 7. Bugfixes
| Fix | Beschreibung |
| -------------- | ----------------------------------------------------- |
| `contacts-web` | `spiral-db` zum Dockerfile hinzugefügt |
| `contacts-web` | `shared-app-onboarding` zum Dockerfile hinzugefügt |
| `contacts-web` | `shared-pwa` Package zum Dockerfile hinzugefügt |
| `contacts-web` | `patches`-Verzeichnis zum Dockerfile für pnpm install |
| `manacore` | Hardcodierte localhost-URLs durch APP_URLS ersetzt |
| `manacore` | Todo Service Test-Mock an neuen Task-Type angepasst |
---
## Zusammenfassung
| Bereich | Commits | Highlights |
| ------------- | ------- | --------------------------------------------------- |
| Context Menus | 4 | 12 Apps mit shared ContextMenu, konsistentes UX |
| Shared LLM | 2 | Neues Package, Gemini Fallback, 5 Backends migriert |
| Onboarding | 1 | 6 neue Apps, Feature-Intro für alle 16 |
| Todo Redesign | 7 | Notepad-Design, Auto-Save, Unified Filters, Tests |
| QuickInputBar | 4 | 6 Apps, Locale-Highlighting, Deferred Search |
| Dashboard | 3 | Mukke/Presi/Context Widgets, APP_URLS Fix |
| Bugfixes | 6 | Dockerfile-Fixes, Test-Mocks |
| **Gesamt** | **27** | **180 Dateien, +10.064 / -2.830 Zeilen** |
## Nächste Schritte
1. **Context Menu Migration** — Picture-App und Todo-Kanban von custom auf shared ContextMenu migrieren
2. **Shared LLM Tests** — Unit-Tests für das neue `@manacore/shared-llm` Package
3. **Onboarding Analytics** — Tracking welche Onboarding-Steps übersprungen werden
4. **Todo Mobile** — Notepad-Design und Auto-Save auf die Expo-App übertragen
5. **Dashboard** — Verbleibende Apps (Calendar, Photos, Storage) als Widgets hinzufügen