# GUI/UX-Sweep — Read-only Audit & Scope-Bericht **Phase:** GUI/UX Sweep — eigene Phase außerhalb T-SPLIT (User-Priority 2 nach T-SPLIT-4-Closure) **Stand:** 2026-05-09 nach Commit `c0cfc86` **Scope:** Read-only Audit. **Kein Code, keine Migration, keine Mutation.** Lieferbericht ohne Implementierung. --- ## 1. Surface-Inventory | Kategorie | Count | Surfaces | |---|---|---| | Filament Resources | **7** | Command, ConfigProfile, DecisionLog, PositionSnapshot, RegimeLog, StrategyStat, TradeLog | | Resource sub-pages (List + View) | 14 | je `ListXxx` + `ViewXxx` per Resource | | Resource Widgets | 2 | StrategyStatsOverview, StrategyStatsTopActivity (beide unter StrategyStatResource) | | Top-level Pages | 2 | MonitoringDashboard (Default-Page `/`), GuiRoadmap | | Filament Widgets | 3 | CommandBusStats, RuntimeConfigStatus (G10-6.1), StrategyGroupKpi (T-SPLIT-3) | | Blade-Views | 4 | 2 Page-Views + 2 Widget-Views | | Tests pinning | 525 | volle Suite, davon 19 G10-6.1 + 21 G10-6.2 + 21 G10-6.3 + 19 T-SPLIT-3 + 11 T-SPLIT-4 etc. | ### Navigation-Gruppen | Gruppe | Inhalt | |---|---| | `Monitoring` | Dashboard (sort -10) | | `Trading` | Open Positions (10), Trade History (20) | | `Observability` | Decision Logs (20), Strategy Stats (30), Regime Monitor (40) | | `Configuration` | Config Profiles (10) | | `Operations` | Command Bus (100) | | `System` | GUI Roadmap | → **Sortierung uneinheitlich:** Some sorts (-10, 10, 20, 30, 100) sind weit gespreizt; Group-Headlines erscheinen aber im Filament-Default sinnvoll. --- ## 2. Theme + Branding-Befund | Aspekt | Status | Bemerkung | |---|---|---| | `brandName` | gesetzt: „Trading Bot Control Center" | OK | | `brandLogo` | **fehlt** | gap | | `favicon` | **fehlt** | gap | | `maxContentWidth` | **fehlt** (= `Full` default) | gap auf Desktop | | Color theme | nur `primary=Sky`, `gray=Slate` | minimal | | Font customization | keine | OK (Filament default ist solide) | | Login-Page styling | Filament default | OK | → Theme ist **funktional aber rudimentär**. Quick-Win-Surface. --- ## 3. Visual+Style-Konsistenz-Audit ### 3.1 Placeholder-Inkonsistenz | Resource | `->placeholder('—')` Anwendung | |---|---| | CommandResource | **konsistent** (10 Felder) | | StrategyStatsTopActivity | **konsistent** (5 Felder) | | DecisionLog / Position / Trade / RegimeLog / ConfigProfile / StrategyStat | **inkonsistent / mostly missing** | → Die meisten Tabellen zeigen leere Zellen wenn Werte NULL sind statt eines explicit `—`. ### 3.2 Polling-Cadence | Widget | Polling | |---|---| | RuntimeConfigStatusWidget (G10-6.1) | 30s ✅ | | StrategyGroupKpiWidget (T-SPLIT-3) | 30s ✅ | | CommandBusStatsWidget | **kein Polling** | | MonitoringDashboard custom blade | **kein Polling** (Page mount-once) | → MonitoringDashboard hat statisches `mount(BotMonitoringSnapshot)` — fresh-data nur bei Page-Reload. Zwei Widgets darin (RuntimeConfig + StrategyGroupKpi) pollen separat, der Rest des Dashboards aber nicht. **Inkonsistent.** ### 3.3 Filter-/Column-Density (heuristisch) | Resource | Filter | Spalten | Notiz | |---|---|---|---| | Command | 2 | 9 | dünn | | ConfigProfile | 3 | 7 | OK | | DecisionLog | 6 | 10 | OK | | PositionSnapshot | 6 | **14** | **dicht** — viele Spalten in Default-Sicht | | RegimeLog | 4 | 8 | OK | | StrategyStat | 5 | 12 | OK | | TradeLog | 7 | 10 | OK | → PositionSnapshot mit 14 Spalten potenziell zu breit für Mobile/kleine Screens. ### 3.4 Mobile-Responsive-Klassen-Density | Surface | grid-breakpoint-Klassen | |---|---| | MonitoringDashboard blade | 5 (md/xl) | | RuntimeConfigStatusWidget blade | 1 | | StrategyGroupKpiWidget blade | 2 (md/xl) | → **Inkonsistent.** Filament-Default-Resources sind responsive, aber die custom-blades sind unausgegoren. ### 3.5 Empty-state Coverage | Surface | @empty blocks | |---|---| | MonitoringDashboard | 3 (positions, trades, log lines) ✅ | | RuntimeConfigStatusWidget | 5 (gut) | | StrategyGroupKpiWidget | 1 (active vs planned) | | Resource tables (Filament default) | Generic „no records" — nicht angepasst | → Filament-Default-Empty-State ist OK aber nicht on-brand und sagt nichts über _warum_ es leer ist (z.B. T2-Card erwartet erst Tier3-Forwarded Signals). --- ## 4. Operator-Flow-Befund ### 4.1 Click-Pfade (heutig) ``` Login → MonitoringDashboard (/) ↓ [oben] RuntimeConfigStatusWidget — runtime override + last apply/clear ↓ [Mitte] StrategyGroupKpiWidget — T1/T2/T3/Legacy KPIs (4 Cards) ↓ [unten] custom-blade — Bot-Status, Mode/Network, Aggregat, Portfolios, Positionen, Closed-Trades, Recent-Log ``` ``` Sidebar → Configuration → Config Profiles → ViewProfile ↓ Header-Actions: Edit, Risk-Edit, Risk-Clear, Clone, Archive, Dry-run, Apply (real), Clear Runtime Config ↓ Footer: RuntimeConfigStatusWidget (G10-6.1) ``` ``` Sidebar → Observability → Decision Logs / Strategy Stats / Regime Monitor Sidebar → Trading → Open Positions / Trade History Sidebar → Operations → Command Bus Sidebar → System → GUI Roadmap ``` ### 4.2 Befunde - **Default-Landing ist Dashboard** — gut (Page-Path `/`). - **Drei nebeneinander wachsende Widgets** auf Dashboard — visuell trennbar, aber **kein gemeinsamer Header/Sub-Header** der Operator durch die Hierarchie führt. - **Per-Group-KPI-Cards** zeigen Snapshot-State, aber **keinen Trend** über Zeit — fehlt ein Chart-Widget für T1/T2/Legacy (Visualisierung der bereits aggregierten G3-Daten von T-SPLIT-4). - **Audit-Timeline** im CommandResource ist plain-text-`
`-Style — funktional aber nicht visuell strukturiert (keine Badges per event_type). - **Legacy positions** auf Dashboard im custom-blade-Position-Table verschwinden in der breiten Spaltenliste — kein expliziter „Legacy"-Marker für Operator. - **mode='paper'** wird wörtlich angezeigt → trifft auf User-durable-rule (TESTNET-permanent + paper→testnet/mainnet rename). Display-side-relabel ist ein Quick-Win (DB unverändert). - **GuiRoadmap** Page ist da — wird sie aktiv genutzt? Inhalt prüfen wert. --- ## 5. Befund-Aggregation: 10 konkrete UX-Findings | # | Finding | Severity | Surface | Quick-Win? | |---|---|---|---|---| | 1 | Kein brandLogo / favicon / maxContentWidth | low-mid | AdminPanelProvider | ja | | 2 | Placeholder-`—` inkonsistent über Resources | low | 5 Resources | ja | | 3 | Empty-State-Texte sind Filament-Defaults, nicht erklärend (warum leer) | low | Resource tables | ja | | 4 | Keine Trends-Visualisierung pro strategy_group über Zeit | mid | MonitoringDashboard | nein (neue Widget-Klasse + Data-Reader) | | 5 | `mode='paper'` Label tritt User's TESTNET-Rule entgegen | low-mid | DecisionLog / Position / Trade Resources | ja (display-side) | | 6 | MonitoringDashboard mount-once; mehrere Widgets pollen unabhängig | low | MonitoringDashboard | mid (Page-poll vs Widget-poll Strategie) | | 7 | PositionSnapshot 14 Spalten Default — zu dicht für Mobile | mid | PositionSnapshotResource | ja (toggleable defaults verfeinern) | | 8 | Audit-Timeline als plain-text-`` ohne Badges | low | CommandResource ViewCommand | mid | | 9 | Mobile-breakpoint Custom-blade-Density inkonsistent | mid | 3 Custom-blades | ja | | 10 | Navigation-Sort `100` für CommandBus springt aus dem Sortierschema | low | CommandResource | ja | --- ## 6. Phasen-Vorschlag | Phase | Inhalt | Files | Tests | Risk | |---|---|---|---|---| | **GUI-UX-1** | Theme (brandLogo + favicon + maxContentWidth + color extension + login-Theme-pass) | AdminPanelProvider + 1-2 SVG/PNG assets + 1 css | 3-5 | gering | | **GUI-UX-2** | Placeholder-`—` Konsistenz + Empty-State-Texte | 5 Resources + Filament-default-empty-state strings | 6-8 | gering | | **GUI-UX-3** | mode='paper' Display-Relabel zu TESTNET (read-side only, NO DB-mutation, kein Bot-Touch) | 3 Resources + small Helper Service | 6-8 | gering (passt zu durable testnet-permanent rule) | | **GUI-UX-4** | Per-strategy_group Trends-Chart-Widget über Zeit (line/bar chart über decision_logs aggregiert) | 1 neue Widget-Klasse + 1 neue Reader-Method + 1 blade-View | 8-10 | mid | | **GUI-UX-5** | MonitoringDashboard Polling-Konsistenz (Livewire-poll für komplette Page oder strukturierte sub-widgets) | MonitoringDashboard + blade | 4-6 | mid | | **GUI-UX-6** | PositionSnapshot column-density-Optimierung (default-toggleable, mobile-priority) | PositionSnapshotResource | 4-6 | gering | | **GUI-UX-7** | CommandResource Audit-Timeline Badge-Style (event_type → badge-color) | CommandResource | 4-6 | gering | | **GUI-UX-8** | Mobile-layout-Audit + Fixes über alle 3 custom-blades + tabellen-overflow | 3 blades + Resources | 6-8 | mid | | **GUI-UX-9** | (optional) Accessibility-Sweep | scattered | 4-6 | mid | **Empfohlene Reihenfolge:** **1 → 2 → 3 → 4 → 5 → 6/7 → 8** (≥ 9 optional). Quick-Wins zuerst, sichtbarer Mehrwert pro Phase, Trends-Chart als Highlight. --- ## 7. Boundaries (alle GUI-UX Phasen) | Erlaubt | Nicht erlaubt | |---|---| | Filament Resource / Widget / Page edits | DB-Migration für DB-Spalten (display-side relabel reicht) | | AdminPanelProvider config | Bot-Code touch (`trading/`) | | neue blade-Views, neue PHP-Services (read-only Reader) | Bot-Restart | | neue Filament-Widgets | runtime_config.json mutation | | Tests | row-level UPDATE auf existing data | | Asset-Files (logo, favicon) | .env mutation | | Color-/Theme-CSS | Mainnet-Pfad | | Documentation | Push (außer User-getrieben) | **Durable rule (per `feedback_testnet_permanent_paper_rename.md`):** GUI-UX-3 macht **display-side-Relabel**, KEINE DB-Mutation. Die echte paper→testnet/mainnet Rename ist eigene Naming-Cleanup-Phase. --- ## 8. Stop-Regeln - Bot-PID wechselt unerwartet - Tests brechen (jede phase muss volle Suite grün halten) - runtime_config.json mutiert - live_portfolio.json manuell mutiert - Mainnet-Pfad sichtbar - Eine GUI-UX-Phase wird zur Trading-Logik-Änderung (Stop sofort) --- ## 9. Open Questions für User-Entscheidung | ID | Frage | Default-Vorschlag | |---|---|---| | **UX-Q1** | Custom Logo / Favicon — gibt es ein Asset oder soll ich placeholder erzeugen? | placeholder mit Steve-TradingBot-Schriftzug bis User-Asset kommt | | **UX-Q2** | maxContentWidth — full / 7xl / 6xl? | `7xl` (= ~1280px) — gut für Desktop ohne zu schmal zu sein | | **UX-Q3** | mode-Relabel-Sichtbarkeit: 'paper' → 'TESTNET (paper)' oder 'testnet'? | 'TESTNET' (klar, ohne paper-Verwirrung); Tooltip erklärt Legacy-Stand | | **UX-Q4** | Trends-Chart-Library — Filament's eingebautes Chart-Widget oder custom? | Filament-eingebautes ChartWidget (Chart.js); zero-extra-deps | | **UX-Q5** | Polling-Strategie: ganzes Dashboard pollt oder nur Widgets? | Widget-level (kein Page-Reload), neue Widgets ergänzen | | **UX-Q6** | T3-Card im Dashboard mit Tooltip „planned"-Erklärung? | ja (T3-EXECUTION-Phase verlinkt) | | **UX-Q7** | GUI-UX-Sub-Phasen einzeln oder als Bundle? | einzeln (User-Approve pro Phase, analog G10/T-SPLIT-Pattern) | | **UX-Q8** | Ist Mobile-Use real (UX-8 Priorität)? | UX-8 verschiebbar; nur wenn Operator mobil nutzt | | **UX-Q9** | Accessibility-Sweep (UX-9) als Pflicht oder Optional? | Optional; Filament v4 Default reicht für interne Operator-Seite | | **UX-Q10** | Login-Page-Styling: Filament-Default oder branded? | branded (UX-1 covers it) | --- ## 10. Empfohlener nächster Schritt **GUI-UX-1 Theme + Branding** als erste aktive Phase nach diesem Audit. **Begründung in 2 Sätzen:** Theme + Logo ist **trivialer Quick-Win** (1 PHP-Edit + 2 Asset-Files + 3-5 Tests, ~20 Minuten Arbeit) und **sichtbar für jeden Operator-Login**. Sets the tone für die folgenden Phasen — die ohne theme-baseline alle „auf Filament-Default" wirken würden. **Alternative Reihenfolge** falls User Visualisierung priorisiert: GUI-UX-4 Trends-Chart-Widget direkt nach Audit (höchster sichtbarer Mehrwert, aber höherer Aufwand 8-10 Tests). --- ## 11. Boundaries des Audits selbst | Bedingung | Status | |---|---| | Bot **PID 12412 alive** (T-SPLIT-2 active) | ✅ | | `runtime_config.json` **absent** | ✅ | | `.env` mtime **1777991334 unverändert** | ✅ | | Kein Code geändert | ✅ | | Keine Migration | ✅ | | Keine Datenmutation | ✅ | | Kein Bot-Restart | ✅ | | Kein Mainnet, kein Push | ✅ | --- **STOP.** Warte auf User-Antwort zu UX-Q1..UX-Q10 + Wahl der ersten aktiven Phase. **Default-Empfehlung:** **GO GUI-UX-1** (Theme + Branding) mit den Default-Antworten zu den 10 Q-Fragen. --- *Generated 2026-05-09 19:07 UTC — read-only audit, no code, no mutation, Bot PID 12412 stable, runtime_config.json absent, .env mtime unverändert.*