In this episode of Micro-Frontends in the Trenches, Luca Mezzalira sits down with Peter Eijgermans to unpack a five-year journey building Spoorviewer, the real-time dashboard powering operations at the Dutch Railways (NS / ProRail).
Peter walks through how four teams modernized a slowing Angular monolith into a dashboard-style shell hosting five remote applications, loaded dynamically at runtime via Module Federation. You'll hear what worked, what didn't, and why the first attempt with Web Components (Custom Elements) failed to deliver on performance.
CHAPTERS
00:00 Cold open: shipping without fear
01:26 Welcome and introductions
03:02 Meet Peter: full-stack, real-time data, and OIDC
05:16 Spoorviewer: a dashboard, not a page-based app
07:22 The five remote apps: Spoorzicht, Plan, Baanvak, Track Occupancy, Maintenance
10:34 Why micro-frontends? The organizational and technical breaking point
12:47 The performance trap of Custom Elements
14:54 Switching to Module Federation: Lighthouse 30 → 75
16:50 Domain-Driven Design and identifying overlapping boundaries
20:11 Recap: shell, lazy loading, DDD, and team independence
23:30 WebSockets aligned to bounded contexts
26:46 How developers felt about the move to micro-frontends
28:11 Guardrails: framework alignment, versioning, shared libraries
31:14 From client-side OIDC to a Backend-for-Frontend "Lego brick"
34:27 Drawbacks and lessons learned along the way
36:41 Architecture surfaces friction, it doesn't create it
39:17 AI on the horizon: predicting train delays
40:39 AI in the developer workflow
42:31 Closing reflections: start with good design
43:21 Wrap-up and outro