Estudio independiente de sistemas con IA. Independent AI systems studio.

Diagnóstico. Sistema. Un poco de obsesión. Diagnosis. Systems. A little obsession.

La IA interpreta.
El código decide.
AI interprets.
Code decides.

Un modelo de lenguaje es excelente para entender a una persona que escribe apurada, con faltas y cambiando de idea. También es poco confiable para copiar un precio, calcular una cuota o confirmar que algo se hizo.

Por eso separamos el trabajo. La IA lee el mensaje. El código arma los montos, verifica cada acción y decide qué sale. Lo que no cierra pasa a una persona, con el contexto listo.

Todo lo que ves acá abajo salió de esa regla, aprendida en producción y con clientes reales del otro lado.

A language model is excellent at understanding someone who types in a hurry, with typos, changing their mind. It is also unreliable at copying a price, calculating an installment or confirming that something was done.

So we split the job. AI reads the message. Code builds the amounts, verifies every action and decides what goes out. Whatever doesn't add up goes to a person, with the context ready.

Everything below came from that rule, learned in production with real customers on the other end.

01 Venta de celulares · CórdobaPhone retail · Córdoba, Argentina En producción desde octubre de 2026Live since October 2026

Geotecno

Un vendedor de WhatsApp que cotiza, toma usados y le pasa al asesor la venta lista para cerrar. A WhatsApp sales agent that quotes, takes trade-ins and hands the advisor a sale ready to close.

Demo con datos de ejemplo Demo with sample data

Antes

El WhatsApp contestaba con el link a una página. El cliente buscaba solo, preguntaba igual y alguien terminaba respondiendo a mano: modelo, color, precio en dólares, en pesos, en cuotas y cuánto le tomaban su usado. La mayoría de esas consultas llegaba desde publicidad, justo cuando más rápido había que contestar.

Qué entregamos

  • Cotizador en dólares, pesos y cuotas, leído de las planillas que el cliente ya usa. Cambia un precio ahí y el bot contesta con el nuevo.
  • Toma de usados con cálculo de saldo y pago combinado.
  • Listas por marca y presupuesto, búsqueda de modelos, colores con distinto precio y respuesta a mensajes citados.
  • Pase al asesor con aviso por Telegram y link directo al chat. El bot no regala nada ni cierra por su cuenta.
  • Silenciado de proveedores y filtro de grupos.
  • Monitor de catálogo, alerta de fallas y un detector diario de charlas problemáticas.
  • Panel con embudo, anuncios contra orgánico, mapa de calor y modelos más pedidos.

Lo difícil

Tiramos la primera versión

La v1 era un agente que contestaba libre, con 108 expresiones regulares detrás corrigiendo lo que salía mal. Cada falla nueva era una regla más, y las reglas empezaban a chocar entre sí. Lo rediseñamos: la IA solo devuelve qué pide el cliente y con qué datos, y el código decide y arma toda la respuesta. Así casi todo el bot se puede probar sin gastar una sola llamada al modelo.

La gente escribe en ráfagas

"Quiero un 18 Pro Max" y, seis segundos después, "¿tenés o no tenés?". El segundo mensaje leía el estado antes de que el primero lo guardara, y al terminar borraba lo que el cliente acababa de pedir. Por afuera parecía que el bot perdía el hilo. Lo resolvimos con un turno por chat: una marca que vence sola, una espera corta y una relectura del estado antes de seguir.

El mensaje que llegaba vacío

Los clientes que entraban desde un anuncio a veces aparecían como un error de WhatsApp, y el bot les pedía repetir. Leímos las ejecuciones reales: 19 de cada 24 de esos "vacíos" llegaban después como texto normal, con el mismo identificador. Contestar al instante era una falsa alarma. Ahora espera 45 segundos y solo responde si la charla sigue quieta.

Respuestas inventadas con una cita real

