Product Capability
Product
User experience, group management, admin tooling, and the core engineering path in one view.
Capabilities are grouped for end users, operators, and engineers so you can map them directly to requirements and acceptance checks.
User-facing capability
Realtime messaging
- direct messages, groups, conversation list, and paged history
- text messaging, edit, delete, and read sync
- pin, mute, and draft state per user and per conversation
Media and profile handling
- avatar upload
- message asset upload
- controlled downloads and proxy delivery
- object storage kept separate from business metadata
Multi-device consistency
usr:{userId}inbox channel for read-state sync- short-window recovery through Centrifugo
- long history replay through REST and PostgreSQL
Operations and governance capability
Admin console
- administrator login
- user ban / unban
- system broadcasts
- moderation event listing
- forced admin-side message deletion
Group and permission control
- member invite and removal
- role switching
- mute controls
- group profile updates
- channel authorization at the backend layer
Engineering capability
Business truth separated from realtime
- API handles auth, validation, and persistence
- Worker consumes Outbox and publishes to Centrifugo
- Centrifugo focuses on delivery instead of business truth
Extension-friendly boundaries
- object storage can point to S3, R2, or MinIO
- later extensions can add JetStream, search, or media SFU
- admin, user apps, API, and worker can evolve independently
Best fit
| Team type | Why it fits |
|---|---|
| Startup product teams | You can launch auth, messaging, admin, and ops without adopting an oversized platform too early |
| Platforms with moderation or compliance needs | Moderation events and admin controls stay close to the message truth |
| SaaS or community products with their own account system | You keep control instead of handing critical messaging logic to an opaque third-party box |
| Teams planning audio / video later | The boundaries between realtime, object storage, and async layers make future expansion cleaner |