Proyectos
Case studyDesarrollo activo

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.

  1. 01

    Pipeline de ingestión que separa parsing (estructural) de scoring (configurable por cliente)

  2. 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

  3. 03

    Eventos críticos detectados por reglas declarativas; el resolver tiene sandbox para que cliente nuevo pruebe configs sin tocar producción

  4. 04

    Map-matching con Valhalla HMM para corregir GPS sucio antes de calcular distancias

  5. 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

0
Modelos Prisma
0
Files TS backend
0
Files TSX frontend
0+
Commits 2026
0+
Cron jobs
0
Idiomas i18n

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.