Para que no inventara, le pedimos que citara la frase de la información que respaldaba cada respuesta, y verificamos en código que esa frase existiera. El modelo encontró la salida: citó una frase verdadera de otro tema. Sumamos un segundo chequeo que compara el tema de la cita con el de la pregunta. Lo que no pasa va al asesor.

Tres capas de prueba, porque ninguna alcanza

Antes de cada publicación corren los tests del diálogo y un replay de charlas reales que detecta regresiones. Una batería con IA real encuentra lecturas distintas del modelo y un verificador independiente encuentra frases nuevas. Cada falla real que arreglamos se suma como caso.

Before

WhatsApp replied with a link to a page. Customers browsed alone, asked anyway, and someone ended up answering by hand: model, color, price in dollars, in pesos, in installments, and how much their used phone was worth. Most of those inquiries came from ads, exactly when speed mattered most.

What we delivered

  • Quotes in dollars, pesos and installments, read from the spreadsheets the client already uses. Change a price there and the bot answers with the new one.
  • Trade-ins with balance calculation and combined payment.
  • Lists by brand and budget, model search, per-color pricing and replies to quoted messages.
  • Handoff to the advisor with a Telegram alert and a direct link to the chat. The bot never gives anything away or closes on its own.
  • Supplier muting and group filtering.
  • Catalog monitor, failure alerts and a daily detector of problematic chats.
  • Dashboard with funnel, ads versus organic, heat map and most requested models.

The hard part

We threw away the first version

V1 was an agent answering freely, with 108 regular expressions behind it fixing what went wrong. Every new failure meant one more rule, and the rules started to collide. We redesigned it: AI only returns what the customer wants and with which data, and code decides and builds the whole reply. Almost all of the bot can now be tested without a single model call.

People type in bursts

"I want an 18 Pro Max" and, six seconds later, "do you have it or not?". The second message read the state before the first one saved it, and when it finished it erased what the customer had just asked for. From the outside, the bot seemed to lose the thread. We solved it with one turn per chat: a self-expiring mark, a short wait and a fresh read of the state before continuing.

The message that arrived empty

Customers coming from an ad sometimes showed up as a WhatsApp error, and the bot asked them to repeat. We read the real executions: 19 out of 24 of those "empties" arrived later as normal text with the same identifier. Replying instantly was a false alarm. Now it waits 45 seconds and only answers if the chat is still quiet.

Made-up answers with a real quote

To stop it from making things up, we asked it to quote the sentence backing each answer, and code verified the sentence existed. The model found the way out: it quoted a true sentence about a different topic. We added a second check comparing the quote's topic with the question's. Whatever fails goes to the advisor.

Three test layers, because none is enough

Before every release, the dialogue tests run along with a replay of real conversations that catches regressions. A battery with real AI finds different model readings, and an independent verifier finds new phrasings. Every real failure we fix becomes a new case.

tests automáticos del diálogoautomated dialogue tests
300
turnos reales en el replayreal turns in the replay
665
escenarios con IA realscenarios with real AI
60
de aciertos en controles con charlas nuevaspass rate on controls with unseen chats
85–92,5%

n8n · WhatsApp API oficial (YCloud) · Claude Haiku · Google Sheets · Telegram · Vercel

02 Barbería · CórdobaBarbershop · Córdoba, Argentina En producciónLive

Capitano Barber

Una recepcionista que da turnos por WhatsApp mientras el barbero corta. A receptionist that books appointments over WhatsApp while the barber cuts.

Demo con datos de ejemplo Demo with sample data

Antes

Un solo barbero coordinando la agenda por WhatsApp entre corte y corte. Mucha demanda, ningún margen de error y cada turno cruzado a mano.

Qué entregamos

  • Agente con 11 herramientas: disponibilidad, crear, mover y eliminar turnos, clientes, estado y pase a una persona.
  • Grilla de horarios por día y reserva resueltas en código, contra Google Calendar.
  • Control en manos del barbero: manda #bot en un chat y el agente se calla 15 minutos para ese cliente.
  • Monitor de conexión cada 10 minutos y alertas por Telegram.
  • Tablero para el dueño con ocupación y clientes nuevos por día, mes y año, instalable en el celular.

