VouDeOfertas

Plataforma de monitoreo de precios multi-marketplace (Amazon, Mercado Livre, Shopee) que expone el historial real de precios para distinguir ofertas genuinas de descuentos artificiales.

Portada de la home de VouDeOfertas mostrando una tarjeta de historial de precio de 90 días de un producto e indicadores de confianza de la oferta.

Problema

Marketplaces como Amazon, Mercado Livre y Shopee publican promociones sin contexto histórico confiable. El desafío de producto era exponer el historial real de precios para separar ofertas genuinas de descuentos artificiales — y, en ingeniería, unificar scraping de fuentes heterogéneas sin corromper el catálogo cuando fallan los reintentos.

Solución e impacto

Sistema full-stack en monorepo Turborepo con ingesta por lotes, hash de contenido y colas BullMQ para mantener el pipeline idempotente. La recolección es HTTP-first (Undici + Cheerio), con Playwright solo cuando la página bloquea o exige renderizado. Persistencia en MySQL con caché Redis y frontend Next.js/React con historial analítico. El impacto de ingeniería es un flujo resiliente a bloqueos y reintentos — sin métricas de conversión de negocio inventadas.

Arquitectura y trade-offs

Trade-off central: priorizar HTTP liviano y barato, reservando Playwright para excepciones — más throughput y menos costo de browser, a cambio de dos caminos de recolección. Batch + hash evita duplicar producto o precio en reintentos. Redis cubre lecturas calientes del historial; MySQL sigue siendo la fuente de verdad. El monorepo simplifica contratos entre scraper, API y UI, con el costo de disciplina de boundaries en Turborepo.

Diagrama de fluxo de dados do VouDeOfertas: marketplaces, scraper, BullMQ, MySQL/Redis, API e Next.js

Operación y observabilidad

Docker e GitHub Actions para deploy reproduzível; healthchecks nos serviços. Telemetria por conector ainda é lacuna consciente — retrospectiva aponta métricas de bloqueio e drift de seletor como próximo investimento.

Desafíos técnicos

Heterogeneidad de marketplaces (markup, anti-bot, SPA), reintentos que no pueden duplicar entidades, y mantener el pipeline operable con Docker y GitHub Actions sin over-engineering de observabilidad en esta etapa.

Qué haría diferente

Hoy extraería adapters por marketplace con contratos de parsing más explícitos e invertiría antes en métricas de fallo por fuente (tasa de bloqueo, drift de selector). El diseño HTTP-first + fallback sigue siendo correcto; lo que adelantaría es telemetría por conector para reaccionar más rápido cuando un sitio cambia.

Contexto técnico

  • Multi-marketplaceFuentesPipeline unificado con recolección heterogénea
  • HTTP-firstRecolecciónPlaywright solo en excepciones

Decisiones documentadas (ADR)

Stack

  • Next.js
  • React
  • TypeScript
  • Node.js
  • Express
  • MySQL
  • Redis
  • BullMQ
  • Undici
  • Cheerio
  • Playwright
  • Docker
  • GitHub Actions