Skip to content
Back to projects

Cianci CRM

A CRM and operational communication platform focused on WhatsApp-based customer service, reminders, billing, and workflow automation.

crm.cianci.com.br

Context

An in-house product, in production. A CRM and operational communication platform built around WhatsApp customer service: centralized inbox, customer records, personalized messaging, reminders, and workflow automation.

Challenge

WhatsApp support is asynchronous, continuous, and intolerant of a lost message. The core challenge is making sure no conversation falls through, reminders fire on time, and automation never runs over the human operator.

My role

Product architecture, backend engineering, frontend decisions, infrastructure, integrations, and production operations.

Responsibilities

  • Product architecture and modeling of the customer-service domain.
  • Backend engineering and frontend decisions.
  • Integrations with the messaging layer.
  • Infrastructure, deployment, and production operations.

Constraints

  • Integration with a third-party messaging platform whose rules and limits we do not control.
  • Continuous operation: customer service has no comfortable maintenance window.
  • Human handoff must always be reachable. Automation cannot trap the customer.

Architecture

  • A centralized inbox as the single point where conversations converge.
  • Asynchronous processing for scheduled reminders, follow-ups, and message routing.
  • Background jobs for anything that must not block real-time service.
  • Isolated per-client configuration in assistant routing.

Main technical decisions

Treat every outbound message as an asynchronous job.

Why

The messaging API is an external system: it can slow down, rate-limit, or fail temporarily. Sending synchronously would couple the operator's experience to a third party's availability.

Trade-offs

  • More infrastructure: a queue, a worker, and backlog monitoring.
  • The 'sent' state is no longer immediate and must be reflected in the interface.
  • In exchange, a provider outage becomes a delay rather than a loss.

Keep an explicit human handoff in every automated flow.

Why

Service automation gets things wrong. Without a clear exit to a human, that error turns into a customer stuck in a loop, the worst possible outcome for a relationship product.

Trade-offs

  • Lower end-to-end automation rate.
  • Requires keeping the support team in the loop.
  • It is the right call when a bad interaction costs more than full automation saves.

Implementation

  • Service inbox and customer records.
  • Personalized messaging and scheduled communication.
  • Reminders and recurring billing workflows.
  • Workflow automation with rule-based routing.

Production concerns

  • Deployment and operations owned in-house.
  • Monitoring of availability and job backlog.
  • Message delivery tracking. A silent failure here is invisible to the operator and expensive for the customer.

Results

  • A platform in production, running real customer communication operations.
  • Consolidated into a single inbox what was previously scattered across isolated conversations.
  • Reduced recurring manual work through reminders and scheduled communication.

Stack

  • PHP
  • Node.js
  • MySQL
  • Redis
  • Docker
  • AWS
  • NGINX
  • REST APIs
  • Webhooks