Open source unified inbox for WhatsApp, Instagram, Messenger, Telegram, X (Twitter), Reddit, and Bluesky. A WhatsApp Web-style chat UI for all your social DMs, built on the Zernio API.
- One inbox, seven platforms. WhatsApp, Instagram, Messenger, Telegram, X, Reddit, and Bluesky conversations in a single list, with platform filters and search.
- Full WhatsApp messaging. Templates with variable preview, interactive buttons, lists, CTA links, WhatsApp Flows, location and contact cards, voice notes recorded in the browser, reactions, and quoted replies.
- 24-hour window enforcement. Outside WhatsApp's customer service window the composer switches to approved templates automatically.
- Read receipts and delivery ticks. Sent, delivered, read (blue ticks), failed with the platform's error message, plus optimistic sending states.
- Start conversations. New outbound DMs on X, Bluesky, Reddit, and WhatsApp (template-based).
- Rich message rendering. Photos, videos, voice messages, files, stickers, shared posts, story replies, edits with history, deleted-message indicators.
- Block and unblock WhatsApp contacts from the thread.
- WhatsApp Business Calling dial pad (optional, behind a flag).
- Light and dark mode, fully responsive, real-time via polling.
- Stateless by design. No database. Your Zernio API key is the only configuration, and it never reaches the browser.
- Get an API key. Create an account at zernio.com, connect your social accounts, and copy an API key from the dashboard.
- Clone and install:
git clone https://github.com/zernio-dev/unified-inbox
cd unified-inbox
npm install- Configure:
cp .env.example .env.local
# set ZERNIO_API_KEY=sk_... in .env.local- Run:
npm run dev
# open http://localhost:4100Or click the Deploy with Vercel button above and paste your API key when prompted.
# Required. Get yours from the Zernio dashboard.
ZERNIO_API_KEY=
# Optional. Defaults to https://zernio.com/api
# ZERNIO_API_URL=
# Optional. Set to 'true' to enable the WhatsApp Business Calling dial pad.
# NEXT_PUBLIC_WHATSAPP_CALLING_ENABLED=This app has no authentication layer of its own. Anyone who can reach your deployment can read and send messages through your API key. Run it locally, deploy it behind your own auth (for example Vercel Deployment Protection), or keep the URL private.
A stateless Next.js 15 app. Server-side proxy routes attach your ZERNIO_API_KEY and forward to the Zernio API, so the key never ships to the browser. React Query polls the conversation list every 10 seconds and the open thread every 5 seconds, with optimistic sends and automatic backoff when rate limited. Which accounts to track is stored in a cookie. There is nothing else to operate: no database, no workers, no webhooks.
Built with Next.js 15, React 19, Tailwind CSS 4, shadcn/ui, and TanStack Query.
Everything this app does is available as a REST API: docs.zernio.com. Conversations, messages, templates, broadcasts, contacts, webhooks, and more.
Issues and PRs welcome. Keep it simple.