Lo difícil

Dos clientes, el mismo horario

Una auditoría de la planilla encontró 10 horarios reservados dos veces. En 9 de los 10 casos, dos clientes habían visto "libre" al mismo tiempo: una carrera entre consultar y crear. Primero sumamos una revisión antes de crear. Como no alcanzaba, ahora el sistema relee el día después de crear y gana el que llegó primero: el evento sobrante se borra y el horario vuelve como ocupado. Probado en 3 de 3 carreras.

"Listo, te lo cancelé", sin haber hecho nada

El modelo a veces afirmaba acciones que nunca ejecutó. Un control en código compara lo que dice con las herramientas que realmente corrió. Si no coincide, reintenta una vez y, si vuelve a fallar, manda un mensaje neutro. Está verificado contra una alucinación real.

Respuestas que tardaban hasta tres minutos

Descartamos varias hipótesis falsas hasta verlo en los logs: la librería de WhatsApp se quedaba esperando confirmaciones de dispositivos vinculados, en fila. El primer parche no hizo nada, porque el proceso real corre otro archivo del build. Con el parche en el lugar correcto, medimos de 126–184 segundos a menos de 20. Es una mitigación: la causa de fondo está en la librería y se va con la API oficial.

Pasos que dependían de la buena memoria de la IA

Guardar un turno dependía de que el modelo pasara un identificador a otra herramienta. Cuando no lo hacía, la fila se perdía. Ahora crear también guarda, rechaza horarios que el cliente no pidió y reconoce los turnos propios para no decirle "ocupado" a quien ya reservó.

Medir antes de cambiar

Un prompt más corto consumía la mitad de tokens. Lo comparamos contra el actual en 144 turnos con verificación automática: acertó 52 de 72 contra 59 de 72, y falló siempre el caso más simple. No se adoptó. Cada idea se prueba contra una copia antes de tocar producción.

Before

One barber coordinating the schedule over WhatsApp between haircuts. High demand, no margin for error, and every booking cross-checked by hand.

What we delivered

  • Agent with 11 tools: availability, create, move and delete bookings, customers, status and handoff to a person.
  • Per-day slot grid and booking handled in code, against Google Calendar.
  • The barber stays in control: sending #bot in a chat silences the agent for that customer for 15 minutes.
  • Connection monitor every 10 minutes and Telegram alerts.
  • Owner dashboard with occupancy and new customers by day, month and year, installable on the phone.

The hard part

Two customers, one slot

An audit of the spreadsheet found 10 slots booked twice. In 9 of those 10 cases, two customers had seen "free" at the same time: a race between checking and creating. We first added a check before creating. That wasn't enough, so now the system re-reads the day after creating and the first one wins: the extra event is deleted and the slot comes back as taken. Tested on 3 out of 3 races.

"Done, cancelled", without doing anything

The model sometimes claimed actions it never ran. A code check compares what it says against the tools it actually executed. If they don't match, it retries once and, if it fails again, sends a neutral message. It has been verified against a real halucination.

Replies that took up to three minutes

We ruled out several false leads until the logs showed it: the WhatsApp library was queueing behind confirmations from linked devices. The first patch did nothing, because the running process uses a different build file. With the patch in the right place, we measured 126–184 seconds down to under 20. It's a mitigation: the root cause lives in the library and goes away with the official API.

Steps that relied on the AI's memory

Saving a booking depended on the model passing an ID to another tool. When it didn't, the row was lost. Now creating also saves, rejects times the customer didn't ask for and recognizes its own bookings, so nobody who already booked is told "taken".

Measure before changing

A shorter prompt used half the tokens. We compared it against the current one over 144 turns with automatic verification: 52 of 72 correct versus 59 of 72, and it always failed the simplest case. It wasn't adopted. Every idea is tested on a copy before it touches production.

