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, and impossible to view across vendors. The decision that mattered most, which product sizes to actually stock, had no data behind it.
What I built
Playwright scrapers pull each portal automatically (one async, concurrent, for a React-rendered site). Fuzzy matching plus regex normalization reconcile inconsistent product names across vendors, and everything lands in a single Postgres store.
On top sit 8 interactive Marimo dashboards. The pipeline surfaced the headline finding directly: 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.