DobackSoft V3
SaaS multi-tenant de telemetría vehicular para flotas profesionales y servicios de emergencia.
- Cliente
- Cosigein
- Año
- 2025–2026
- Rol
- Developer
- Stack
- Node 20 · TypeScript 5.8 · Prisma 6
01 — El problema
Los operadores de flota tenían telemetría cruda — GPS, CAN bus, sensores de estabilidad — pero nadie podía decirles qué pasó en una conducción concreta sin pasar horas en Excel. Las empresas pagan multas y pierden vehículos por no detectar a tiempo aceleraciones bruscas, frenadas, giros peligrosos. Necesitaban convertir señales en decisiones.
02 — El enfoque
Cómo lo construí, pieza por pieza.
- 01
Pipeline de ingestión que separa parsing (estructural) de scoring (configurable por cliente)
- 02
Cada canal de telemetría (GPS, estabilidad, rotativo, frenado) declara su fuente y política de fallback en config — un nuevo cliente no toca código
- 03
Eventos críticos detectados por reglas declarativas; el resolver tiene sandbox para que cliente nuevo pruebe configs sin tocar producción
- 04
Map-matching con Valhalla HMM para corregir GPS sucio antes de calcular distancias
- 05
FleetMind: capa RAG sobre OpenAI que responde preguntas en lenguaje natural sobre la flota — pero con guardrails que nunca permiten al modelo decidir, solo presentar
03 — Decisiones técnicas
Cada decisión tiene un porqué.
Prisma + PostGIS en lugar de PostgreSQL puro con triggers
Prisma daba type-safety end-to-end y un schema versionado. PostGIS para geofencing y queries espaciales. El coste fue aprender el modelo de Prisma con tipos espaciales (no nativos) y resolverlo con raw queries en operaciones críticas.
BullMQ para colas, no Celery ni Sidekiq
El equipo backend era Node/TS. Introducir Python o Ruby por una sola pieza era complejidad innecesaria. BullMQ sobre Redis cubrió cron jobs, retry policies y prioridades sin salir del stack.
Tres servidores WebSocket separados
General (UI live), Alertas (push crítico) y Command Center (operativo en tiempo real) tienen ratios de carga muy distintos. Separarlos permitió escalar el de Command Center sin afectar los otros dos.
GDPR art. 22 — el sistema NO decide solo
El motor de scoring prepara el ranking, pero la calificación final pasa por validación humana. Esto se decidió antes de programar la primera línea: el riesgo regulatorio en flotas de servicios de emergencia es alto.
04 — Los números
05 — Lo que aprendí
Lecciones que me llevo.
- Multi-tenancy desde el día uno te ahorra meses después — cada query, cada cola, cada caché lleva organizationId.
- Separar parsing (estructural) de scoring (configurable) hace que clientes nuevos entren en horas, no semanas.
- Los WebSockets no son una sola conexión; son tres servicios que mienten cuando dicen ser uno.
- RAG sobre datos de negocio funciona si y solo si las preguntas que el modelo puede responder están acotadas en el prompt + en los retrieval filters.
Stack completo
- Node 20
- TypeScript 5.8
- Prisma 6
- PostgreSQL 17 + PostGIS
- Redis + BullMQ
- React 19
- Vite 6
- Tailwind 4
- Leaflet
- OpenAI
- WebSocket
- Docker
Siguiente caso
Sistema de evaluación competitiva
Motor de scoring parametrizable sobre telemetría real para oposición pública de conductores.