Sangatihit
Real time messaging built around the communication experience people already know.
The problem
The client needed a messaging platform that felt instant. Not a chat app that polls every few seconds, but one where you see a typing indicator appear the moment someone starts typing.
Constraints
Solo build. Fixed budget. No paid infrastructure for WebSockets. The system had to work on slow connections.
What I built
A Node.js backend with Socket.IO handling real time events. MongoDB stores messages and user data. Online presence is tracked through socket connections. Typing indicators broadcast to the relevant room. Media files upload directly to the server.
The interesting decision
I used Socket.IO rather than raw WebSockets because it handles reconnection, fallback to long polling, and room based broadcasting out of the box. The trade off is a larger client bundle, but for a chat application the reliability of reconnection matters more than a few kilobytes.
What broke, and what I changed
Early versions had a race condition where typing indicators persisted after a user disconnected. I added a server side timeout that clears typing state if no heartbeat is received within two seconds.
Result
Messages, presence, and typing indicators all update in real time without a page refresh. The system handles the core communication loop that users expect from a messaging platform.
Presence, typing state, and messages stay live without a page refresh. The server pushes updates the moment they happen.