System Overview
High-level architecture of the Sprout platform.
Architecture Diagram
Service Interactions
Data Flow
-
Event Data Ingestion
- Cloudflare Workers scrape event listings
- Data flows to sprout_etl for processing
- Processed data stored in PostgreSQL
-
Inventory Management
- Skybox API provides inventory data
- Token extractor gets authentication tokens
- Backend matches events with inventory
-
Price Monitoring
- ETL service monitors prices
- Updates stored in database
- Dashboard displays pricing data
-
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