NL power systems · energy markets · Python
I model power systems, electricity markets, and battery storage.
Energy-transition engineer at Birdview Energy and independently via Treehouse Energy. Price-curve forecasting, BESS revenue stacking, grid congestion, and the tooling that makes it explorable. MSc Electrical Engineering, TU Eindhoven.
interactive model
Solar cannibalisation, on a slider
Every extra gigawatt of PV pushes midday prices further down, exactly when solar produces most. Drag the fleet size and watch what happens to the price solar actually earns. A profile factor below 1 means cannibalisation.
Illustrative merit-order model, not a live forecast. The curve is a typical July day shaped on 2025-2026 NL market patterns, anchored at today's fleet of roughly 24 GW; moving the slider shifts each hour's price in proportion to that hour's solar output. Baseload is the time-weighted average, capture the solar-production-weighted average, and profile factor their ratio.
approach
How I work
-
01
Harvest
Market and grid data from EPEX SPOT, ENTSO-E, TenneT and Ned.nl, cached and joined on a uniform 15-minute UTC grid.
-
02
Simulate
Hourly Python timeseries simulation of the Dutch power system: merit-order dispatch sets the price, 8760 hours per scenario year.
-
03
Forecast
Price-curve forecasting with XGBoost, SARIMAX, Temporal Fusion Transformers and N-BEATS, kept honest by walk-forward validation and conformal prediction intervals.
-
04
Optimise
BESS revenue and payback modelling on day-ahead and imbalance markets, dispatch optimised with PyPSA, linopy and HiGHS.
-
05
Stress-test
Grid-congestion simulation against TenneT data: connection-point capacity, curtailment risk, and what both do to the business case.
the problem I solve
From scattered signals to modelled clarity
before
Raw market and grid data
- EPEX settlements, ENTSO-E exports, TenneT congestion registers, Ned.nl feeds: each in its own format, timezone and resolution
- Negative-price hours buried in spreadsheets nobody reopens
- Connection and curtailment risk invisible until you model the hourly picture
- BESS business cases built on average prices instead of hourly spreads
after
Modelled, explorable clarity
- One uniform 15-minute UTC grid across every source
- Merit-order price models you can stress, hour by hour, out to 2050
- BESS revenue stacked per market, with payback you can defend
- Dashboards and notebooks, so the answer is explorable rather than a PDF
work
Tools that make the energy transition legible
BirdCurve Dashboard
Interactive companion to the BirdCurve NL price model: day-ahead history, price-duration curves, hour-by-month heatmaps, commodities, and BESS revenue stacking out to 2050. Server-side LTTB downsampling, 31 integration tests.
open docs DuckDB · Plotly · NED.nl APISolar DA Value NL
Quantifies the market value of Dutch solar: EPEX day-ahead prices joined with NED.nl generation on a uniform 15-minute UTC grid. Profile factor vs installed capacity shows cannibalisation as the fleet grows.
open analysis marimo · GeoPandas · ffmpegMarktstammdatenplotter
Germany's national energy registry (5.79M PV plants, 42k wind turbines, 194k batteries) scraped, decoded, and animated into monthly choropleth maps from 2000 to today. Interactive WASM notebooks included.
open maps consulting · zzp since 2023Treehouse Energy
Independent consulting: netcongestie analysis on TenneT data, BESS sizing with payback modelling, PV curtailment on live imbalance prices, grid-connection (GTV) advisory, and EMS selection.
open siteenergy & engineering
From market bids to MOSFETs
- Markets
- Day-ahead (EPEX SPOT, Nord Pool), intraday ID1/ID3, forwards, FCR, aFRR capacity + energy, mFRR, imbalance. Flow-based cross-border: JAO domain, PTDFs.
- Grid modelling
- PyPSA-Eur model of the Dutch HV network calibrated against TenneT data: congestion, curtailment risk, connection-point capacity studies.
- Optimisation
- PyPSA, linopy, HiGHS (custom HiPO build). Upstream contributor: linopy warmstart, HiGHS build path, PyPSA-Eur.
- Forecasting
- XGBoost / LightGBM, SARIMAX, Kalman filters, Temporal Fusion Transformer, N-BEATS, conformal prediction intervals, walk-forward validation.
- Power electronics
- 11 kW three-phase bidirectional V2G on-board charger (SiC, ZVS/ZCS, 96%+ peak). Per-panel 350 kHz MPPT boost optimiser for PV.
- Research
- MSc thesis: day-ahead price formation in 2030 under high BESS and V2G penetration (TU/e, on Google Scholar). Merit-order NL 2030 scenario modelling.
Career: BSc + MSc EE, TU Eindhoven · URE electric race car drivetrain · CTO Taylor Solar (PV DC/DC optimiser) · Research Scientist, Lightyear (day-ahead 2030 price models) · Treehouse Energy (2023-now) · Birdview Energy (BESS revenue & grid-risk analytics, NL/DE/BE)
about
Engineer first, photographer since 2011
Trained as an electrical engineer at TU Eindhoven: BSc, MSc, and a stint building the drivetrain of the URE electric race car. Since then: CTO at Taylor Solar working on PV DC/DC optimisers, research scientist at Lightyear modelling 2030 day-ahead prices, independent consulting via Treehouse Energy since 2023, and now BESS revenue and grid-risk analytics at Birdview Energy across NL, DE and BE.
The camera came first, though: photographer since 2011, drone pilot since 2016. The same eye for signal in noise, pointed at rivers, deserts and waterfalls instead of price curves.
contact
Open for hard questions about power markets, batteries, and grids.
Energy-transition engineer in the Netherlands. If it involves hourly prices, congested grids, or a battery business case, I want to hear about it.








