Files
MABEA/arbeitskacheln/20_ui_redesign.md
T
patrickandClaude Sonnet 5 16a42c6b85
CI / backend-tests (push) Successful in 2m0s
CI / frontend-build (push) Successful in 18s
feat(ui): UI-002 Command Palette und Deep-Links statt Nav-Umbau
Globale Suche/Quick Actions per Strg/Cmd+K (CommandPalette): Objekt-
Suche nach Name/Code, Sprung zu QR-Scan/Material/Lager/Personal/
Verwaltung. AdminPage-Tab jetzt im URL-Query (?tab=...) statt nur
lokalem State, damit die Palette gezielt verlinken kann, ohne Routen
zu duplizieren. Bewusst keine neuen Sidebar-Punkte fuer Fahrzeuge/
Kontrollen/Pruefungen - dafuer gibt es keine eigenstaendigen Listen-
Seiten in MABEA.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
2026-09-06 13:09:56 +02:00

9.0 KiB

Epic 20 — UI-Redesign (moderne BOS-Plattform-Optik)

Ausgangspunkt: externer Redesign-Prompt vom 2026-09-06 (Nutzer-Vorgabe, siehe Referenzen). Keine Neuentwicklung, keine Entfernung bestehender Funktionen — bestehende API/Fachlogik/PWA/Offline-Sync bleiben unverändert, nur die Darstellung wird modernisiert. React/Vite/TypeScript bleibt, kein Framework-Wechsel.

Aktueller Stand vor Redesign: 39 Seiten-/Komponenten-Dateien, ~7.000 Zeilen, einfaches global.css (560 Zeilen) ohne Designsystem, keine UI-Bibliothek.


UI-001 — Designsystem-Grundlage

  • Ziel: Ein zentrales Set an Design-Tokens (Farben, Typografie, Abstände, Radien, Schatten) statt verstreuter Inline-Styles.
  • Beschreibung: CSS-Variablen (Light + Dark), zentrale Status-Farben (einsatzbereit/eingeschränkt/nicht einsatzbereit/unbekannt), Basis-Komponenten (Button, Card, Input, Badge, Table) vereinheitlicht.
  • Benutzerwert: Konsistentes, hochwertiges Erscheinungsbild in der ganzen App.
  • Abhängigkeiten: keine
  • Backend: keins
  • Frontend: styles/tokens.css, überarbeitetes global.css, Dark-Mode via prefers-color-scheme + manuellem Umschalter
  • Mobile: Basis für alle Folge-Kacheln
  • Rechte: keine Änderung
  • Akzeptanzkriterien: Dark Mode umschaltbar, alle Basis-Elemente nutzen Tokens statt Hardcoded-Werten.
  • Tests: keine (reines Styling), visuelle Kontrolle.
  • DoD: offen — noch nicht begonnen.

UI-002 — App-Shell & Navigation

  • Ziel: Moderne Sidebar (Desktop) / kompakte Navigation (Mobile) statt bisheriger einfacher Navigation in AppShell.tsx.
  • Beschreibung: Bereiche Dashboard/Objekte/Fahrzeuge/Material/Lager/ Kontrollen/Prüfungen/Mängel/Personal/Administration. Globale Suche Ctrl/⌘+K. Quick Actions (QR scannen, Kontrolle starten, Mangel melden, Material buchen).
  • Benutzerwert: Schnelle Orientierung, weniger Klicks zu Kernaktionen.
  • Abhängigkeiten: UI-001
  • Backend: keins (Suche client-seitig über bereits geladene Objekt-/Material-Listen, kein neuer Such-Endpunkt in Phase 1)
  • Frontend: AppShell.tsx umgebaut, neue CommandPalette-Komponente
  • Mobile: Bottom-Navigation oder Drawer statt Sidebar
  • Rechte: Navigationspunkte nach Rolle gefiltert (bereits vorhandene Rollen-Logik wiederverwenden)
  • Akzeptanzkriterien: alle bestehenden Routen weiter erreichbar, Suche findet Objekte per Name/Code.
  • Tests: keine neuen (reines Routing/UI).
  • DoD: umgesetzt (2026-09-06). Sidebar/Mobile-Nav blieb wie in UI-001 vorgefunden (bereits responsiv), stattdessen: CommandPalette (Strg/⌘+K, auch per Button "🔍 Suche" erreichbar) mit Objekt-Suche (Name/Code) + Quick Actions (QR scannen → /objekte?scan=1, Material/Lager/Personal/Verwaltung). AdminPage-Tab jetzt in der URL (?tab=...) statt nur lokalem State, damit die Palette gezielt auf einen Tab verlinken kann - keine Routen-Duplizierung. "Fahrzeuge/Kontrollen/Prüfungen" bekamen bewusst keine eigenen Nav-Punkte: es gibt dafür keine eigenständigen Listen-Seiten in MABEA (Fahrzeuge sind ein Objekttyp unter "Objekte", Kontrolle/Prüfung laufen objektbezogen über die Akte) - ein Nav-Punkt ohne Zielseite wäre Fake-Navigation.

