Public leaderboards and a world heatmap for electric unicycle riders, live at eucstats.ried.no. It's the scoreboard for the EUC Planet app: ride, sync, show up on the map. No account to make, no email, no ads, and we don't sell your location to anyone (more on that below, because it's the whole point).
Lots of leaderboards. Distance, top speed, g-force, sustained power and current, voltage, streaks, climbing, range, efficiency, and a stack of sillier ones (Battery Vampire, Sunday Cruiser, Freespin King), all crunched at once. Which ones are shown is a toggle, so the lineup grows and shifts over time. Tap a rider to fly to their area on the map.
Heatmap. Where the community actually rides, as a glowing grid. Brighter where more riders go, fainter where it's just one lonely soul.
Country, wheel and brand boards. The same stats, grouped. Settle whether your brand is genuinely fast or just loud.
App and OS stats. Who's on the latest app, and who's still riding a build from 2021.
Multi-language support. It picks up your browser's language on its own, and you can switch any time from the menu. Even the trophy names get translated, not just the buttons.
Strava's global heatmap once outed secret military bases and a lot of people's front doors. This one is built the other way around:
- The map never shows your route, your start point, or any line. Every ride is snapped onto a fixed grid of roughly 2 to 3 km squares.
- A square only lights up once several different riders have used it. A street only you ride never shows up at all.
- The flag next to your name is the one you picked, not reverse-geocoded from GPS.
- You can opt out of public stats entirely, or delete everything you ever sent.
We keep aggregates, not breadcrumbs.
FastAPI and SQLite (WAL), one process behind nginx, and the entire public site is a single self-contained HTML page with a MapLibre GL heatmap. The app uploads a trip, the server parses it, runs it through an anti-fraud pipeline (impossible speed, teleports, mock location, spoofed distance, overlapping rides), and folds the clean ones into pre-computed leaderboard tables. The raw upload sits in the database for a retention window, then gets evicted. Boring, cheap, quick.
pip install -r requirements.txt
uvicorn main:app --reload
# open http://127.0.0.1:8000The admin panel lives at /admin (one-time TOTP enrollment on first visit): named
dataset save-slots and backups, the ingest monitor and anti-fraud rules, retention and
heatmap tuning, metric visibility, an activity/health log, and a sandbox of magic
store_ids so the app team can test every response. Tests run with pytest.
- a free public scoreboard makes riding more fun, and nobody had one,
- the numbers from EUC Planet deserved somewhere nice to land.
The backend is services/ and ingest/, the whole public site is one file
(web/public.py), and the admin is web/admin.py. PRs welcome, bugs go to
Issues, live chat is on Telegram.
Free, and it stays free. The server costs a few euros a month; if you want to cover a round: donate via PayPal. Optional, appreciated.
MIT. Fork it, host your own, just keep the copyright notice.