WARBIRDS.IO Dev Log

← All posts

Every callsign gets a page

The ledger has been quietly counting your kills, ships, medals and streaks for a long time. Now there's a page that shows it off — one you can paste in chat after a good night.

A Warbirds.io pilot profile: stat tiles, leaderboard rank chips, a favourite-mount card, a medal-case ribbon rack with progress bars, and an orange kill heatmap over a dark island disc
warbirds.io/pilot/<callsign> — the medal case, the tiles, the ranks, and a heatmap of where you hunt.

What's on the card

Every pilot lives at /pilot/<callsign>. The page lays out the full record: the medal case — every ribbon, with a progress bar ticking toward the ones you haven't earned yet — stat tiles for K/D/W, best round and best streak, your rank on each leaderboard, your favourite mount (the aircraft you've scored the most kills in), and a 16×16 kill heatmap painted over the island disc, so you can see at a glance whether you're a furball-over-the-ring pilot or someone who lurks the coast. Click any name on the Hall of Fame and you land on theirs.

New data, on the hot path but cheap

Two of those — favourite mount and the heatmap — weren't tracked before, so the kill handler picked up two O(1) map bumps: one to a kills-per-aircraft tally, one to the heatmap cell under the victim. Best round rides the round-end bookkeeping that already awards wins. All three are keyed by the pilot's identity token in memory and flushed to Postgres on the same 30-second cadence as everything else, so a busy server isn't writing to the database mid-dogfight. With no database configured they simply live for the process lifetime — the same "it's a game, not a bank" contract the whole ledger runs on.

Public by construction

A profile is resolved by vanity callsign, not by identity token: /pilot.json?name=Moss does a case-insensitive match over the ledger (ties break to the most recently seen), and the token — the private thing that actually owns the record — never appears in a URL or a payload. Everything on the page is data the scoreboard and the Hall of Fame already expose, just aggregated per pilot. It's plain HTTP/JSON: no new client message, no event, not a single snapshot byte. The shell is one static page that reads the callsign from its own URL and fetches the JSON — crawlable, cacheable, and linkable.

It's the payoff for a lot of invisible bookkeeping: the paint you earned, the ace marker you fly under, the ribbons in your case — now there's a single address that gathers all of it, and it feels like yours. Weekly seasons are next; when they land, this page grows a shelf for the weeks you topped a board.