ChatMessenger
A multi-tenant, Slack-style real-time chat platform: a super-admin portal for tenant companies and a per-company chat app with presence, typing indicators, read receipts and file, image and video attachments.
- Angular
- PrimeNG
- Tailwind CSS
- WebSockets

Overview
ChatMessenger is a multi-tenant team chat platform in the style of Slack. A super-admin portal manages the tenant companies, and each company gets its own chat app.
The challenge
Chat only feels right when it is instant. Presence, typing indicators and read receipts all depend on events reaching the right people immediately, and in a multi-tenant product those events must stay inside each company. The real-time layer had to be reliable and easy to reason about across the whole app.
What I built
- A super-admin portal for managing tenant companies.
- A per-company chat application.
- Presence, so people can see who is online.
- Typing indicators and read receipts.
- File, image and video attachments.
Tech & architecture
The real-time layer is built directly on native WebSockets, wrapped in a custom SocketService that the rest of the Angular app uses for every live event, instead of pulling in a separate real-time library.
- Angular.
- PrimeNG and Tailwind CSS for the UI.
- Native WebSockets through a custom
SocketService.
Outcome
Each tenant company gets its own real-time workspace with the features people expect from a modern chat tool, and the platform owner manages every tenant from one portal. Keeping all live traffic behind one service gives the app a single, consistent place to handle real-time events.
