Maverick Docs

Architecture

Service topology, Celery queues, Docker services, and system diagrams

System Overview

Maverick is a lead-generation and client-management platform for insurance marketing. It processes contacts through a multi-stage pipeline: scraping, filtering, verification, batching, and upload to Email Bison campaigns.

graph TB
    Internet["Internet"]-->|HTTPS :443|Nginx["Nginx<br/>SSL Termination"]
    Nginx-->|:3000|Dashboard["Dashboard<br/>Next.js 14"]
    Nginx-->|:8000|API["API<br/>FastAPI + Uvicorn"]
    Nginx-->|:5555|Flower["Flower<br/>Task Monitor"]
    Nginx-->|:3003|Docs["Docs Site<br/>Fumadocs"]
 
    API-->Redis[("Redis<br/>Message Broker")]
    API-->Supabase[("Supabase<br/>PostgreSQL + Auth")]
 
    Redis-->W1["Scraping Worker<br/>Playwright Browser"]
    Redis-->W2["CSV Processing Worker"]
    Redis-->W3["Filtering Worker"]
    Redis-->W4["Verification Worker<br/>Debounce API"]
    Redis-->W5["Batching + Bison Worker"]
 
    W1-->|CSV files|W2
    W5-->Bison["Email Bison<br/>Campaign Platform"]
 
    API-->Pushgateway["Pushgateway"]-->Prometheus["Prometheus"]-->Grafana["Grafana"]

Docker Services

Production (docker-compose.production.yml)

ServiceContainerPortsDepends OnHealth Check
redismaverick-redis-prod127.0.0.1:6379:6379---Yes
apimaverick-api-prod127.0.0.1:8000:8000redisYes
celery-scrapingmaverick-celery-scraping-prod---redis, api---
celery-csvmaverick-celery-csv-prod---redis, api---
celery-filteringmaverick-celery-filtering-prod---redis, api---
celery-verificationmaverick-celery-verification-prod---redis, api---
celery-batchingmaverick-celery-batching-prod---redis, api---
flowermaverick-flower-prod127.0.0.1:5555:5555redis, celery-filtering, celery-verification, celery-batching---
pushgatewaymaverick-pushgateway-prod127.0.0.1:9091:9091------
prometheusmaverick-prometheus-prod127.0.0.1:9090:9090api, pushgatewayYes
grafanamaverick-grafana-prod127.0.0.1:4000:3000prometheusYes
frontendmaverick-frontend-prod127.0.0.1:3000:3000apiYes
docsmaverick-docs-prod127.0.0.1:3003:3003---Yes
nginxmaverick-nginx-prod80:80, 443:443api, frontend---
certbotmaverick-certbot---------

Worker Configuration (Production):

WorkerQueue(s)ConcurrencyMax Tasks/Child
celery-scrapingscraping225
celery-csvcsv_processing4100
celery-filteringfiltering2100
celery-verificationverification450
celery-batchingbatching,email_bison2100
flowerdefault1---

Local (docker-compose.local.yml)

ServiceContainerPortsDepends OnHealth Check
redismaverick-redis-local6379:6379---Yes
apimaverick-api-local8000:8000redisYes
celery-scrapingmaverick-celery-scraping-local---redis, api---
celery-csvmaverick-celery-csv-local---redis, api---
celery-filteringmaverick-celery-filtering-local---redis, api---
celery-verificationmaverick-celery-verification-local---redis, api---
celery-batchingmaverick-celery-batching-local---redis, api---
flowermaverick-flower-local5555:5555redis---
pushgatewaymaverick-pushgateway-local9091:9091------
prometheusmaverick-prometheus-local9090:9090api, pushgatewayYes
grafanamaverick-grafana-local4000:3000prometheusYes
landingmaverick-landing-local3000:3000---Yes
dashboardmaverick-dashboard-local3001:3001apiYes
client-portalmaverick-client-portal-local3004:3004apiYes
docsmaverick-docs-local3003:3003---Yes

Worker Configuration (Local):

WorkerQueue(s)ConcurrencyMax Tasks/Child
celery-scrapingscraping110
celery-csvcsv_processing250
celery-filteringfiltering150
celery-verificationverification225
celery-batchingbatching,email_bison150
flowerdefault1---

Celery Queue Architecture

Task Routing

Task PatternQueue
app.workers.tasks.scraping.*scraping
app.workers.tasks.processing.*csv_processing
app.workers.tasks.filtering.*filtering
app.workers.tasks.verification.*verification
app.workers.tasks.batching.*batching
app.workers.tasks.email_bison_integration.*email_bison
app.workers.tasks.webhook_processing.*email_bison
email_bison.*email_bison
webhook.*email_bison
sentiment.*email_bison

Autodiscovered Task Modules

  • app.workers.tasks.scraping
  • app.workers.tasks.processing
  • app.workers.tasks.filtering
  • app.workers.tasks.verification
  • app.workers.tasks.batching
  • app.workers.tasks.email_bison_integration
  • app.workers.tasks.webhook_processing
  • app.workers.tasks.campaign_sync
  • app.workers.tasks.sentiment

Beat Schedule (Periodic Tasks)

NameTaskScheduleQueue
sync-bison-full-every-15-minemail_bison.full_synccrontab(minute='*/15')email_bison
sync-campaigns-every-30-minemail_bison.sync_campaigns_allcrontab(minute='*/30')email_bison
classify-sentiment-hourlysentiment.classify_batchcrontab(minute=0)default

Worker Defaults

SettingValue
task_soft_time_limit21600
task_time_limit28800
worker_prefetch_multiplier1
worker_max_tasks_per_child50

Contact Pipeline

The core business process: acquire contacts, clean them, and upload to campaigns.

graph LR
    XD["Xpressdocs<br/>X-Dates Platform"]-->|"Playwright<br/>scraping queue"|Raw[("raw_contacts")]
    Raw-->|"csv_processing queue"|Parsed["Parsed + Inserted"]
    Parsed-->|"filtering queue"|Filtered[("filtered_contacts")]
    Filtered-->|"verification queue<br/>Debounce API"|Verified[("verified_contacts")]
    Verified-->|"batching queue"|Batches[("contact_batches")]
    Batches-->|"email_bison queue"|Bison["Email Bison<br/>Campaigns"]

Each stage is a separate Celery queue with dedicated workers. Stages communicate via database tables (not direct task chaining), so any stage can be re-run independently.

Port Map

ServiceContainer PortHost PortEnvironment
API8000127.0.0.1:8000production
Dashboard3000127.0.0.1:3000production
Beta API8000127.0.0.1:8001beta
Beta Dashboard3001127.0.0.1:3002beta
Docs Site3003127.0.0.1:3003production
Redis6379127.0.0.1:6379shared
Flower5555127.0.0.1:5555production
Grafana3000127.0.0.1:4000production
Prometheus9090127.0.0.1:9090production
Pushgateway9091127.0.0.1:9091production

On this page