Carman Parts + Cozza Parts - Caso multi-marca

Un solo código, dos marcas: branding, datos y automatizaciones por empresa.

Versión 3.0: plataforma web productiva desarrollada con Vue 3 + Vite + TypeScript y una API Node.js + Express desacoplada. Pública un catálogo real persistido en MariaDB, sincronizado de forma segura con Mercado Libre, con búsqueda, filtros, paginación y detalle de producto.

Resumen

Versión 3.0 - Plataforma productiva multi-marca

La propuesta visual original evoluciono hacia una plataforma web productiva para Carman Parts y Cozza Parts. La experiencia pública usa Vue 3 + Vite + TypeScript, Vue Router y componentes reutilizables, mientras una API propia sirve datos reales sin conectar el navegador directamente con Mercado Libre.

  • Catálogo público con buscador, filtros por tipo y marca, orden y paginación.
  • Detalle de producto con información, descripción e imágenes reales.
  • Experiencia responsive con contenido institucional, ubicación y canales de consulta.
  • Formulario comercial conectado al backend mediante Nodemailer.

Alcance actual

  • API REST en Node.js + Express estructurada por capas.
  • Persistencia MySQL/MariaDB para cuentas, sincronizaciones, catálogo y facetas.
  • Integración backend con Mercado Libre mediante OAuth 2.0.
  • Lectura, validación y publicación separadas para proteger la integridad del catálogo.
  • Arquitectura reutilizada con dominio, identidad, contenido y configuración por marca.
  • Frontend y backend desacoplados en el despliegue productivo.

Arquitectura

La solucion desacopla una SPA en Vue 3 + TypeScript, una API REST en Node.js + Express, la persistencia en MySQL/MariaDB y la integración backend con Mercado Libre API. Cada marca conserva su dominio, identidad, textos, imágenes, configuración y cuenta, sobre una arquitectura funcional común.

Frontend Vue 3

Vue Router organiza la home y el detalle de producto. Componentes y servicios reutilizables resuelven catálogo, estados de carga, filtros, paginación, galería y contacto sin exponer credenciales ni conectarse directamente con Mercado Libre.

frontend/
|- src/
|  |- components/
|  |- views/
|  |- router/
|  |- services/
|  `- types/
`- public/

Backend y persistencia

La API se separa en controladores, servicios, repositorios, validadores y middlewares. MariaDB conserva el catálogo publicado y el estado del pipeline; Nodemailer gestiona las consultas comerciales.

backend/
|- src/
|  |- config/
|  |- controllers/
|  |- middlewares/
|  |- repositories/
|  |- routes/
|  |- services/
|  `- validators/
|- migrations/
`- scripts/

Catálogo e integración con Mercado Libre

El pipeline obtiene de forma controlada las publicaciones activas, normaliza los datos y los guarda temporalmente. Una etapa independiente valida integridad y completitud antes de realizar el reemplazo transaccional del catálogo publicado. Luego se reconstruyen y persisten tipos de producto y marcas para que la API pública de solo lectura resuelva búsqueda, filtros, paginación y detalle sin consultar Mercado Libre en tiempo real. Automatizaciones externas programadas coordinan estas operaciones protegidas para mantener actualizado el catálogo en producción.

Seguridad y confiabilidad

  • OAuth 2.0 encapsulado en backend, secretos fuera del repositorio y datos sensibles cifrados.
  • Operaciones administrativas autorizadas y separadas de las rutas públicas y de salud.
  • CORS restringido, cabeceras de seguridad, validación y sanitización de entradas.
  • Honeypot y limites de solicitudes para el formulario de contacto.
  • Timeouts, reintentos acotados, limites de respuesta y validación defensiva de servicios externos.
  • Transacciones con rollback, publicación idempotente y conservación del catálogo anterior ante fallas.
  • Bloqueos de concurrencia para impedir operaciones incompatibles sobre el pipeline.
  • Controles de salud separados para aplicación y base de datos, con logs sin credenciales.

Retos & soluciones

  • Sincronizar un catálogo amplio sin depender de la API externa en cada visita -> procesamiento backend y exposición pública desde datos persistidos.
  • Evitar publicar datos incompletos -> etapas separadas de lectura, normalización y validación antes de publicar.
  • Conservar disponible el catálogo ante una falla -> reemplazo completo dentro de una transaccion con rollback al estado anterior.
  • Evitar carreras entre etapas incompatibles -> bloqueos de concurrencia y transiciones de estado controladas.
  • Resolver filtros sin clasificar títulos en cada consulta pública -> reconstrucción idempotente y persistida de tipos de producto y marcas.
  • Reutilizar la solucion para dos marcas -> arquitectura común con configuración, identidad, dominio y datos independientes.
  • Proteger integraciones y operaciones sensibles -> OAuth 2.0, autorización administrativa, cifrado, minimo privilegio y secretos fuera del código.
  • Controlar respuestas ambiguas y limites externos -> validaciones defensivas, timeouts, reintentos acotados y errores públicos genericos.

Galería

Carman Parts - Capturas

Resultados

  • Dos sitios productivos para Carman Parts y Cozza Parts sobre una arquitectura funcional común y configuración propia por marca.
  • Catálogo real conectado a publicaciones activas de Mercado Libre y servido desde persistencia propia.
  • Experiencia pública completa con búsqueda, filtros sobre facetas persistidas, orden, paginación y detalle con imágenes reales.
  • Sincronización productiva coordinada por automatizaciones externas y un pipeline separado de lectura, validación, publicación y reconstrucción de facetas.
  • Publicación confiable mediante reemplazo transaccional, rollback y controles que evitan dejar el catálogo en un estado parcial.
  • Backend productivo y mantenible con separacion por capas, controles de salud, seguridad defensiva y contacto comercial mediante Nodemailer.