0%
Aymen
Back to Works
WebShipped2026

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
Overview

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 Challenge

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.

Developer API
Developer API
The Solution

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.

Key Features

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.

Customer stories
Customer stories
Technologies Used

Built with

Frontend

Next.js

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

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

React Native lets the mobile app reuse the same React skill set, with one codebase for iOS and Android.

Backend

Node.js

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

PostgreSQL

Conversations, messages, seats and subscriptions are heavily relational data, and PostgreSQL provides the transactional integrity the billing and inbox state depend on.

Redis

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.