Tech USP: Realtime is default, not add-on. Server-Sent Events (SSE) instead of WebSocket setup. Cross-aggregate updates via multi-stream projections.
Buyer’s view: Live updates like status pages, chats or dashboards work without a Pusher/Ably subscription. Built in, tenant-isolated, tested.
Highlights
- SSE endpoint built in —
/ssewith heartbeat (15s), Bun idle-timeout handling - Async broadcast — write handler emits an event, SSE consumer picks it up and broadcasts to connected clients
- Per-tenant separation — clients only see events from their own tenant
- Multi-stream projection — cross-aggregate read models (e.g. dashboard pulling events from 5 aggregates)
- Dead-letter queue — failed projections land in a dedicated table for ops
- Clean multi-instance — with multiple API instances, each client receives each event exactly once
Architecture deep dive
event-dispatcher— async delivery, dead letter, retentionprojections— single-stream vs cross-aggregate
Where this lands in the pitch
- PublicStatus showcase: Live updates on the public page = SSE demo
- EU mid-market: Implicit (“real-time collaboration without WebSocket setup”)
- Indie hackers: “Realtime works out of the box, no Pusher needed”