herramientas del agenteagent tools
11
carreras de reserva resueltasbooking races resolved
3/3
peor demora medidaworst measured delay
184s → 20s
turnos para decidir un promptturns to decide on a prompt
144

n8n · Evolution API · gpt-4.1-mini · Google Calendar · Google Sheets · Telegram · Netlify

03 Ferretería y siderúrgica · CórdobaHardware and steel supplier · Córdoba, Argentina En producciónLive

El Herrero

Del PDF del presupuesto al remito final: el sistema que ordena cómo vende un equipo entero. From the quote PDF to the final delivery note: the system that organizes how a whole team sells.

Antes

Consultas y presupuestos repartidos por WhatsApp entre varios vendedores, seguimiento en planillas que se trababan, filas huérfanas y duplicados. La web era estática, sin catálogo ni pedidos.

Un giro honesto

Empezó como un bot que atendía consultas. Con el uso, el dueño prefirió que la atención quedara en su equipo, así que lo retiramos y nos quedamos con lo que de verdad ordenaba el negocio: todo lo que pasa detrás de la charla.

Before

Inquiries and quotes scattered across several salespeople's WhatsApp, tracking in spreadsheets that kept choking, orphaned rows and duplicates. The website was static, with no catalog or orders.

An honest turn

It started as a bot answering inquiries. With use, the owner preferred that customer care stay with his team, so we retired it and kept what really organized the business: everything that happens behind the conversation.

CRM automáticoAutomatic CRM

Detecta cada presupuesto PDF que sale por WhatsApp y extrae vendedor y productos. Lo lleva por las etapas de contacto y lo cierra solo al cruzarlo cada hora contra los remitos. Remitos y órdenes de retiro entran desde Drive, con reintento cada 30 minutos.

Detects every quote PDF sent over WhatsApp and extracts salesperson and products. Moves it through the contact stages and closes it by itself, matching it hourly against delivery notes. Delivery notes and pickup orders come in from Drive, with a retry every 30 minutes.

Demo con datos de ejemploDemo with sample data

Panel del equipoTeam dashboard

Reemplazó las planillas. Presupuestos, remitos y órdenes en kanban, tabla o tarjetas, con login, búsqueda, links cruzados, exportación y estadísticas. Se actualiza en vivo, sin recargar.

It replaced the spreadsheets. Quotes, delivery notes and orders in kanban, table or card views, with login, search, cross-links, export and statistics. It updates live, with no reload.

Demo con datos de ejemploDemo with sample data

Bandeja compartidaShared inbox En desarrolloIn progress

Al equipo no le gustaba la interfaz de Chatwoot, así que le hicimos una piel estilo WhatsApp encima: un solo número, varios vendedores, adjuntos, reenvío y marcado de leído, sin cambiarles la costumbre.

The team didn't like Chatwoot's interface, so we built a WhatsApp-style skin on top: one number, several salespeople, attachments, forwarding and read marks, without changing their habits.

Portada de la tienda online de El Herrero
elherrerocordoba.com.ar ↗

Tienda onlineOnline store

Catálogo con búsqueda, variantes y carrito sobre Cloudflare Workers. Productos relacionados calculados con IA al guardar, panel con acciones en lote y deshacer, y pedidos que abren el WhatsApp del negocio. Preparada también para que la lean agentes de IA.

Catalog with search, variants and cart on Cloudflare Workers. AI-computed related products on save, an admin panel with bulk actions and undo, and orders that open the store's WhatsApp. Also prepared to be read by AI agents.

Lo difícil

Un lector de PDF que "funcionaba" leyendo mal

Medimos el lector en producción sobre 100 remitos: 0 de 100 con productos, 94 de 100 con la fecha de subida en lugar de la del documento y los totales negativos vacíos. No había ningún error visible. El lector nuevo cubre remitos de varias hojas, decimales y devoluciones, y exige que los productos sumen el total. Esa suma es el control: dio bien en 264 de 264 ejecuciones reales y después en 187 de 187 remitos.

