AlertaCoches.es

Plataforma de anuncios de coches con 38K usuarios mensuales, 11M+ anuncios y 750K activos. Impulsé arquitectura, estabilidad backend, flujo de datos y escalabilidad manteniendo cercanía con la implementación y con el impacto de producto.

Qué hace

AlertaCoches está pensado para quien quiere seguir el mercado español de coches de segunda mano y nuevos sin estar refrescando portales constantemente. En lugar de revisar Milanuncios, Wallapop, Autoscout y otros a mano, defines filtros—marca, modelo, año, precio, provincia, combustible, kilometraje—y recibes notificaciones automáticas cuando salen anuncios que encajan. Así ahorras tiempo y reduces la probabilidad de perderte buenas ofertas, que a menudo se venden en horas.

Es útil si buscas un coche concreto y no quieres perderte ningún anuncio, si quieres ahorrar tiempo y adelantarte a quien sigue navegando los portales manualmente, o si prefieres una herramienta que acote la búsqueda en lugar de scroll entre cientos de anuncios irrelevantes.

Qué construimos

Un único sitio para buscar en los principales portales españoles (Milanuncios, Wallapop, AutoHero, Autocasion, Clicars, Autoscout, Coches.com, Motor.es, Rattix y otros): una sola interfaz, filtros avanzados y búsquedas guardadas. Los usuarios crean alertas y reciben notificación por email u otros canales cuando aparecen anuncios que coinciden. Para profesionales, añadimos un gestor de contenidos y un panel para gestionar anuncios y visibilidad en las plataformas.

Arquitectura del sistema: tres repositorios

La plataforma se reparte en tres codebases, con RabbitMQ como columna vertebral de mensajería y todo orquestado en Rancher (Docker en 6 VPS Hetzner).

El repo web contiene la API Laravel (MySQL para usuarios y datos de negocio, MongoDB para búsqueda de anuncios), la SPA en Vue 3 y un Content Manager en Laravel. El Content Manager mantiene los datos base—fuentes, metadatos de filtros, listados de negocio—que la API usa para construir los endpoints que consumen los workers. Los consumidores de colas Laravel se suscriben a las colas de RabbitMQ (alert.new-ad, ad.price-change, etc.). Esos mensajes los publica el SaveAdSubscriber del worker tras escribir o actualizar anuncios; los consumidores Laravel hacen el matching con las alertas de usuario y envían email y notificaciones en la app. Metabase lee de MySQL y MongoDB para análisis y dashboards.

El repo worker es Node.js/TypeScript: un importer por portal (Wallapop, Autoscout, Coches.com, AutoHero, Clicars, Motor.es, Rattix, etc.). Cada importer obtiene la configuración de búsqueda y los endpoints de fuente desde la API web (datos que vienen del Content Manager), descarga anuncios del portal y publica un SaveAdMessage en la cola RabbitMQ ad.save. El SaveAdSubscriber consume ad.save, escribe o actualiza anuncios en MongoDB y publica NewAdAlertMessage, PriceChangeMessage, ReactivatedAdMessage y NewImageMessage en RabbitMQ para que los consumidores Laravel envíen las notificaciones.

El repo Airflow ejecuta pipelines programados en Rancher: migración diaria de anuncios a MySQL y cálculo semanal de precios de vehículos. Los resultados alimentan MySQL y los datos que Metabase usa para analítica.

flowchart TB
  M[Marketplaces] --> W[Worker importers]
  CM[Content Manager] --> API[Laravel API]
  API --> W
  W --> RMQ[RabbitMQ ad.save]
  RMQ --> S[SaveAdSubscriber]
  S --> Mongo[(MongoDB)]
  S --> RMQ2[RabbitMQ alert/price]
  RMQ2 --> Cons[Laravel consumers]
  Cons --> API
  API --> Vue[Vue SPA]
  Mongo --> AF[Airflow]
  AF --> MySQL[(MySQL)]
  MySQL --> MB[Metabase]

Flujo

  1. Portales → importers del Worker (config desde API / Content Manager).
  2. Worker → RabbitMQ ad.save → SaveAdSubscriber → MongoDB.
  3. SaveAdSubscriber publica alert.new-ad / ad.price-change → consumidores Laravel → email.
  4. Airflow: migración diaria a MySQL, cálculo semanal de precios.
  5. Metabase: analítica sobre MySQL y MongoDB. Todo orquestado en Rancher.

Flujo de datos y eventos

Los anuncios entran desde cada portal al importer correspondiente del worker, luego a la cola ad.save de RabbitMQ. El SaveAdSubscriber consume esos mensajes, persiste o actualiza anuncios en MongoDB y publica eventos de anuncios nuevos, cambios de precio, reactivaciones e imágenes nuevas. Los consumidores Laravel leen esos eventos desde RabbitMQ, los cruzan con las alertas de usuario y disparan email y notificaciones en la app. La API Laravel sirve búsqueda y listados desde MongoDB y MySQL. Airflow ejecuta trabajos por lotes de migración y precios según cron, y Metabase usa los datos resultantes para reporting.

Escala y responsabilidad

Lideré un equipo de cuatro personas y asumí el roadmap de producto y la dirección técnica. El stack es poliglota por diseño: Laravel y MySQL para el CMS y datos de negocio, Node.js para los workers de ingesta y sus APIs, MongoDB para el almacenamiento masivo de anuncios (millones de documentos), RabbitMQ para pipelines desacoplados de procesamiento y notificaciones, y Airflow para trabajos de datos programados. Usamos Matomo y Metabase para analítica, caché para listados y filtros, y Docker en Rancher sobre seis VPS Hetzner, con CI/CD vía Bitbucket. El sistema está pensado para alta disponibilidad, seguridad y rendimiento.

Stack técnico

Laravel 9Vue 3ViteMongoDBMySQLRabbitMQNode.jsTypeScriptDockerRancherBitbucket PipelinesMatomoMetabaseAirflow

Resultado

12M+ anuncios, 750K listados activos, 38K MAU, 1.1K nuevas altas al mes. La plataforma funciona con alta disponibilidad, seguridad y rendimiento para búsqueda de anuncios, alertas y gestión de negocio.