Proyectos
03Celestina
03En producción60h invertidas

Celestina

APP de gestión + bot de WhatsApp para una distribuidora de agua.

ReactViteSupabaseNode.jsDockerRender
El problema

Una distribuidora de agua gestionaba repartos, cuentas de clientes, inventario, caja y comisiones de repartidores en un Excel desestructurado. Sin automatización: los clientes inactivos se perdían silenciosamente y las deudas vencidas se descubrían tarde o nunca.

La idea

App web mobile-first con dos módulos diferenciados: panel administrativo completo para el dueño (clientes, almacén, caja, comisiones e historial) y vista de reparto para el repartidor (ruta del día, confirmación de entregas y registro de pagos). Más un bot de WhatsApp que corre automáticamente: avisa a clientes sin consumo en 14 días y recuerda deudas vencidas.

El resultado

App en producción con roles diferenciados. El administrador opera desde el panel con visibilidad total de la operación; el repartidor accede solo a su vista de ruta desde el celular. El bot de WhatsApp corre diariamente en Render con Docker y reemplazó el seguimiento manual. Las cobranzas vencidas y el seguimiento de clientes inactivos que antes dependían de revisar el Excel hoy son automáticos.

Arquitectura

Frontend React SPA con dos vistas por rol + bot Node.js completamente independiente. Ambos conectados a la misma instancia de Supabase.

Panel AdminVista completa: clientes, almacén, caja, comisiones e historial de repartos. Solo accesible para el rol admin.
Vista RepartidorMobile-first: ruta del día, confirmación de entregas y registro de pagos. Acceso limitado por rol.
Auth + RolesSupabase Auth con RPC get_my_role(). El rol determina qué módulos ve cada usuario.
Bot WhatsAppNode.js con whatsapp-web.js + Puppeteer. Express dummy server para que Render no lo mate.
Cron + Anti-bannode-cron a las 10 AM. Delays aleatorios entre 65s y 150s entre mensajes para evitar bloqueos.
PersistenciaDocker volume en Render para mantener la sesión de WhatsApp entre reinicios sin re-escanear QR.
Decisiones técnicas

¿Cómo evitar que Render mate el proceso del bot?

elegido

Express dummy server que responde en el puerto que Render requiere

descartado

Background Worker de Render

El plan gratuito de Render requiere un puerto HTTP. El Express sirve solo para mantener vivo el proceso.

Errores reales · lo que salió mal
01

Sin el volumen persistente en Render, cada deploy pedía escanear el QR de WhatsApp de nuevo. Fix: disco persistente montado en el path de LocalAuth.

02

Dos mensajes al mismo cliente en el mismo minuto provocaban ban temporal. Fix: delay aleatorio mínimo de 65 segundos entre envíos.

Qué mejoraría

Migrar el bot a WhatsApp Business API oficial para eliminar el riesgo de ban. Agregar geotracking en tiempo real para seguimiento de rutas. Convertir la app en una aplicación nativa (React Native) para mejor experiencia del repartidor en campo. Dashboard de métricas de cobranza y eficiencia de rutas.