Unos 150 remitos que nunca llegaron

Cada remito tardaba casi medio minuto por las esperas de las planillas, una tanda duraba media hora y el disparador corría una sola vez. Si algo interrumpía, los archivos quedaban afuera sin aviso. Sacamos las planillas de la ingesta, pasamos de 18 a 9 nodos con guardado idempotente y agregamos una marca por archivo procesado, con un reintento cada 30 minutos que barre lo pendiente.

Dos días de ingesta frenada, con todo en verde

Un sub-flujo con dos ramas terminales hacía que cada ejecución procesara un solo remito y terminara "con éxito". Nadie lo hubiera visto por los errores, porque no había ninguno. Volvimos a una sola rama terminal y recuperamos los 82 remitos pendientes.

Reprocesar sin pisar el trabajo del equipo

Un mismo remito puede llegar en dos versiones, así que las distinguimos por la fecha interna del PDF. Las funciones de la base respetan cualquier estado que el equipo haya movido a mano. Corregir datos viejos nunca borra una decisión humana.

Una tienda que falla distinto en cada capa

Páginas en caché servidas sin estilos, errores 503 por límite de CPU después de cada deploy y un acceso protegido solo en el dominio propio. Lo resolvimos capa por capa y validamos el resultado recorriendo las 166 páginas: 0 errores.

The hard part

A PDF reader that "worked" by reading wrong

We measured the production reader on 100 delivery notes: 0 of 100 with products, 94 of 100 with the upload date instead of the document's, and negative totals left empty. No visible error anywhere. The new reader covers multi-page notes, decimals and returns, and requires products to add up to the total. That sum is the check: it held on 264 of 264 real executions and later on 187 of 187 notes.

About 150 notes that never arrived

Each note took almost half a minute because of spreadsheet waits, a batch lasted half an hour and the trigger ran only once. If anything interrupted it, files were silently left out. We removed spreadsheets from ingestion, went from 18 to 9 nodes with idempotent saves, and added a per-file processed mark with a retry every 30 minutes that sweeps what's pending.

Two days of stalled ingestion, all green

A sub-workflow with two terminal branches made each run process a single note and finish "successfully". Nobody would have seen it through errors, because there were none. We went back to a single terminal branch and recovered the 82 pending notes.

Reprocessing without overwriting the team's work

The same note can arrive in two versions, so we tell them apart by the PDF's internal date. Database functions respect any status the team moved by hand. Fixing old data never erases a human decision.

A store that fails differently at every layer

Cached pages served without styles, 503 errors from CPU limits after each deploy, and access protection only on the custom domain. We solved it layer by layer and validated the result by crawling all 166 pages: 0 errors.

ejecuciones reales del lector de PDFreal PDF reader executions
264/264
remitos que cierran contra el montonotes that match their total
187/187
nodos en la ingestaingestion nodes
18 → 9
páginas recorridas, 0 errorespages crawled, 0 errors
166

n8n · Evolution API · Chatwoot · Supabase · Next.js · Vercel · Cloudflare Workers + R2 · Google Drive · OpenRouter

Prototipos y
proyectos propios.
Prototypes and
our own projects.

No son casos en producción. Son lo que construimos para probar ideas antes de llevarlas a un cliente. These aren't production cases. They're what we build to test ideas before taking them to a client.

PrototipoPrototype

Runa Accesorios

Una tienda que se administra desde WhatsApp. Foto más instrucción y el producto aparece en la web, con stock por color y estado disponible o agotado.

A store managed from WhatsApp. A photo plus an instruction and the product shows up on the site, with per-color stock and available or sold-out status.

n8n · Supabase · Evolution API

DemoDemo

MM Relojes

