Tech-USP: Realtime ist Default, nicht Add-on. Server-Sent Events (SSE) statt WebSocket-Setup. Cross-Aggregate-Updates über Multi-Stream-Projektionen.
Käufer-Sicht: Live-Updates wie bei Statuspages, Chats oder Dashboards funktionieren ohne externes Pusher/Ably-Abo. Eingebaut, mandanten-getrennt, getestet.
Highlights
- SSE-Endpoint eingebaut —
/ssemit Heartbeat (15s), Bun-Idle-Timeout-Handling - Asynchroner Broadcast — Write-Handler emittiert Event, SSE-Consumer pickt es auf und broadcastet an verbundene Clients
- Pro Mandant getrennt — Clients sehen nur Events ihres Mandanten
- Multi-Stream-Projektion — aggregat-übergreifende Read-Models (z. B. Dashboard, das Events aus 5 Aggregaten zusammenführt)
- Dead-Letter-Queue — fehlgeschlagene Projektionen landen in einer eigenen Tabelle für Operations
- Saubere Multi-Instanz — bei mehreren API-Instanzen erhält jeder Client jedes Event genau einmal
Architektur-Tiefendoku
event-dispatcher— Async-Delivery, Dead-Letter, Retentionprojections— Single-Stream vs Cross-Aggregate../../uebersicht.mdSprint E.9 — MSP + Ops-CLI../../uebersicht.mdWelle 2.7 — Per-Instance Consumer-Delivery
Wo das im Pitch landet
- PublicStatus-Showcase: Live-Updates auf der öffentlichen Seite = SSE-Demo
- DACH-Sales: Implizit („Kollaboration in Echtzeit ohne WebSocket-Setup”)
- Indie-Hacker: „Realtime works out of the box, no Pusher needed”