11 May 2026, 10:40
If you’ve been near a MyTurtle screen in a Belgian office lobby lately, the ones quietly counting down the next train, tram or bus, you might have noticed it looks a little crisper, reads a little better, and tells you a little more. The last few weeks have been busy under the hood, and quite a bit is now visible above it too.
The trigger was practical. The STIB-MIVB open data portal we’d been pulling Brussels tram and bus times from is being decommissioned, and everything had to point somewhere new. Rather than swap one source for another and call it a day, we decided to do this the right way and route every transit feed through a single proxy of our own at mobility.flatturtle.xyz. Instead of hundreds of screens hammering STIB-MIVB, BMC and iRail directly, they now ask one place. That place caches aggressively, prefetches data the moment it’s about to expire (because we know the screens will ask again in a few seconds), and gives us one calm spot to add features, fix bugs and tune performance. Less load on the upstream APIs, faster screens for everyone, and a much shorter list of moving parts on our side. We’ve also added extensive OpenTelemetry logging allowing us to beautifully chart everything.
With the plumbing in place, we could finally tick off a list of things that had been waiting their turn.
The biggest visible addition is TEC (sorry, Le TEC, which I think is a terrible name :)). The Walloon bus and tram operator, the one running everything in Liège, Namur, Charleroi and Mons, is now a first-class citizen on MyTurtle. Together with SNCB-NMBS, De Lijn and STIB-MIVB, that means all four major Belgian transit operators live in one place. Same screen, same widget, anywhere in the country. And because we now use the BMC real-time feed for TEC, STIB-MIVB and De Lijn (rather than the static GTFS schedules we relied on before), the times you see are the actual ones, not the planned ones.
Speaking of STIB-MIVB and De Lijn: each direction of a stop is treated as a separate stop in the new APIs, where the old one bundled them together. We now fan out the requests in parallel and merge the results into one board, soonest first. So if your nearest stop has trams in both directions, you’ll see both again, the way riders are used to.
SNCB-NMBS S-trains got a small but lovely upgrade. The badges on screen now use the same colours as the official printed S-train maps. Green for S1, red for S4, and so on. From across a busy lobby you can spot your line by colour instead of squinting at a number. International services got the same treatment: Eurostar, TGV inOui, ICE, EuroCity and Nightjet each have their own brand-tinted badge, so they stand out from domestic IC trains at a glance.
A few quieter touches smooth over the rougher edges. When the last bus of the day has gone (TEC’s evening routes wind down around 21:00 around Brussels, and some De Lijn lines aren’t far behind) the screen now politely says so, in the same language the rest of the screen is rendering: “No departures right now”, “Aucun départ pour le moment”, “Geen vertrekken op dit moment”, or “Aktuell keine Abfahrten”. The language follows the kiosk’s location, no manual setting required. A blank board is a confusing board.
Station name resolution got a similar bit of care. Legacy admin configs hold names in any of three languages, with or without diacritics, in any case. The new resolver shrugs at all of that. Liège matches Liege, Brussels matches Bruxelles matches Brussel, multi-token searches find the right station, and there’s a safety net so it never silently picks the wrong one. The kind of thing nobody notices when it works, and everybody notices when it doesn’t.
The map widget moved off Google Maps and onto HERE Maps. Cleaner basemap, much better traffic-layer rendering, a custom SVG pin tied to the screen’s brand colour, and we skip an unnecessary geocode round-trip when the screen already knows where it is. There’s a longer story behind this one too: we’d rather lean on European tech where we sensibly can, and HERE is European. It’s a long road, a lot of the world’s mapping, hosting and tooling lives in the US, but we’d like to walk it step by step.
Because we want to support even our oldest generation of TurtleBoxes (we’re really against planned obsolescence; while the hardware is “old” in today’s terms, it’s actually entirely fine for digital signage; those with low RAM get upgraded when we have a chance to pop by), we ran into a snag: these older devices don’t properly support WebGL, which the modern traffic layer needs. Vector tiles silently fail or render half-broken (missing labels, frozen tiles, white squares) while the rest of the page works fine. Raster PNG tiles, on the other hand, render on literally any browser that can show an image. So for these devices we’re now serving PNG tiles with the traffic layer on top, which means we can keep them in service for years to come.
The new Mobility backend also includes Navitia for our customers in Paris, along with airport feeds showing live departures and arrivals.
While we were at it, weather came home. Our previous provider had been having a rough patch on uptime, so we moved to a new one, with a few backups behind it for good measure, and gave it its own little proxy. We named it after the weatherman we all grew up with: frankdeboosere.flatturtle.xyz. Localised forecasts are once again on the screens where they belong (just wish the BBC feed would have happier news).
And we’ve taken the opportunity to sunset most of our Kubernetes cluster on Digital Ocean (part of our attempt to move off US tech where we can; we’re realistic, it’ll never be 100% possible) and move the RSS parser (a tool that transforms any RSS feed into something our screens can understand for the News Turtle) to our own hardware. While we were rewriting it, we also moved the backend from Python to Go.
A handful of small clean-ups rounded out the work. A couple of unused turtle types finally retired, and the last of the legacy hosts switched off. From here on, one proxy to extend, one build to maintain, one deploy command to run.
In the background, Nik is still hard at work on a full rewrite of MyTurtle and MyTurtleAdmin. It’s been a long road and we’ve been busy with a lot of other projects in parallel, but the new version is shaping up nicely and we’re looking forward to getting it into your hands in the coming months.
In the meantime, the screens are a little brighter, a little more accurate, and a little friendlier. Which, in this kind of work, usually means we did the boring parts right.