Exception Inbox
Ingests messy production CSVs, flags runs below 90% of plan, and surfaces them on a day-by-day timeline.

Overview
A small but complete full-stack exception tracker. It normalizes two messy CSVs, quarantines bad rows with reasons, materializes 'exceptions' where output falls below 90% of plan, and serves them over a REST API to a timeline UI.
Contribution Solo Project
Problem
Raw operational CSVs are messy and can't be trusted blindly. You need to flag underperforming runs without silently mutating or losing the original data.
Approach
- 01
Pandas ingestion normalizes raw CSVs; raw tables are never mutated — every transformation writes a clean row or a quarantined reject.
- 02
Configurable thresholds (sensitivity, severity, dedup strategy) exposed via CLI flags.
- 03
FastAPI + SQLAlchemy over SQLite with auto-generated OpenAPI docs and unit-tested cleaning logic.
- 04
React + Vite timeline UI with severity badges, detail panels, 7-day trend sparklines, and resolve/acknowledge actions.
Outcome
- Full audit trail: originals preserved, every reject explained.
- End-to-end reproducible via Docker Compose.
- A clean vertical slice of data pipeline + API + UI.