# Nexus – Seitenaudit **Datum:** 2026-07-26 **Commit:** `3bc7622977f4a6c2f2e98ab4aa856a2e45c3cf49` **Auditumfang:** Alle 18 in `frontend/src/router.ts` registrierten Seiten plus ungültige Navigationsziele und sechs Viewport-Größen. ## Methodik und Evidenzgrenze Die Anwendung wurde lokal gebaut und im Browser mit repräsentativen, deterministischen API-Fixtures betrieben. Dadurch konnten Authentifizierung, Routen, Inhalte, Lade-/Leerzustände, Interaktionen und Responsive-Verhalten reproduzierbar geprüft werden. Die Fixtures ersetzen keinen Live-Systemtest: - keine reale PostgreSQL- oder OpenClaw-Verbindung, - kein produktiver Nginx-/Traefik-Pfad, - SSE absichtlich nicht als Live-Vertrag bewertet, - fixturebedingte Datums- oder Reconnect-Anzeigen gelten nicht als Produktdefekte. Jeder Screenshot stammt aus diesem Auditlauf und liegt unter [`screenshots/`](screenshots/). ## Leitbefunde 1. **Dashboard ist zwischen 375 und 1024 px nicht nutzbar.** Agent-Cards, Header und Iris-Panel überlappen oder werden abgeschnitten. 2. **Bei 768 px greift der mobile Sidebar-Breakpoint noch nicht.** Die feste 248-px-Sidebar lässt dem Board nur einen schmalen Restbereich. 3. **Zwei UI-Shells erzeugen einen Produktbruch.** Dashboard und restliche Seiten unterscheiden sich in Navigation, Sprache, Dichte, Tokens und Verhalten. 4. **Vier Dashboard-Navigationsziele sind nicht registriert.** Der Wildcard-Redirect kaschiert das Problem und zeigt wieder `/dashboard`. 5. **Daten nach Login werden nicht zuverlässig initialisiert.** Projects, Models und Activity bleiben bis zum manuellen Refresh leer. 6. **Task Board verliert auf kleinen Displays den Gesamtüberblick.** Es zeigt praktisch nur die erste Spalte und erzeugt große leere Höhen. 7. **Kontrast und Schriftgrößen sind zu schwach.** Das betrifft besonders Labels, Metadaten, Buttons und sekundäre Texte. ## Visuelle Kernevidenz ### Dashboard, Desktop 1440 px ![Dashboard desktop](screenshots/02-dashboard-desktop.png) ### Dashboard, Mobile 375 px ![Dashboard mobile](screenshots/19-dashboard-mobile-375.png) ### Dashboard, Tablet 768 px ![Dashboard tablet](screenshots/23-dashboard-tablet-768.png) ### Task Board, Mobile 375 px ![Task Board mobile](screenshots/20-task-board-mobile-375.png) ## Audit pro registrierter Seite | Route | Status | Wesentliche Befunde | Evidenz | |---|---|---|---| | `/login` | P1 | Visuell fokussiert, aber sehr dunkel. Bei 320×568 werden oberer Brand-Bereich und untere Inhalte nicht gemeinsam sichtbar; der Flow benötigt Scrollen. | [Desktop](screenshots/01-login-desktop.png), [320 px](screenshots/22-login-mobile-320.png) | | `/dashboard` | P0 | Eigenständige V2-Shell; dichte, überlappende Agent-Topologie; Suche und „Ask Iris“ ohne vollständige Aktion; feste Dashboard-Aktivmarkierung. Zwischen 375 und 1024 px schwer bis vollständig unbrauchbar. | [1440](screenshots/02-dashboard-desktop.png), [375](screenshots/19-dashboard-mobile-375.png), [768](screenshots/23-dashboard-tablet-768.png), [1024](screenshots/24-dashboard-1024.png), [1920](screenshots/25-dashboard-wide-1920.png) | | `/memory` | P2 | Kohärente List-/Detailansicht, aber sehr kleine und kontrastarme Metadaten. Der große leere Detailbereich gibt beim Einstieg wenig Orientierung. | [Desktop](screenshots/03-memory-desktop.png) | | `/docs` | P2 | Such- und Kategorienstruktur sind verständlich. Initial bleibt viel leerer Raum; kein automatisch ausgewähltes Dokument und zu schwache Sekundärtexte. | [Desktop](screenshots/04-docs-desktop.png) | | `/agents/:id` | P1 | Informationsarchitektur ist brauchbar. „Zurück zum Team“ navigiert jedoch zu nicht registriertem `/team` und landet über Wildcard auf dem Dashboard. | [Detail](screenshots/05-agent-detail-desktop.png), [Fehlredirect](screenshots/05b-agent-back-redirect-desktop.png) | | `/security` | P0 | Übersicht ist visuell nachvollziehbar, vermittelt aber mehr Sicherheit als die tatsächliche Controller-Autorisierung bietet. Deaktivierte 2FA und kritische Zugriffslücken sind nicht als Release-Blocker erkennbar. | [Desktop](screenshots/06-security-desktop.png) | | `/incidents` | P2 | Solide List-/Detailstruktur. Kleine Typografie, schwache Statusdifferenzierung und ein großer initial leerer Detailbereich bremsen den Scan. | [Desktop](screenshots/07-incidents-desktop.png) | | `/calendar` | P2 | Termine und Zeitbezug sind gut strukturiert. Refresh und Metadaten sind visuell zu zurückhaltend. | [Desktop](screenshots/08-calendar-desktop.png) | | `/projects` | P1 | Nach normalem Login zunächst leer. Erst manueller Refresh lädt Daten. Geladener ModuleView wirkt weitgehend ungestaltet und nicht wie Teil derselben Anwendung. | [Vor Refresh](screenshots/09-projects-desktop.png), [nach Refresh](screenshots/09b-projects-after-refresh-desktop.png) | | `/projects/:id` | P2 | Klare Stammdaten und Task-Zuordnung. Sehr große Leerflächen; destruktive Archivaktion erhält relativ viel visuelles Gewicht. | [Desktop](screenshots/10-project-detail-desktop.png) | | `/tasks` | P1 | Funktionsreicher Board-Flow, aber fünf Spalten überlaufen bereits auf Desktop. Auf 375 px ist nur eine Spalte plus Restkante sichtbar; keine gute mobile Statusnavigation. | [Desktop](screenshots/11-tasks-desktop.png), [375 px](screenshots/20-task-board-mobile-375.png) | | `/tasks/:id` | P1 | Detail- und Subtask-Struktur sind brauchbar. Existierende Priorität `Critical` erscheint leer, weil die Select-Option fehlt. | [Desktop](screenshots/12-task-detail-desktop.png) | | `/agents` | P2 | Stärkste Legacy-Übersichtsseite: konsistentes Grid und verständliche Rollen. Ganze `article`-Cards sind jedoch clickbar statt semantische Links/Buttons zu verwenden. | [Desktop](screenshots/13-agents-desktop.png) | | `/models` | P1 | Initial leer wegen fehlender Store-Hydration. Nach Refresh inhaltlich vorhanden, aber visuell als roher ModuleView ohne klare Hierarchie. | [Vor Refresh](screenshots/14-models-desktop.png), [nach Refresh](screenshots/14b-models-after-refresh-desktop.png) | | `/activity` | P1 | Dasselbe Hydration-Problem. Geladene Activity ist funktional lesbar, wirkt aber wie eine unvollständige Zwischenansicht. | [Vor Refresh](screenshots/15-activity-desktop.png), [nach Refresh](screenshots/15b-activity-after-refresh-desktop.png) | | `/chat` | P1 | Kernfunktion ist erkennbar, Oberfläche wirkt jedoch unfertig: schwache Hierarchie, rohe Form-Controls und keine belastbare mobile Conversation-Struktur. | [Desktop](screenshots/16-chat-desktop.png) | | `/notifications` | P2 | Filter und Gruppierung sind vorhanden. Kontrast ist schwach; Emoji-Icons brechen die sonstige Icon-Sprache und besitzen uneinheitliche Semantik. | [Desktop](screenshots/17-notifications-desktop.png) | | `/settings` | P2 | Am besten gelöste responsive Legacy-Seite. Formfelder bleiben bei 375 px nutzbar. Globale Topbar-Icons und kleine Labels bleiben Accessibility-Risiken. | [Desktop](screenshots/18-settings-desktop.png), [375 px](screenshots/21-settings-mobile-375.png) | ## Nicht registrierte oder defekte Ziele | Quelle | Ziel | Tatsächliches Verhalten | |---|---|---| | Dashboard-Sidebar | `/orchestration` | Wildcard -> `/dashboard` | | Dashboard-Sidebar | `/research` | Wildcard -> `/dashboard` | | Dashboard-Sidebar | `/hosts` | Wildcard -> `/dashboard` | | Dashboard-Sidebar | `/costs` | Wildcard -> `/dashboard` | | Agent Detail | `/team` | Wildcard -> `/dashboard` | `TeamView.vue` existiert, ist aber nicht im Router registriert. Der Wildcard-Redirect macht diese Integrationsfehler für Nutzer schwer diagnostizierbar. ## Responsive-Matrix | Viewport | Ergebnis | |---|---| | 320 px | Login scrollbar und vertikal gequetscht; kein kompakter First-Viewport-Flow | | 375 px | Dashboard P0-defekt; Task Board nur eingeschränkt navigierbar; Settings brauchbar | | 768 px | Schlechtester Dashboard-Zwischenzustand durch Off-by-one-Breakpoint und feste Sidebar | | 1024 px | Dashboard weiterhin überlappend und abgeschnitten | | 1440 px | Grundsätzlich bedienbar, aber Dashboard-Header/Cards kollidieren und Task Board läuft horizontal über | | 1920 px | Dashboard erstmals stabiler, erzeugt jedoch übermäßig viel ungenutzten Raum | ## Accessibility-Spot-Check Keine vollständige WCAG-Prüfung. Sichtbar und im DOM nachvollziehbar: - zahlreiche Icon-Buttons ohne Accessible Name, - clickbare `article`-Elemente statt Links oder Buttons, - sehr kleine Textgrößen bis in den einstelligen Pixelbereich, - schwache Kontraste für Text, Controls und Statusinformationen, - horizontale Informationsarchitektur ohne gleichwertige mobile Alternative, - Platzhalter-Controls, deren sichtbare Affordance keine Aktion auslöst. ## Priorisierte Korrekturen ### P0 1. Dashboard zwischen 375 und 1024 px neu layouten; 768-px-Grenze explizit testen. 2. Navigation nur aus registrierten Routen erzeugen oder fehlende Seiten bewusst implementieren. 3. Security-Seite und Release-Status an die tatsächlichen Zugriffskontrollbefunde koppeln. ### P1 1. Eine gemeinsame Shell, Tokenbasis und Navigation für alle Seiten festlegen. 2. Operations Store direkt nach erfolgreichem Login hydratisieren. 3. Task Board mit mobiler Statusauswahl oder segmentierter Liste statt abgeschnittener Fünf-Spalten-Fläche ausstatten. 4. `Critical` im gesamten Priority-Vertrag unterstützen. 5. Suche, Ask-Iris, Logout und Back-Navigation entweder funktionsfähig machen oder ihre Affordance entfernen. ### P2 1. Standardgrößen und Kontrast anheben. 2. Empty-/Loading-/Error-Zustände mit klarer nächster Aktion gestalten. 3. Interaktive Cards und Icon-Buttons semantisch und keyboard-tauglich machen. 4. Projects, Models, Activity und Chat aus dem generischen ModuleView in kohärente Produktseiten überführen.