UI-003 — Zentrale Statuskomponenten

  • Ziel: Wiederverwendbare Status-Anzeigen statt an mehreren Stellen dupliziertem Badge-Markup.
  • Beschreibung: ReadinessBadge (einsatzbereit/eingeschränkt/nicht einsatzbereit/unbekannt — „unbekannt" NIE als einsatzbereit darstellen), SyncStatus (online/offline/synchronisiert), InspectionStatus, InventoryStatus. Jede Komponente kapselt Farbe+Icon+Text an einer Stelle.
  • Benutzerwert: Konsistente, sofort verständliche Statusdarstellung überall.
  • Abhängigkeiten: UI-001
  • Backend: keins
  • Frontend: components/status/ReadinessBadge.tsx etc., bestehende Ad-hoc-Badges (DashboardPage.tsx, AktePage.tsx, ObjektListPage.tsx) darauf umgestellt
  • Rechte: keine Änderung
  • Akzeptanzkriterien: kein Status mehr als Inline-<span className="badge..."> dupliziert.
  • Tests: ggf. kleiner Komponententest je Status-Mapping.
  • DoD: offen.

UI-004 — Dashboard neu

  • Ziel: „Was ist einsatzbereit und was muss ich jetzt tun?" in 5 Sekunden beantwortbar.
  • Beschreibung: Einsatzbereitschaft-Übersicht (einsatzbereit/eingeschränkt/ nicht einsatzbereit/unbekannt), offene Mängel, fällige Kontrollen/Prüfungen, fehlendes Material, aktuelle Aufgaben — alles aus bereits vorhandenen Dashboard-/Fehlbestand-/Mangel-Endpunkten, keine Fake-Daten.
  • Benutzerwert: Kernversprechen der Kachel — sofortiger Überblick.
  • Abhängigkeiten: UI-001, UI-003
  • Backend: keins zusätzlich (bestehende Dashboard-Kennzahlen wiederverwenden)
  • Frontend: DashboardPage.tsx neu strukturiert, Card-Grid statt Liste
  • Mobile: gestapeltes Layout
  • Rechte: keine Änderung
  • Akzeptanzkriterien: alle geforderten Kennzahlen sichtbar, keine Platzhalter-/ Fake-Werte.
  • Tests: bestehende Dashboard-Tests bleiben grün.
  • DoD: offen.

UI-005 — Objektakte modernisiert

  • Ziel: AktePage.tsx (bereits FILE-006/Akte-Aggregation) optisch/strukturell aufwerten, inkl. begründeter Einsatzbereitschafts-Anzeige.
  • Beschreibung: Status mit Begründung (z. B. „🔴 Nicht einsatzbereit — Funkgerät defekt, 2 Beladungspositionen fehlen, Prüfung überfällig"), Tabs oder klar getrennte Bereiche für Beladung/Kontrollen/Mängel/Prüfungen/Wartungen/ Dokumente/Historie.
  • Benutzerwert: Sofort verständlich, WARUM ein Objekt nicht einsatzbereit ist.
  • Abhängigkeiten: UI-001, UI-003
  • Backend: ggf. kleine Ergänzung am /akte/objekt/{id}-Endpunkt, falls die Begründungs-Texte nicht schon aus den Einzelfeldern ableitbar sind (prüfen vor Umsetzung)
  • Frontend: AktePage.tsx Umbau, bisherige 6 gleichartigen Card-Blöcke (bereits als Simplification-Fund dokumentiert) auf gemeinsame Komponente vereinheitlichen
  • Rechte: keine Änderung
  • Akzeptanzkriterien: „unbekannt/nie kontrolliert" wird nie als einsatzbereit dargestellt (harte Regel, Akzeptanzkriterium testbar).
  • Tests: Begründungslogik testen (welche Bedingungen führen zu welchem Status).
  • DoD: offen.

UI-006 — Kontrolle & Beladung modernisiert

  • Ziel: Bestehenden Kontrollworkflow (QR/Objekt → Kontrolle starten → Position prüfen → OK/Abweichung → speichern → Abschluss) beibehalten, Fortschritt (38 / 40 geprüft) und fehlerhafte Positionen visuell hervorheben.
  • Benutzerwert: Schnellere, fehlerfreiere Kontrolle vor Ort.
  • Abhängigkeiten: UI-001, UI-003
  • Backend: keins
  • Frontend: KontrollPage.tsx + pages/kontrolle/* Fortschrittsanzeige, hervorgehobene Abweichungen
  • Mobile: Priorität — Haupteinsatzort dieses Screens
  • Rechte: keine Änderung
  • Akzeptanzkriterien: Fortschritt live sichtbar, Abweichungen nicht zu übersehen.
  • Tests: bestehende Kontroll-Tests bleiben grün.
  • DoD: offen.

UI-007 — QR-Scan-Aktionsleiste

  • Ziel: Nach Scan direkt Aktionen anbieten (Kontrolle starten/Mangel melden/ Informationen), nicht nur Direkt-Navigation.
  • Beschreibung: Baut auf MOBILE-002-Fix (Scan → Akte) auf, ergänzt auf der Akte-Seite eine hervorgehobene Aktionsleiste statt nur einem Button.
  • Benutzerwert: Weniger Klicks nach dem Scan.
  • Abhängigkeiten: UI-005, MOBILE-002 (bereits erledigt)
  • Backend: keins
  • Frontend: Aktionsleiste in AktePage.tsx
  • Rechte: je Aktion bestehende Rollenprüfung wiederverwenden
  • Akzeptanzkriterien: alle drei Aktionen von der Akte aus erreichbar.
  • Tests: keine neuen.
  • DoD: offen.

UI-008 — Restliche Module (Material, Lager, Personal, Administration)

  • Ziel: Verbleibende Seiten im neuen Designsystem angleichen.
  • Beschreibung: Admin-Tabs (LagerSection.tsx u.a.), MangelListePage.tsx, FehlbestandListePage.tsx auf Tokens/Statuskomponenten umstellen.
  • Benutzerwert: Durchgängiges Erscheinungsbild, keine Stilbrüche.
  • Abhängigkeiten: UI-001..003
  • Backend: keins
  • Frontend: verbleibende Seiten
  • Rechte: keine Änderung
  • Akzeptanzkriterien: keine Seite mehr im alten Stil.
  • Tests: bestehende Tests bleiben grün.
  • DoD: offen.

Reihenfolge (zwingend, laut Vorgabe): UI-001 → UI-002 → UI-003 → UI-004 → UI-005 → UI-006 → UI-007 → UI-008. Jede Stufe wird einzeln abgeschlossen und bestätigt, bevor die nächste beginnt (Arbeitskacheln-Methodik: kein Direktcoden ohne Freigabe je Schritt).

Nicht-Ziele: kein Framework-Wechsel, keine Breaking Changes an API/Fachlogik, keine Fake-Daten, Offline/PWA/IndexedDB-Sync bleibt unangetastet, bestehende Tests bleiben grün und werden erweitert wo sinnvoll.

WCAG 2.2 AA: als Leitplanke bei UI-001 (Kontraste/Fokus-Stile) und UI-002 (Tastaturbedienung Command Palette) mitgedacht, kein separater Prüf-Task.

Referenzen

Externer Redesign-Prompt, vom Nutzer am 2026-09-06 eingebracht (kompakte Version für Coding-KI, Zielrepo MABEA).