Role: Idea and Build · Built for Amager Motocross Club, Amager Fælled · 2026
The problem
A track's status changes at short notice, and the person who knows is standing at the track — not at a computer, logged into WordPress. So the status on the website is only ever as current as someone's next trip home, and a track that's actually closed can sit there marked open for hours.
The decisions
A PIN instead of a full login, because whoever needs to update the status is standing in the dirt with gloves on, not at a keyboard — but a PIN is still a password, so it's hashed with bcrypt instead of sitting in plain text, and the session is signed so a guess isn't enough to take it over. The widget polls every 30 seconds instead of holding a persistent connection, because a club website doesn't need websockets to feel live — it just can't feel stale. And a service worker with an offline shell, because the track is typically somewhere with a weak signal, and an app that can't even open is worse than no app.
What was built
A WordPress plugin and a companion PWA. A track manager opens the app from their home screen, enters a 4-digit PIN, and sets the track open or closed with a short message attached. The widget on the homepage updates live, with no page reload.
Result
Live and free, at banestatus.larssohl.dk. The club's new site at AMCK is still in progress.