De mensaje libre a catálogo técnico: alta, baja o cambio de un reloj con marca, modelo y referencia. Si no entiende, pregunta en vez de inventar. Dos versiones, con parser estricto y con agente.

From a free-form message to a technical catalog: add, remove or update a watch with brand, model and reference. If it doesn't understand, it asks instead of guessing. Two versions, strict parser and agent.

n8n · Claude · Node.js · Evolution API

Proyecto propioOwn project

FitTrack

App de nutrición: foto del plato a estimación editable, metas, tendencia de peso y plan semanal. La misma regla acá: la IA elige los platos y el código escala los gramos.

Nutrition app: plate photo to an editable estimate, goals, weight trend and weekly plan. Same rule here: AI picks the meals and code scales the grams.

Next.js · Supabase · web-push · Vitest

PrototipoPrototype

AutoCAD MCP

Un servidor MCP para que una IA dibuje y lea planos en formato DXF, sin depender de tener AutoCAD abierto. Todavía sin probar en AutoCAD real.

An MCP server that lets an AI draw and read DXF plans, without needing AutoCAD open. Not yet tested on real AutoCAD.

Python · MCP · DXF

Proyecto propioOwn project

Velocidad

Juego de Roblox de 30 etapas, construido con IA conectada directamente a Roblox Studio, como material para nuestros videos.

A 30-stage Roblox game, built with AI connected directly to Roblox Studio, as material for our videos.

Luau · Roblox Studio MCP

Lo rompemos antes
que tus clientes.
We break it before
your customers do.

  1. 01

    EscuchamosWe listen

    Antes de proponer nada entendemos cómo funciona hoy: quién atiende, qué se repite y qué no puede fallar.

    Before proposing anything we learn how it works today: who answers, what repeats and what cannot fail.

  2. 02

    DiseñamosWe design

    Decidimos qué hace la IA, qué hace el código y qué queda en manos de una persona. A veces la respuesta es que no hace falta un bot.

    We decide what AI does, what code does and what stays with a person. Sometimes the answer is that you don't need a bot.

  3. 03

    Construimos y rompemosWe build and break

    Probamos con clientes desordenados: faltas, mensajes cortados, cambios de idea y regateo. Cada falla arreglada se vuelve un caso de prueba.

    We test with messy customers: typos, cut-off messages, changes of mind and haggling. Every fixed failure becomes a test case.

  4. 04

    VigilamosWe watch

    Monitores, alertas y revisión de charlas reales. Cuando cambia tu negocio, el sistema cambia con él.

    Monitors, alerts and reviews of real chats. When your business changes, the system changes with it.

Primero el problema.
Después la solución.
The problem first.
Then the solution.

  • DiagnósticoDiagnosis

    Miramos tu operación y marcamos dónde la automatización rinde y dónde no.

    We look at your operation and mark where automation pays off and where it doesn't.

  • Agentes de WhatsAppWhatsApp agents

    Ventas y atención con reglas de negocio en código y pase a una persona.

    Sales and support with business rules in code and handoff to a person.

  • Turnos y agendaBooking systems

    Reservas sincronizadas con tu calendario, sin dobles turnos.

    Bookings synced with your calendar, built against double bookings.

  • CRM y paneles a medidaCustom CRMs and dashboards

    Tu operación en un solo lugar, en vivo, en lugar de planillas sueltas.

    Your operation in one live place, instead of scattered spreadsheets.

  • IntegracionesIntegrations

    Conectamos tus herramientas y documentos, incluidos PDFs, para que no se copie nada a mano.

    We connect your tools and documents, PDFs included, so nothing gets copied by hand.

  • Webs y tiendasWebsites and stores

    Catálogo, pedidos y panel propio, conectados con el resto del sistema.

    Catalog, orders and your own admin, connected to the rest of the system.

Contanos qué
te frena.
Tell us what's
holding you back.

  • Te respondemos en menos de 24 horasWe respond within 24 hours
  • Primera consulta sin costoFirst consultation free