Back to portfolioVolver al porfolio

Case studyCaso de estudio

SmartOps Agent

An AI operations agent for businesses that run on WhatsApp. It reads supplier price lists, orders and voice notes in any format, keeps the catalog up to date and tells the team only what needs action. Built solo, to the standard of a delivery to a real client.

Un agente de operaciones con IA para negocios que trabajan por WhatsApp. Lee listas de precios de proveedores, pedidos y notas de voz en cualquier formato, mantiene el catálogo al día y le avisa al equipo solo lo que requiere acción. Lo construí solo, con el estándar de una entrega a un cliente real.

Live demo, no sign-upDemo en vivo, sin registro View codeVer código

45-second tour of the panel: a supplier spreadsheet in a new format stops for a person, the pipeline reads a photo of a price list, and a person takes over a chat.Recorrido de 45 segundos por el panel: una planilla de proveedor con un formato nuevo espera a una persona, el sistema lee la foto de una lista de precios y una persona toma un chat.

2,1372.137automated tests, including 187 E2E on Chrome, Android and iPhonetests automatizados, 187 de ellos E2E en Chrome, Android y iPhone
8/8prompt-injection evals passed against the real modelpruebas de prompt injection superadas contra el modelo real
$0.32USD 0,32of AI credits to build and test the whole projectde créditos de IA para construir y probar todo el proyecto
80%mutation scorede mutation score

The problemEl problema

Small distributors and hardware stores run on WhatsApp. Suppliers send price lists as photos of printed pages, PDFs, spreadsheets in their own layouts and voice notes. Customers ask for prices and place orders in the same chats. Someone copies prices into a spreadsheet by hand, orders get lost between messages, and nobody notices a 20% increase until the margin is gone.

Las distribuidoras y ferreterías chicas trabajan por WhatsApp. Los proveedores mandan listas de precios como fotos de hojas impresas, PDF, planillas con su propio formato y audios. Los clientes consultan precios y hacen pedidos en los mismos chats. Alguien pasa los precios a mano a una planilla, los pedidos se pierden entre mensajes y nadie ve un aumento del 20% hasta que el margen ya no está.

Key decisionsDecisiones clave

ArchitectureArquitectura

WhatsApp sends webhooks to an Express API that writes to PostgreSQL; a pg-boss worker processes media; n8n orchestrates three agents that call Claude through the API; a Next.js panel receives live updates. WhatsApp Cloud API API Express 5 · TypeScript rules + every write PostgreSQL data + pg-boss queues Worker media · Whisper · send n8n receiver · processor notifier agents Claude Panel Next.js · ES/EN · live (SSE) webhook outbox

An Express 5 + TypeScript API owns the WhatsApp webhook, the business rules and every write to PostgreSQL. A worker on pg-boss queues downloads media, transcribes voice notes and sends messages. n8n orchestrates the receiver, processor and notifier agents by calling the API's internal endpoints. A bilingual, mobile-first Next.js panel opens on what waits for the person, with one-click answers, and updates live over SSE.

Una API en Express 5 + TypeScript se encarga del webhook de WhatsApp, de las reglas de negocio y de toda escritura en PostgreSQL. Un worker con colas pg-boss descarga archivos, transcribe audios y envía mensajes. n8n orquesta los agentes receptor, procesador y notificador llamando a los endpoints internos de la API. Un panel en Next.js, bilingüe y pensado primero para el teléfono, abre con lo que espera a la persona, con respuestas de un clic, y se actualiza en vivo con SSE.

Node.jsTypeScriptExpress 5PostgreSQLpg-bossClaude APIZodn8nNext.js 15React 19Tailwind CSSVitestPlaywrightDockerGitHub Actions

Results (measured)Resultados (medidos)

What was hard, and what I learnedLo difícil, y lo que aprendí

Want to talk about it?¿Hablamos?

I'm looking for a full-time role, on-site in Montevideo or remote, and I also take on freelance projects.

Busco un rol full-time, presencial en Montevideo o remoto, y también tomo proyectos freelance.