Why this exists
Looking up a train time should be a five-second job. In practice it means a journey site tuned to sell tickets: adverts everywhere, a route found once and forgotten and no memory of the journey you are actually on. The context that matters on the day (platforms, delays, whether you need a coat at the other end) lives scattered across separate sites that each want your attention on the way through.
Trainer puts the whole journey in one desktop window. Real-time departures with platforms, delays, cancellations and calling points; route planning with interchange support across a hand-curated network of UK stations and routes, which turned out to be the largest single piece of work in the project. Then the two companions every journey has anyway: weather for the destination rather than just home, via Open-Meteo with no account and no API key, plus the night sky above the trip (moon phases and a seven-day astronomical outlook) because a physics degree does not stop asking.
It is built the way the rest of the account is built: a PySide6 app with clean layering and constructor injection, the domain logic behind a 100% coverage gate and every external service treated as unreliable, so a weather outage degrades gracefully instead of taking the departures board with it.
What works now is one dark Material interface with the forecast, the sky and the departures side by side: fully keyboard navigable, themed light or dark with a keystroke and shipped as native installers for Windows, macOS and Linux. Local-first throughout: no account, no key handover and your data stays on your machine.
Full reasoning at crankthecode.com.
Trainer