Closini
Omnichannel customer messaging platform — WhatsApp, Instagram, Messenger, Telegram, SMS and web chat in one AI-assisted inbox, with a visual workflow builder.
- My Role
- Full Stack Engineer
- Timeline
- Feb 2026 — Aug 2026
- Status
- Shipped

Closini is a customer-messaging SaaS that folds seven channels (WhatsApp, Instagram, Messenger, Telegram, SMS, email and web chat) into one shared team inbox, then layers on an AI assistant for replies and a Make-style automation canvas so a support team can route and answer everything from a single screen.
The server follows domain-driven design with CQRS, keeping each channel integration at the edge and normalizing traffic into a common conversation model. The web client is paired with a React Native mobile app, and billing runs per seat through Stripe on Starter and Pro tiers.
The problem to solve
Every channel speaks its own dialect: different webhook payloads, auth flows, rate limits and review gates — Meta alone requires a formal App Review before an app can message Pages at scale. The engineering problem was to absorb these protocols into one consistent conversation model without the integrations leaking into the core.

How it was built
The server is organized around DDD and CQRS: channel integrations act as adapters at the edge, normalizing inbound events into a shared conversation model, while commands and queries keep the write and read paths separate.
Automation lives on an @xyflow node canvas modeled on Make, and monetization is per-seat Stripe billing with Starter and Pro tiers.
What it does
Seven-channel unified inbox
WhatsApp, Instagram, Messenger, Telegram, SMS, email and web chat converge into one shared team inbox.
Visual workflow builder
A Make-style node canvas built on @xyflow for automating routing and replies across channels.
AI reply assistant
An AI assistant that helps agents draft replies directly inside the inbox.
Per-seat Stripe billing
Starter and Pro tiers billed per seat through Stripe.
Native mobile app
A React Native mobile app for handling the shared inbox from a phone.

A closer look

Built with
Frontend
Next.js structures the web client — a multi-surface dashboard spanning inbox, workflow canvas, settings and billing — with routing and rendering conventions that hold up as screens multiply.
TypeScript keeps the DDD/CQRS boundaries honest: commands, queries and the payloads of the channel APIs become typed contracts instead of loose JSON.
Mobile
React Native lets the mobile app reuse the same React skill set, with one codebase for iOS and Android.
Backend
The workload is almost entirely I/O — webhook bursts from every channel and outbound API calls — which is exactly the concurrency profile Node's event loop handles well.
Data
Conversations, messages, seats and subscriptions are heavily relational data, and PostgreSQL provides the transactional integrity the billing and inbox state depend on.
Redis carries the fast-moving ephemeral state a real-time, multi-channel inbox generates — hot data that would be wasteful to push through the relational store.