About this demo
Three short sections: what this is, the sanitization commitment, and the technical approach.
What this is
A portfolio demonstration of an RSN ad inventory and yield-management platform. The real platform underlying this work manages on the order of $30–60 MM in annual ad revenue across an MLB-team regional sports network spanning ~170 televised games per season, plus pre-season, ancillary programming, and a long tail of make-good and bonus inventory. This demo replicates the full Power Query → Pivot Table chain with synthetic data, so the same pipeline could in theory be pointed at real Wide Orbit / SSRS exports with no code change other than swapping the four input files.
Sanitization commitment
No real client names, rates, fill numbers, revenue figures, or schedule data appear anywhere in this codebase. The home team (“Sentinels”) is fictional; opponents are real MLB teams used only as scheduling structure. The 220-advertiser pool is drawn from a synthetic SSRS export (docs/reference/PPIRSNBookedSpots2026_synthetic.csv); the rate card and inventory capacity tables are likewise synthetic replacements for the real ones. All synthetic data was generated from distributional priors derived from operational experience, not from any real dataset.
Technical approach
Next.js App Router with static export. Synthetic data is generated deterministically from a single seed (rsn-yield-platform-v1) into four source files in /data: a 29-column Wide Orbit spots CSV, a 10-column Master Game Schedule CSV, and two xlsx files for the inventory capacity table and the dynamic rate card. An ETL module (src/lib/etl.ts) implements five named functions mirroring the Power Query M chain: deriveSpots, deriveSchedule, deriveSpotsByClient, deriveInventory, and deriveAurSummary. Joins useMap<string, T>on tuple keys instead of literal join-key columns; per-LOB and per-spot-group aggregates are computed in single passes.
ETL output is gated by 53 property-based contracts (docs/spec/05-etl-contracts.md) and 24 distributional calibration metrics. The build fails non-zero if any contract or metric misses. Views consume the typed ETL output directly — no runtime data fetching.