Case study · BI engineering & decision support

The BI stack is a folder of HTML files.

Fifteen-plus dashboards and the Wednesday leadership deck, generated by Python, published as plain HTML files, refreshed by 36 scheduled jobs, footed to the dollar. No BI licenses. No server. No queue.

When2026 · ongoing
RoleSole builder · design system author
StackPython · BigQuery · vanilla JS · static hosting
Scale15+ dashboards · ~36 scheduled refresh jobs · 11-module weekly deck

The problem

Leadership wanted exec-ready views across marketing, merchandising, and product. Enterprise BI meant licenses, a platform queue, and charts that never matched the deck. Notebooks meant nothing a VP could open on a phone at 7 a.m. And every one of these views ends up screenshotted into a deck or a Slack thread, where a sloppy table reads as a wrong number even when it's right.

The build

Preview of the paid-search funnel decomposition dashboard: range controls, KPI scorecards, an eight-effect waterfall, and mix-vs-rate tables
Paid-Search Funnel Decomposition: interactive replicaSynthetic data, real method: pick any two spans and the eight-effect decomposition recomputes client-side.
Open the replica ↗

What it showed

The week it paid for itself: brand paid-search clicks fell 25%. The room's reflex was "we lost position to a competitor, raise bids." The auction panel said 96% impression share and 0% lost to budget, in both years. The decline was not buyable. Eligible searches were down and click-through was eroding. A six-figure "allocation loss" was reclassified from a budget lever to a demand signal, and the bid increase never happened.

The most useful thing a dashboard did all year wasn't showing a number. It stopped a confident wrong action while there was still time.

It polices itself, too. One week a view mixed a complete seven-day total with a six-day slice from a stale cache, and a funnel rate dropped about 1,000 basis points across all four tactics at once. Real click-quality shifts are tactic-specific, so that pattern is now written doctrine: denominator artifact, not a real move. When a dead tag made add-to-cart read 726%, the fix was a generic impossibility gate (more adders than viewers) that blanks the metric, shades the band, and self-heals when the backfill lands.

What changed

Technical notes, for the people who will ask

Decomposition. Log-mean Divisia (LMDI-I) over the identity Revenue = Σtactic Clicks · share · (Sess/Click) · (Shop/Sess) · (Cart/Shop) · (CO/Cart) · (Orders/CO) · AOV: eight effects, additive, zero residual. The engine is a generic N-factor chain with unit tests, reused across three dashboards; the Python and client-side JS implementations are cross-checked on every generation.

Verified click lineage. The production bridge anchors paid clicks to sessions via click-ID matching (~85–90% coverage), so "clicks that never produced a measured visit" is a real, sized bar instead of a shrug.

A method rejected on sign. An earlier spend-mix valuation (Laspeyres-style, crediting added spend at last year's return) flipped the sign of a reallocation effect, because it valued new dollars at a rate measured on almost no spend. Replaced with an exact identity valuing dollars at their realized return.

Delivery. Single-file HTML with embedded data caches; daily-grain data so arbitrary ranges aggregate exactly; per-table CSV export that opens clean in Excel; scheduled refresh via ~36 OS-level jobs; the deck renderer drives headless Chrome for pixel-identical screenshots.

The other two case studies: the semantic layer underneath all of this and the organic-decline decomposition, or back to all work.

The replica runs on synthetic data; production figures, names, and vendor details are generalized or perturbed throughout. The system, the anecdotes, and the decisions are real.