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

Share this project:

Updates

Submission history