Let's go CRM — API
NestJS backend of the Vamos CRM: hexagonal architecture that isolates the domain from external sources (Meta, Vamos APIs, the AI model), and an in-memory queue serialized by phone number to respond to the WhatsApp webhook instantly without losing or reordering messages.
Infrastructure & Backend
The Challenge
WhatsApp support depended on external sources the company does not control, such as the Meta API, the driver and trip APIs, and the AI model. Mixing business logic with the formats of those sources meant any external change could break the system, and it also had to respond in real time without losing messages under load.
The Solution
Business logic (Conversation, Message, Contact) lives isolated from external sources the company does not control, behind a hexagonal architecture. The webhook responds 200 OK immediately and queues each message behind its own port that serializes by phone number, so no conversation is processed out of order or a message lost under load. On that same foundation run deduplication of Meta retries and contact classification against an external integration configurable from the panel, each behind its own port, replaceable without touching the domain.
Related project
Vamos CRM
Role in the project
Solutions Architect and Full Stack Dev.