diff --git a/docs/superpowers/specs/2026-08-04-konsolen-seitenleiste-design.md b/docs/superpowers/specs/2026-08-04-konsolen-seitenleiste-design.md new file mode 100644 index 0000000..f1dca99 --- /dev/null +++ b/docs/superpowers/specs/2026-08-04-konsolen-seitenleiste-design.md @@ -0,0 +1,118 @@ +# Die Seitenleiste der Konsole — Entwurf + +**Stand:** 2026-08-04 · freigegeben vom Betreiber + +## Warum + +Achtundzwanzig Einträge in sieben Gruppen, und die Aufteilung hielt keine Regel +durch. Die Gruppe „System" war der Platz für alles, was sonst nirgends hinpasste: +Mail-Einrichtung neben einem Rechtsdokument, neben den persönlichen +Kontoeinstellungen, neben der Mitarbeiterverwaltung, und ganz unten eine +Aufgabenliste. Der Betreiber hat es so beschrieben: „offene Punkte ist der letzte +Punkt, dann Rolle drüber und Einstellungen wieder drüber — irgendwie passt die +Aufteilung überhaupt nicht zusammen." + +Dazu kam die Streuung: Mail lag in **drei** Gruppen — Versandtakt unter *Betrieb*, +Protokoll und Vorlagen unter *Post*, die Einrichtung unter *System*. + +Und die Seite, die sagt, was liegt („Offene Punkte"), stand ganz unten. + +## Die zwei Entscheidungen + +**Erstens: Selten benutztes verlässt die Seitenleiste.** Was man einmal einrichtet +und danach kaum wieder anfasst, kommt in einen eigenen Bereich hinter einem +einzigen Eintrag. Der Betreiber hat dabei entschieden, dass **Pakete**, +**Vorlagen** und **Mail-Vorschau** ebenfalls dorthin gehören — Rechenzentren, +Proxy-Hosts und VPN dagegen bleiben im Tagesgeschäft. + +**Zweitens: „Braucht dich" steht oben.** Drei Seiten, auf denen etwas auf jemanden +wartet, bilden einen eigenen Block ganz oben, mit einer Zahl daneben. Das ist die +Frage, mit der man eine Konsole öffnet — *muss ich gerade etwas tun?* — und sie +wurde bisher nirgends beantwortet. + +## Die Seitenleiste + +``` + Übersicht + + BRAUCHT DICH + Offene Punkte 7 + Störungen 2 + Zahlungsprobleme 1 + + KUNDEN Kunden · Instanzen + MASCHINEN Hosts · Rechenzentren · Kapazität · Proxy-Hosts · VPN + LÄUFT GERADE Bereitstellung · Wartung · Versandtakt + GELD Umsatz · Rechnungen · Finanzen + POST Posteingang · Mail-Protokoll + + Einrichtung +``` + +Zwanzig Einträge statt achtundzwanzig, und **jede Seite steht genau einmal**. +Störungen zieht aus *Läuft gerade* nach oben, Zahlungsprobleme aus *Geld* — sie +ziehen um, sie verdoppeln sich nicht. Eine Seite an zwei Stellen ist ihre eigene +Verwirrung. + +## Die Zahlen + +| Eintrag | Quelle | Kosten | +|---|---|---| +| Offene Punkte | `Register::counts()` | im Speicher, keine Abfrage | +| Störungen | ungelöste Störungen | eine Zählabfrage | +| Zahlungsprobleme | unbeglichene Fälle | eine Zählabfrage | + +Zwei Abfragen je Seitenaufruf, für 60 Sekunden zwischengespeichert. Die +Seitenleiste rendert auf jeder Konsolenseite; ohne Zwischenspeicher wäre das eine +Abgabe, die man später sucht. + +**Bei null erscheint keine Plakette, der Eintrag bleibt stehen, die Gruppe bleibt +stehen.** Ein Block, der mal da ist und mal nicht, lässt einen suchen, ob man ihn +übersehen hat — und eine Seite, die bei null verschwindet, ist bei null nicht mehr +erreichbar. + +## Der Einrichtungsbereich + +Ein Eintrag unten in der Seitenleiste, dahinter eine Seite mit Kacheln in vier +Gruppen: + +- **Zustellung** — E-Mail · Vorlagen · Mail-Vorschau +- **Angebot** — Pakete +- **Zugang** — Rollen · Einstellungen · Integrationen +- **Haus** — Bereitschaft · AV-Vertrag + +Bewusst **keine Reiterleiste**: neun Reiter wären wieder das, was wir gerade +abschaffen. Bewusst **kein Zusammenlegen der Seiten**: sie behalten ihre Routen, +ihre Berechtigungen und ihren Inhalt. Es ändert sich nur der Weg dorthin. Damit +bleibt der Umbau klein und rückholbar; ob einzelne dieser Seiten später +verschmelzen, ist eine eigene Entscheidung mit eigenem Entwurf. + +Eine Kachel, für die die Berechtigung fehlt, erscheint nicht — dieselbe Regel, die +die Seitenleiste heute schon je Eintrag anwendet. + +## Was im Code passiert + +| Stelle | Änderung | +|---|---| +| `App\Support\Navigation::console()` | neue Gruppen, Einträge umsortiert, Zählschlüssel je Eintrag | +| `resources/views/components/shell/nav.blade.php` | optionale Zählplakette neben einem Eintrag | +| `App\Livewire\Admin\Setup` + Route + `lang/{de,en}/setup.php` | die neue Kachelseite | +| `App\Support\Navigation` | die drei Zahlen, zwischengespeichert | + +`Navigation::currentLabel()` trifft über den **Routennamen**, nicht über den Pfad — +Einträge zwischen Gruppen zu verschieben bricht die Brotkrumen also nicht. + +## Zusicherungen (Tests) + +1. Jede Konsolenseite steht in der Seitenleiste oder im Einrichtungsbereich — + **genau einmal**, nirgends zweimal, keine fällt heraus. +2. Eine Kachel und ein Seitenleisteneintrag ohne Berechtigung erscheinen nicht. +3. Bei null erscheint keine Plakette; der Eintrag bleibt trotzdem da. +4. Die Zahlen kommen aus dem Zwischenspeicher, nicht bei jedem Aufruf aus der + Datenbank. + +## Offen gelassen + +Der Betreiber hat zugestimmt mit dem Vorbehalt, sich „Braucht dich" erst ansehen zu +wollen. Fällt der obere Block weg, bleibt die Ordnung darunter unverändert +bestehen — sie ist unabhängig davon entworfen.