Skip to main content

System Overview

High-level architecture of the Sprout platform.

Architecture Diagram​

Service Interactions​

Data Flow​

  1. Event Data Ingestion

    • Cloudflare Workers scrape event listings
    • Data flows to sprout_etl for processing
    • Processed data stored in PostgreSQL
  2. Inventory Management

    • Skybox API provides inventory data
    • Token extractor gets authentication tokens
    • Backend matches events with inventory
  3. Price Monitoring

    • ETL service monitors prices
    • Updates stored in database
    • Dashboard displays pricing data
  4. Background Processing

    • BullMQ queues handle async jobs
    • Workers process jobs from Redis
    • Results stored and monitored

Core Services​

sprout_backend​

Purpose: Main API server and background job processor

Responsibilities:

  • REST API for frontend
  • Event matching and pricing
  • Inventory management
  • User authentication
  • Background job processing

Technology: NestJS, Prisma, BullMQ, MeiliSearch

sprout_etl​

Purpose: Data extraction, transformation, and loading

Responsibilities:

  • Ticketmaster event synchronization
  • Skybox inventory processing
  • Event matching
  • Price monitoring
  • Data pipeline orchestration

Technology: Fastify, Prisma, BullMQ, MeiliSearch

pricing_dashboard​

Purpose: Web interface for pricing management

Responsibilities:

  • Display pricing data
  • Event management UI
  • Inventory visualization
  • Analytics and reporting

Technology: React, TypeScript, Vite, tRPC

cloudflare-workers​

Purpose: Serverless scraping infrastructure

Responsibilities:

  • Web scraping of event listings
  • Rate limiting and retry logic
  • Queue-based processing
  • State management

Technology: Cloudflare Workers, Durable Objects, KV, Queues

Data Storage​

PostgreSQL​

Primary database for:

  • Event data
  • Inventory records
  • User data
  • Purchase history
  • Monitoring data

Redis​

Used for:

  • Job queues (BullMQ)
  • Caching
  • Rate limiting
  • Session storage

MeiliSearch​

Full-text search for:

  • Event matching
  • Inventory search
  • Fast queries

Communication Patterns​

Synchronous​

  • HTTP REST APIs
  • GraphQL (if used)
  • Direct database queries

Asynchronous​

  • BullMQ job queues
  • Event-driven processing
  • Webhooks

Security​

  • Authentication via JWT
  • Google OAuth integration
  • Environment variables in Doppler
  • API rate limiting
  • CORS configuration

Monitoring & Observability​

Metrics​

  • Prometheus for metrics collection
  • Custom business metrics
  • Performance monitoring

Logging​

  • Structured logging with Pino
  • Centralized logging with Loki
  • Error tracking with Sentry

Tracing​

  • OpenTelemetry integration
  • Distributed tracing
  • Performance analysis

Scalability​

Horizontal Scaling​

  • Stateless API servers
  • Worker instances can scale
  • Load balancing ready

Vertical Scaling​

  • Database optimization
  • Caching strategies
  • Queue processing optimization

Next Steps​