02

Sangatihit

Real time messaging built around the communication experience people already know.

RoleBackend developer
TypeFreelance
StackNode.js, Socket.IO, MongoDB
StatusLive

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.

Runs without me

Presence, typing state, and messages stay live without a page refresh. The server pushes updates the moment they happen.