# 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.*