i built a swiss departure board for our apartment's tablet
real-time SBB departures styled like the classic Swiss LED boards. live weather, news, crypto ticker, and birthday celebrations. runs on a tablet in our WG hallway.

every morning, five people in our WG open the SBB app at the same time to check the same tram. same stop. same direction. same question: "do i need to run?"
we live on witellikerstrasse in zürich. balgrist tram stop is right outside. tram 11 into the city, maybe a bus, the usual. and every single morning it's the same ritual — someone stumbles out of their room, opens the SBB app, squints at the departure time, and either calmly puts on shoes or sprints out the door.
i thought: we have a tablet mounted in the hallway. what if it just showed the next trams? all the time? so nobody has to check?
so i built it in a day.
the departure board
the board shows real-time departures from balgrist. it pulls live data from the transport.opendata.ch API and displays it exactly like the classic swiss LED departure boards — the ones with the orange/yellow text on dark backgrounds that you see at every train station.
because if you're going to build a departure board, it should look like a real departure board. aesthetics matter. even in a hallway.
each departure shows the line number, destination, and countdown in minutes. delay indicators show up in real time when SBB is running behind (which, despite swiss reputation, does happen). each tram line gets its actual ZVV color — tram 11 in its proper shade, tram 8 in magenta, tram 4 in dark blue. the details matter.
the best feature is the "GO NOW" zone. departures between 3-6 minutes out glow green. that's the sweet spot — enough time to put on shoes and walk to the stop, not enough time to sit back down and get comfortable. when a departure hits the green zone for a city-bound tram, you go. no thinking required.
then i kept adding things
the departure board was done in a few hours. but the tablet is always on. and it has a whole screen. and i had more ideas.
weather screen. current conditions, feels-like temperature, wind speed. plus rotating context-aware messages — because just showing "12°C partly cloudy" is boring, but "12°C, good jacket weather" is actually useful.
news screen. RSS feeds from 13+ sources — swissinfo, SRF, the guardian, reuters, hacker news, techcrunch. sorted by time, with colored badges for each source so you can tell at a glance if you're reading swiss news or tech news. it's the hallway newspaper. you glance at it while putting on shoes and suddenly you know what's happening in the world.
market ticker. a scrolling bar at the bottom with BTC, ETH, SOL, DOGE, and forex rates for USD/CHF and EUR/CHF. green and red indicators. because apparently i live with people who care about crypto prices at 7am. the ticker scrolls continuously like the ones on bloomberg terminals, except this one is in a student apartment hallway.
birthday celebrations. this is the one that makes it more than a utility. when it's someone's birthday, the header takes over, there's a dedicated birthday screen, and ticker messages celebrate the person. on normal days, it shows upcoming birthdays so nobody forgets. in a WG with five people, forgetting a birthday is a diplomatic incident.
vanilla JS because sometimes that's all you need
the whole thing is vanilla HTML, CSS, and JavaScript. ES modules. no react. no build step. no node_modules folder. no webpack config. no "npm install" followed by 847 packages.
i'm not anti-framework. i use react for plenty of things. but this is a display board. it fetches data, renders HTML, and rotates screens. it doesn't need a virtual DOM. it doesn't need state management. it needs a setInterval and some fetch calls.
the entire codebase is readable. you can open the source, understand what it does, and modify it. want to change the tram stop? change one string. want to add an RSS feed? add one URL to an array. that's it.
the WG effect
the board has been running in our hallway for a few weeks now and it's changed the morning routine. nobody opens the SBB app anymore. you walk past the tablet, glance at the departures, and you know. green zone? go. nothing for 8 minutes? make another coffee.
the news screen is surprisingly popular. people stop in the hallway and actually read headlines. the birthday feature got someone emotional on their birthday which was not the reaction i expected from a hallway tablet.
the crypto ticker mostly generates arguments at breakfast.
the honest take
i built this in about a day. it's not complex. it's not impressive engineering. it's a few API calls and some CSS that makes text look like LED displays.
but it solves a real, daily, five-times-a-morning problem for five people. and it turned a hallway tablet from a dust collector into something everyone actually looks at.
the whole thing is open source. if you live in switzerland and have a spare tablet, you can set this up in minutes. just point it at your tram stop and let it run.
fair warning: you'll never check the SBB app in the morning again.