Data Architecture · Core Math · Interface Map
?output=csv — Google returns these with access-control-allow-origin: *,
so no proxy is needed. All computation (index stats, valuation math, WACC build-up, chart rendering) happens entirely in the browser via Chart.js.
The Sheet is the only thing that needs to change to update the data.
auth.js).
Credentials are hashed — plaintext is never stored anywhere. Authentication state is held in sessionStorage and clears when the browser tab closes.
This provides deterrence-level protection suitable for a pre-public proprietary tool on a public host.
| Component | Symbol | Source / Logic |
|---|---|---|
| Risk-Free Rate | Rf | Live DGS10 raw yield (FRED via Sheets). Fallback 4.25% if unavailable. |
| Beta × Equity Risk Premium | β × 5.0% | β proxied from σ(36m): <8% → 0.35, <15% → 0.55, <25% → 0.75, ≥25% → 1.00. ERP fixed at 5%. |
| Illiquidity Premium | 2.0 – 4.0% | Music catalogs are illiquid assets. Age-adjusted: <3 yrs → 4.0%, <6 yrs → 3.0%, <10 yrs → 2.5%, ≥10 yrs → 2.0%. |
| Performance Risk | 0 – 2.5% | Penalizes declining catalogs. µ < −15% → +2.5%, µ < −5% → +1.5%, µ < 0% → +0.75%, µ ≥ 0% → 0%. |
| Concentration Premium | 1.0% | Fixed single-asset premium. Reflects idiosyncratic risk of holding one catalog vs. a diversified portfolio. |
| Total WACC | Σ above | Rounded to 2 decimal places. Applied directly as the discount rate in the NPV calculation when "Apply to Toolkit" is clicked. |
auth.js — the page content is only revealed after successful login. Session token stored in sessionStorage; clears on tab close.