# GridLoom Europe — static forecast explorer Open the hosted explorer at [mklab.co.technology/apps/gridloom-europe](https://mklab.co.technology/apps/gridloom-europe/). The explorer lets you select one of five configured market contexts, switch between demand, solar and price, compare a precomputed 72-hour outlook with its 48-hour held-out backtest, inspect hourly rows, apply a bounded arithmetic scenario to future values, and export the selected view as CSV. This is a static analytical browser edition. The included `data.json` holds forecast and backtest outputs generated by the GridLoom Python numerical implementation. The browser loads that JSON and applies the simple scenario controls locally. It does not host or call the FastAPI app, a database, a live electricity feed, Astra or any paid model provider. Selecting a market never triggers inference. To preview from a checkout, serve this directory over HTTP: ```powershell python -m http.server 8000 --directory demo/browser ``` Then open `http://127.0.0.1:8000`. A local static server is only for previewing these bundled files; it does not start the Python forecasting service. ## Data and timebase The snapshot contains Germany / DE-LU, Great Britain / GB, Netherlands / NL, France / FR and mainland Spain / ES. These five examples represent configured contexts and do not certify current or complete market coverage. Each uses a deterministic 56-day synthetic history sampled hourly, ending at the fixed boundary `2026-10-05T00:00:00Z`. There are no imported or observed grid measurements. The generator uses the same synthetic-series routine as the local app. Timestamps use UTC for identity and order. Calendar features use the market's configured local timezone. Forecasts begin at the snapshot boundary and extend 72 hours. Power series are expressed in MW; price uses the market's configured currency per MWh. No FX conversion is applied. Synthetic country scaling is illustrative toy data and should not be used to estimate installed capacity, market activity or actual production. The selected 48-hour holdout follows seven rolling daily calibration windows. The model chooses between an original calendar-ridge estimator and a local seasonal average using calibration MAE after physical clipping; it then reports MAE, RMSE, baseline MAE, skill, WAPE where defined, and empirical interval coverage. Negative prices are retained. The interval width comes from dependent historical residuals with a heuristic horizon widening; its nominal level is not guaranteed. Scenario sliders apply multiplication to demand or solar, or a constant price shift, to future points and bands. They do not change historical holdout metrics, rebalance a power system or describe a causal response. Each `data.json` result contains all 72 forecast points and all 48 actual/predicted holdout points for each context and target. The page shows the first 12 table rows; CSV export includes every point. `scripts/generate_public_demo.py` rebuilds the snapshot with the source Python implementation, and `scripts/verify_public_demo.py` checks exact numerical correspondence, fixed shapes and numerical invariants. The JSON states that these are synthetic, precomputed outputs. ## Model and method The numerical path is GridLoom Europe's original `calendar-ridge + local-seasonal` ensemble, offered under the repository's existing 0BSD license. It fits demand, solar and price separately, uses local-time calendar features plus recent same-weekday/hour observations, and does not use a pretrained model, weather input, physical grid model or language model. The full private application and implementation are not part of this static public asset set. The browser edition is a product demonstration of inspectable precomputed results, not an interactive forecasting service or a claim of national forecasting accuracy. See `PUBLIC_FILES.json` for the complete static asset allow-list. Original code and interface assets are under 0BSD; user-provided datasets, third-party packages and provider outputs retain their own terms.