Live NS (Dutch Railways) departures for Even Realities G2.
Perron-NS turns the G2 lens into a glanceable clock and departure board. Journeys are planned on the phone, where there is a keyboard, and the glasses show the times, delays, platforms, and transfers for the trains you need. Live data comes from the NS Reisinformatie API through a small proxy.
Scan with the Even Realities app on your phone, or open the listing on Even Hub:
evenhub.evenrealities.com → Perron-NS
- Glanceable lens — the current time stays in the top-left corner of every screen.
- Live departure boards — times, delays (
+N), platforms, transfers, cancellations, and crowd forecasts, straight from NS. - Phone planner — From/To with live station autocomplete, a Favorites list, and a Plan again history of recent routes.
- Full stop list per train — tap a train in a journey's detail to see every stop on its route, with boarding and disembarking stops marked and the stops outside your segment dimmed.
- Phone and glasses mirroring — the lens follows whatever the phone shows, while temple gestures move the lens locally.
- Auto-refresh — an open board re-fetches every 60 seconds, so cancellations and delays arrive without re-navigating.
The home screen shows the clock and up to three recent journeys. Tap a journey to see its upcoming departures, then tap a time to open the full board: when and where each train leaves and arrives, and which platform to board. Swipe to move through the lists, and double-tap to step back a screen or exit from home.
| On the glasses | ||
|---|---|---|
![]() |
![]() |
![]() |
| On the phone | ||
|---|---|---|
![]() |
![]() |
![]() |
Project documentation covers the architecture, temple gestures, local development, the NS proxy, and the tech stack.
See also the privacy policy, release notes, and changelog.
With Node.js 20.17.0+, 22.13.0+, or 23.5.0+ installed, run:
npm ci
npm testThe Vitest suite runs in jsdom with fake clocks and mocked SDK and network
boundaries. It covers planner interactions, glasses gestures, storage, scheduled
refreshes, stop lists, time selection, localization, and failures. Coverage
requires 100% statements, branches, functions, and lines in each production
module: the phone and glasses app, NS client, localization, and Cloudflare proxy.
Only tests and TypeScript declaration files are excluded. The HTML report is
written to coverage/index.html, and CI runs the same gate before packaging. The
tests do not replace checking the app on real glasses.
Copyright (c) 2026 JustinasLaunikonis.
Licensed under the MIT License. The NS Reisinformatie API, Even Realities SDKs, and other third-party dependencies retain their own terms.






