all posts

7 min readby Milap Magar

Building a unified inbox: lessons from Chatblix

ProductNode.jsPostgreSQL

Five messaging platforms, five webhook formats, five ideas of what a 'message' even is. What I learned normalising all of them into one inbox people actually triage.

Chatblix connects WhatsApp, Instagram, Messenger, Telegram, and TikTok into one inbox. The pitch is simple; the engineering lesson was that the hard part is never the integration — it's the abstraction you force the integrations into.

My first schema was too faithful. It preserved every platform's quirks, which meant the inbox UI needed five rendering paths and every new feature cost five implementations. The rewrite went the other way: one aggressive, opinionated Message shape, and each platform adapter is responsible for squeezing into it. Anything that doesn't fit the shape doesn't ship until it earns a place in the core model.

Webhooks taught me humility about delivery. Platforms retry, duplicate, and reorder events, and one of them (I won't say which) occasionally delivers a message's 'read' event before the message itself. Everything is idempotent now — every event handler can run twice safely — and the sync layer treats platform state as a rumour to verify, not a fact to trust.

The product lesson was the best one: users didn't ask for more AI, more channels, or more dashboards. They asked for the unread list to be trustworthy. When the count says three, there must be exactly three. Infrastructure that keeps a small promise beats features that make big ones.