$cd/projects/logistica
📚 Archivado
Backend

SwiftLogix - Sistema de Gestión de Envíos

Sistema integral de logística para ferretería con trazabilidad completa, gestión de rutas, estados automatizados y notificaciones WhatsApp.

Noviembre 2023 - Enero 2024 (3 meses)
Facundo Luna + Matías Fuentes + Alejo Herrera
23 tecnologías

$ cat tech-stack.json

// Características destacadas

Arquitectura hexagonal completa
Patrón State para gestión de envíos
Hojas del día automáticas con Cron
Hojas excepcionales personalizables
Notificaciones WhatsApp automatizadas
Keycloak con tema Keywind
Trazabilidad completa de envíos
Sistema de zonas geográficas Neuquén

// Stack tecnológico

Java 17
Spring Boot 3.2.0
Spring Security
Spring Data JPA
MySQL 8.2.0
Keycloak
JWT
Bean Validation
Next.js 13
Material-UI
Keycloak.js
Google Maps API
React
Axios
Recharts
jsPDF
Docker
Docker Compose
Maven
Swagger/OpenAPI
WhatsApp API
Keywind Theme
Cron Jobs

🎯 Problema

Ferretería Siglo21 necesitaba un sistema de trazabilidad completa para envíos y stock, con gestión por zonas geográficas de Neuquén, notificaciones automáticas y flexibilidad para crear hojas de ruta excepcionales.

💡 Solución

Sistema integral con arquitectura hexagonal, gestión automatizada de estados con patrón State, hojas del día por cron jobs, integración WhatsApp para notificaciones y Keycloak para autenticación segura.

📊 Impacto

Primera experiencia profesional real con cliente, enfrentando cambios de requerimientos y desafíos de integración con sistemas legacy de ventas.

$ tree -L 2 arquitectura/

Arquitectura robusta basada en contenedores Docker con Spring Boot backend, Next.js frontend, autenticación centralizada con Keycloak y base de datos MySQL compartida. Diseñada para escalabilidad y mantenibilidad.

🏗️ Arquitectura Simple y Eficiente

Frontend Layer

React SPA
Vite + TailwindCSS
• Landing page responsive
• Multilenguaje (ES/EN)
• Formulario de contacto
• Animaciones Framer Motion

Backend Layer

Node.js API
Express + Nodemailer
• API /contact
• SMTP personalizado
• Validaciones
• CORS configurado

DevOps Layer

GitHub Actions
Docker + DonWeb VPS
• Deploy automático
• SSL/HTTPS
• Nginx reverse proxy
• Zero downtime
Other
Java 17
Spring Boot 3.2.0
Spring Security
Spring Data JPA
MySQL 8.2.0
Keycloak
JWT
Bean Validation
Next.js 13
Material-UI
Keycloak.js
Google Maps API
React
Axios
Recharts
jsPDF
Docker Compose
Maven
Swagger/OpenAPI
WhatsApp API
Keywind Theme
Cron Jobs
DevOps
Docker
🔌 Integraciones y Servicios
WhatsApp API para notificaciones automáticas
Google Maps API para visualización de rutas
Tema Keywind para personalización Keycloak
Cron Jobs para hojas del día automáticas
MySQL compartida entre Spring Boot y Keycloak

$ kubectl get services --all-namespaces

Deep dive en cada microservicio y sus responsabilidades específicas

SwiftLogix Backend
Frontend Next.js
MySQL Database
Keycloak Authentication

$ git log --grep="fix:" --oneline

Principales desafíos técnicos y cómo los resolví

Evolución de Requerimientos en Desarrollo
Comunicación Docker Inter-Contenedores
Integración con Sistema Legacy de Ventas
Gestión de Estados con Notificaciones WhatsApp

$ find . -name "*.java" -o -name "*.py" | head -5

Snippets de código real del proyecto - implementaciones clave

Implementación de State Pattern para Envíos
java
SwiftLogix Backend

State Pattern que garantiza transiciones válidas entre estados y ejecuta acciones específicas como notificaciones WhatsApp automáticas

// EstadoEnvio.java - State Pattern
public abstract class EstadoEnvio {
    protected String nombre;
    
    public abstract boolean puedeTransicionarA(EstadoEnvio nuevoEstado);
    public abstract void ejecutarAccion(Envio envio);
    
    // Método para cambiar estado con validaciones
    public void cambiarEstado(Envio envio, EstadoEnvio nuevoEstado) {
        if (this.puedeTransicionarA(nuevoEstado)) {
            // Registrar cambio para auditoría
            CambioEstado cambio = new CambioEstado(
                envio, this, nuevoEstado, LocalDateTime.now()
            );
            
            // Actualizar estado del envío
            envio.setEstado(nuevoEstado);
            
            // Ejecutar acciones específicas del nuevo estado
            nuevoEstado.ejecutarAccion(envio);
            
            // Disparar notificación WhatsApp
            whatsappService.notificarCambioEstado(envio, nuevoEstado);
        } else {
            throw new TransicionNoPermitidaException();
        }
    }
}

// Estados concretos
public class EnCamino extends EstadoEnvio {
    public EnCamino() { this.nombre = "EN_CAMINO"; }
    
    @Override
    public boolean puedeTransicionarA(EstadoEnvio nuevoEstado) {
        return nuevoEstado instanceof Entregado || 
               nuevoEstado instanceof NoEntregado ||
               nuevoEstado instanceof Cancelado;
    }
    
    @Override
    public void ejecutarAccion(Envio envio) {
        // Lógica específica cuando el envío está en camino
        envio.setFechaInicioEnvio(LocalDateTime.now());
    }
}

🔍 Contexto del Código:

Servicio: SwiftLogix Backend

Descripción: API REST con arquitectura hexagonal para gestión integral de logística y envíos

Tech Stack:
Spring Boot 3.2.0
Java 17
Spring Security
+3 más

$ git log --grep="lesson:" --pretty=format:"%s"

Reflexiones y próximos pasos en el desarrollo

Lecciones Aprendidas
💡

Los requerimientos del cliente pueden cambiar drásticamente durante el desarrollo

💡

Docker inter-container communication requiere configuración específica de networks

💡

La arquitectura hexagonal facilita enormemente la adaptación a cambios de requerimientos

💡

El patrón State es perfecto para gestión de estados complejos con acciones automáticas

💡

Keycloak es poderoso pero complejo de configurar en contenedores

💡

Los sistemas legacy sin APIs presentan desafíos de integración significativos

💡

Los primeros proyectos con clientes reales enseñan más que muchos proyectos académicos

💡

La comunicación con el cliente debe ser constante para evitar sorpresas en requerimientos

💡

Docker Compose simplifica el desarrollo pero requiere conocimiento de redes

Próximos Pasos

Proyecto archivado - sin desarrollo futuro planificado

Experiencia adquirida aplicada en proyectos posteriores

Aprendizajes sobre comunicación con cliente incorporados

Conocimientos de Docker y arquitectura hexagonal consolidados

¿Tienes alguna pregunta?

Si quieres saber más sobre este proyecto, la tecnología utilizada, o tienes alguna consulta técnica, no dudes en contactarme.

📧 Disponible para consultas
🤝 Networking profesional