CSV → validated datasets with background jobs, SSE progress, retries/DLQ, and S3-backed uploads
┌────────────────────────┐ ┌─────────────────────────┐
│ Next.js UI │─────►│ FastAPI API │
│ (datasets/runs) │ │ Auth + datasets + runs │
└───────────┬────────────┘ └───────────┬─────────────┘
│ │
│ SSE /runs/:id/events │ Postgres (metadata)
▼ ▼
┌────────────────────────┐ ┌──────────────────────────┐
│ SSE Stream │ │ Postgres │
│ (snapshot/progress) │ │ datasets/runs/records │
└────────────────────────┘ └────────────┬─────────────┘
│ enqueue job
▼
┌──────────────────┐
│ Redis (broker) │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Celery Worker │
│ parse/validate │
└────────┬─────────┘
│ read/write
▼
┌──────────────────┐
│ S3/MinIO │
│ (uploads) │
└──────────────────┘