Proyecto destacado · Backend · Full Stack
Proyecto portfolio de backend y full-stack. Construí un sistema completo de gestión de reparto con dos frontends (Torre de Control + app web del repartidor), API REST, OCR, optimización de rutas, firma digital, métricas de coste real y documentación técnica (ADRs).
Tecnologías: Node + Express, React + Vite, PostgreSQL, Nominatim, Tesseract.js, 2-opt, GitHub Actions + Pages, Render. Ver arquitectura completa →
Trabajé en un entorno donde los repartidores llegaban cada mañana a una pila de albaranes en papel. Tenían que ordenarlos manualmente, decidir por dónde empezar, y al final del día devolver los papeles firmados — que a menudo se perdían. La oficina no sabía qué se había entregado hasta que el repartidor volvía.
Esa desconexión entre el repartidor y la oficina me pareció un problema técnicamente interesante de resolver: ¿cómo digitalizar ese flujo con herramientas accesibles, sin infraestructura cara, y que además demostrara criterio de ingeniería?
Kavana Route AI es mi respuesta. Un MVP que cubre el ciclo completo: OCR de albaranes → optimización de ruta → firma digital → Torre de Control con métricas de coste real.
API REST con Express, 25 endpoints, middlewares JWT, carga de archivos, generación de PDF, OCR, geocodificación. Separación clara de responsabilidades en servicios.
PostgreSQL en producción (Neon) + JSON file en desarrollo. Misma interfaz de queries, dos implementaciones. Sin cambiar código de negocio al cambiar de BD.
Implementé el algoritmo de optimización de rutas desde cero. Vecino más cercano + 2-opt. Mejor que IA gratuita, sin coste, <1ms. Decisión documentada.
Nominatim gratuito pero impreciso. 8 formatos de query por dirección + bounding box de Valencia. ~80% acierto. ADR →
Escanea imágenes (Tesseract), PDFs (pdftotext) y CSVs. Extrae direcciones y las limpia semánticamente para geocodificación.
Dos roles (office, driver) con endpoints protegidos. Login por PIN, token 8h, crypto nativo.
La app del repartidor es una SPA responsive: se añade a la pantalla de inicio y se abre como una app más. Sin store, actualización instantánea.
Cada decisión clave documentada con contexto, alternativas y consecuencias. Ver ADRs →
Tests con node:test (sin framework). Pruebas de API, base de datos, geocoding, OCR, PDF, blindaje de la demo y asistente. CI en GitHub Actions.
Un asistente con RAG sobre la documentación real (ADRs, decisiones, docs) responde preguntas técnicas en la propia demo. Pruébalo en la Torre de Control (botón 💬).
GitHub Actions build frontends → GitHub Pages. Backend en Render. Push a main = deploy automático.
Más allá de las tecnologías, aquí hay decisiones de arquitectura que responden a restricciones reales: coste cero para MVP, disponibilidad sin conexión, simplicidad operativa.
La IA parecía la opción obvia, pero los modelos gratuitos daban resultados inconsistentes y tardaban 30s. El algoritmo 2-opt es determinista, milisegundos, 0€ de coste y no necesita internet. ADR →
Geocodificar direciones españolas gratis no es trivial. Implementé 8 formatos de query por dirección + bounding box de Valencia para filtrar resultados de otras ciudades. ADR →
El sistema funciona con PostgreSQL en producción o con un archivo JSON en desarrollo — sin cambiar una línea de código de negocio. Misma interfaz de queries, dos implementaciones. Ideal para desarrollar sin infraestructura.
Cada decisión importante tiene su Architecture Decision Record: contexto, alternativas evaluadas, consecuencias. Ver ADRs →
GitHub Actions build los frontends y los despliega a GitHub Pages. El backend Node vive en Render. Despliegue automático con cada push a main. ADR →
La app del repartidor es una web responsive: se añade a la pantalla de inicio desde el navegador y se actualiza sola, sin store ni build. Se evaluó PWA con service worker y app nativa; se descartaron por mantenimiento (ADR-001).
La demo incluye una empresa ficticia con 90 días de historia: 6 repartidores, más de 12.000 paradas, firmas digitales, PODs en PDF y km reales de jornada. Un cron simula las rutas de cada día (la demo sigue viva sola) y los datos históricos están blindados: nadie puede editarlos ni borrarlos. Cualquier cosa que crees tú para probar (repartidores, albaranes) se elimina automáticamente a las 24 horas.
Gestiona repartidores, envía rutas, sigue entregas, consulta costes reales.
0000Accede desde cualquier navegador.
Pulsa el botón 💬 abajo a la derecha y pregúntale cómo funciona el proyecto: responde con la documentación real.
Escanea albaranes, entrega con firma.
5855Los repartidores del histórico son solo lectura (protegidos). Para probar la app, crea un repartidor propio en la Torre de Control: caduca a las 24h.
Este es uno de los proyectos de mi portfolio. Si quieres ver el código, las decisiones técnicas documentadas, o simplemente conectar: