Inspiration
Everyone's played the game in class: get from one Wikipedia article to another using only the blue links. But it always dies the same way — someone claims they did it in 3 clicks, nobody can prove anything, and there's no way to actually race. We wanted to turn the greatest procrastination game ever invented into a real competitive sport.
What it does
WikiRace Arena is a racing game built on top of live Wikipedia. You get a start article and a target article, and you have to reach the target clicking only the links inside articles. No search bar, no back button.
Three ways to play:
- 👻 Ghost race — race bot pacers (Chill Carl, Sweaty Sam, or the merciless GOAT-9000)
- 🔗 Challenge links — when you finish, your entire run (every article + timestamp) is compressed INTO the share link. A friend opens it and races your live ghost — they literally watch which article you were reading at every second. No account, no database: the URL is the replay.
- ⚔️ Live rooms — create a room, send one invite link, up to 8 players race the same matchup with a server-synced countdown and live progress bars. Fewer than 4 players — first to finish wins; 4+ — race until the top-3 podium fills, everyone else gets WRECKED.
How we built it
- Next.js 16 + React 19 + Tailwind 4, TypeScript, deployed on Vercel
- Wikipedia REST API is fetched directly from the browser — the app sanitizes raw article HTML client-side: strips scripts, disables external links and service namespaces (File:, Category:…), rewrites every wiki link so clicks stay inside the game
- Win detection resolves Wikipedia redirects by comparing canonical titles, so "NYC" correctly counts as "New York City"
- Challenge links: the run is encoded as compact JSON → base64url in the URL fragment
- Live rooms: Vercel serverless functions + Upstash Redis, clients poll light JSON snapshots — no websocket server to babysit
- Design: "encyclopedia meets street racing" — a warm paper article panel with classic serif typography inside a dark asphalt arena with checkered flags and an acid-yellow HUD
Challenges we ran into
- Wikipedia's Parsoid HTML is wild: templates, infoboxes, red links, footnotes, imagemaps, interwiki links — all of it had to be sanitized so that only real article links count as moves (a footnote click must not cost you a hop!)
- The weirdest bug of the day: macOS trackpads swallow physical clicks as micro text-selections, so links "didn't work" for half our testers — navigation now fires on pointerdown for mice and on click for touch
- Keeping multiplayer honest on stateless serverless functions: start is synced via server clock (players' local clocks lie!), with a watchdog so no one gets stuck on the countdown
Accomplishments that we're proud of
- The challenge-link trick: an entire replay living inside a URL — the "database" is the link itself
- The whole game runs on live Wikipedia — every one of its 6M+ articles is a playable level
- Real multiplayer with podium logic, tested live with friends, built and deployed solo within the 12-hour window
What we learned
- Parsing and sanitizing untrusted HTML in the browser (DOMParser, event delegation on rewritten links)
- Designing multiplayer around polling + a single JSON snapshot instead of websockets
- Wikipedia's REST API surface (page HTML, summaries, redirects, random) — and how differently trackpads, touchscreens and mice deliver "a click"
What's next for wikirace-arena
- Quick Match — matchmaking queue for racing strangers
- Daily challenge: same pair for everyone, global leaderboard
- Click-path heatmaps: see the routes the crowd takes
- Tournament brackets for classrooms — the one game where "stop playing and read Wikipedia" IS the game
Built With
- next.js
- react
- tailwind
- typescript
- upstash-redis
- vercel
- wikipedia-api

Log in or sign up for Devpost to join the conversation.