Deep-dive de OM Distribution
OM Distribution es distinto a los otros dos proyectos en un sentido importante: no es una demo con datos de prueba, es el sitio real de un distribuidor de alimentos que opera en el noreste de EE. UU. (Filadelfia, Connecticut, Massachusetts, Rhode Island y Nueva York), con marcas reconocibles en su catálogo — Ferrero, Kinder, Nutella, Don Julio, entre más de 130 productos activos. Eso cambia las prioridades: menos «impresionar con tecnología», más «que el dueño del negocio pueda actualizar su catálogo sin llamarme a mí cada vez».

La landing tiene que vender, no solo verse bien
Hero con propuesta de valor clara («Your Strategic Partner in Leading Brand Distribution»), métricas reales del negocio (130+ productos, cobertura de 5 estados), testimonios con calificación por estrellas, y un formulario de contacto con nombre, email, teléfono, empresa y mensaje — sitio completamente bilingüe (toggle EN/ES en el header) porque la clientela real del negocio lo necesita, no como ejercicio técnico.

Por qué MySQL, no PostgreSQL
De los tres proyectos de este stack PERN, este es el único con MySQL, y fue una decisión deliberada, no una inconsistencia. El caso de uso es un catálogo de producto clásico — categorías, productos, imágenes — sin las necesidades de PostgreSQL como JSON avanzado, full-text search complejo o extensiones tipo PostGIS. MySQL es más que suficiente, tiene un ecosistema de hosting más barato y ampliamente disponible, y para un negocio que paga su propia infraestructura, esa diferencia de costo importa más que una feature de base de datos que nunca va a usar. Elegir la herramienta más simple que resuelve el problema real es, la mayoría de las veces, la decisión técnica correcta.
El panel de administración es donde vive el valor real
Dashboard con métricas de negocio (total de productos, categorías, testimonios, leads de contacto) y un feed de actividad reciente. Pero lo importante está en la gestión del catálogo: 129 productos organizados en 12 categorías, con importación masiva desde plantilla, exportación a PDF (para que el negocio tenga un catálogo imprimible sin depender del sitio web), y control de visibilidad por producto (activo/inactivo, destacado en landing o no) — todo editable sin tocar código. Las categorías y testimonios tienen su propio CRUD independiente.
El contacto no es un formulario que solo envía un email
Cada envío del formulario público queda registrado como un «Contact Lead» visible en el dashboard, con fecha y datos del interesado — el dueño del negocio no depende de revisar su bandeja de entrada para no perder una oportunidad de venta; el sistema se la guarda.

Stack
React · TypeScript · Node.js · Express · MySQL · Docker.
