Volver a proyectos
Nivel Intermedio-Alto 1,500+ LOC

Automatización de Compras

Node.js • Next.js 15 • BullMQ • Redis • Playwright

#Node.js #Playwright #BullMQ #Redis #SSE #Automatización #Docker
Demo en video disponible
Screenshot de Automatización de Compras
Stack:
Node.js
Next.js
Redis
PostgreSQL
Docker
Demo en video

Sistema que automatiza end-to-end la compra de suscripciones digitales en una tienda WooCommerce: Playwright navega el sitio en headless, BullMQ gestiona colas con concurrencia controlada, Redis Pub/Sub lleva el progreso al frontend en tiempo real via SSE, y una caché multicapa de 3 niveles minimiza las llamadas a la API externa — 0 intervención manual desde el click hasta las credenciales.


🚀 Impacto y Números

  • 0 intervención manual: el flujo completo de compra y entrega de credenciales es 100% automatizado
  • 3 capas de caché: Redis (hot, TTL 20s) → PostgreSQL (warm) → API WooCommerce (cold) — latencia mínima, carga mínima al origen
  • Hasta 3 compras paralelas gestionadas simultáneamente por BullMQ con deduplicación por jobId
  • Progreso con porcentaje exacto en tiempo real via Redis Pub/Sub + SSE — sin polling, sin WebSockets
  • 3 servicios orquestados en red privada con Docker Compose: frontend, backend y Redis Stack

⚡ Cómo está construido

Automatización browser con Playwright

  • Sesión persistente: storageState reutilizado entre ejecuciones para no re-autenticarse en cada job
  • Optimización de red: route.abort() bloquea CSS e imágenes innecesarias — reduce tiempo de carga más del 40%
  • Flujo resiliente: Promise.race() detecta éxito o error de pago en paralelo con timeouts independientes; captura URL final, texto de error y screenshot en caso de fallo

Pipeline de notificaciones Redis Pub/Sub → SSE

  • Worker publica eventos en canal store:{jobId}:status con cada cambio de estado — sin acoplamiento directo al frontend
  • Route Handler de Next.js se suscribe al canal Redis y re-emite los mensajes como Server-Sent Events: stream HTTP persistente de baja latencia sin WebSockets
  • Dos conexiones Redis separadas (publisher/subscriber) para arquitectura pub/sub correcta

Estrategia de caché multicapa (Cache-Aside)

  • Stale-while-revalidate manual: si el producto existe en Redis pero tiene más de 20s, se sirve inmediatamente y se encola una actualización en background — el usuario no espera
  • Flag isUpdating reactivo: el frontend muestra en tiempo real qué productos están siendo refrescados
  • UPSERT bulk con pg: INSERT ... ON CONFLICT DO UPDATE actualiza N productos en una sola query con valores dinámicos

🛠️ Stack

Core: Node.js ESM, Express 5, Next.js 15, React 19, TypeScript Automatización: Playwright (headless, session management, network interception) Infraestructura: BullMQ, Redis Stack (caché + Pub/Sub), PostgreSQL Frontend: Zustand, SWR, Tailwind CSS v4 Tools: Docker Compose, Biome, pnpm Patterns: Cache-Aside, Worker Queue, Observer (Pub/Sub), BFF, Repository


💼 Lo que este proyecto demuestra

Este proyecto demuestra que puedo:

  • ✅ Diseñar sistemas distribuidos con colas de trabajo, workers especializados y concurrencia controlada
  • ✅ Implementar automatización browser de producción con Playwright (sesiones, contextos, optimización de red)
  • ✅ Construir arquitecturas event-driven usando Redis Pub/Sub como bus de mensajes desacoplado
  • ✅ Elegir el patrón de caché correcto para cada problema: stale-while-revalidate cuando la consistencia puede diferirse, invalidación inmediata cuando no
  • ✅ Conectar el stack moderno de Node.js (ESM, Express 5, Next.js 15, React 19) en una arquitectura coherente

Diferenciador clave: No es un CRUD con autenticación. Es un sistema que resuelve automatización de negocio real con tecnologías de nivel enterprise — colas, pub/sub, caché multicapa y RPA — construido de forma completamente independiente.