The problem
Order data was locked inside 3 separate supplier portals, each with its own format and login. Analysis was done by hand, portal by portal — slow, error-prone, impossible to view across vendors. The decision that mattered most, which sizes to actually stock, had no data behind it.
What I built
Playwright scrapers pull each portal automatically (one async and concurrent, for a React-rendered site). Fuzzy matching plus regex normalization reconcile inconsistent product names across vendors into a single Postgres store.
On top sit 8 interactive Marimo dashboards. The pipeline surfaced the headline finding: 99.3% of 1,011 orders fit a single size profile — turning an inventory guess into a measured decision.
Stack
Python · Playwright · Supabase · Marimo · Altair · Pandas · Docker
Live demo — synthetic data, identical dashboard logic to the delivered system. Runs entirely in your browser.