What's new
Recent ships. If a feature looks interesting, the link below jumps you straight to it.
-
Spaced-repetition review for your mistakes
Every wrong answer now schedules itself for review at expanding intervals — 1 day, then 3, then 7, then 21. The hub surfaces a "mistakes due" banner so you can clear them while they’re still fresh, and the queue advances or resets based on whether you nail the retry.
See what’s due → -
Three more achievements to chase
"Purist" rewards 10 hint-free correct answers, "Speed Demon" celebrates a sub-2-second correct, and "Hard Mode" needs a 7-in-a-row run on one game without touching the hint button.
See achievements → -
Search the archive by relevance
Multi-word searches now narrow with AND semantics ("javascript closure" needs both terms to match) and results are ranked by where they hit — an exact tag match outranks a substring hit, which outranks body-only.
Try a search → -
Filter Practice by language
Practice now exposes a language chip strip whenever your scope contains more than one language. Drill specifically on Python output puzzles, or just TypeScript type signatures, without flipping between game filters.
Pick a language → -
Shortest-code tracker on Code Golf
Solving a Code Golf puzzle now tells you whether you beat your previous shortest at this difficulty, matched it, or came in heavier — with the delta in characters. First solves call out their baseline so future attempts have something to chase.
-
Mobile bottom-tab bar
On phones a thumb-reachable tab bar at the bottom of every page jumps between Games, Daily, Practice, and Stats. Secondary nav (Archive, About, etc.) stays in the top-right menu.
-
Smarter "rebuild stalled" banner
When the daily rebuild is just running late you see a friendly heads-up. When it’s actually broken (two or more days behind) the banner switches to a red alert with a direct link to the archive — no more dead-end "check back soon."
Browse the archive → -
Back-up reminder for committed players
Once you’ve crossed seven puzzles a one-line nudge on the hub points at Stats so you can export your local progress. Streaks and stats live only in this browser — losing them to a cookie clear is no fun.
Export progress → -
Which Language? — game nine
A fresh daily game: read a short code snippet and pick which of four languages it’s written in. No syntax highlighting — the syntax is the clue.
Play today’s puzzle → -
Compare with a friend
Turn your stats into a short share code (20-ish characters) and paste your friend’s into /compare for a side-by-side diff. The code is just a summary of counts — nothing else travels with it.
Get your compare code → -
Review your mistakes
Every puzzle you’ve missed, grouped by game and with replay links. Sort and filter, or hit "Replay a random mistake" to set the record straight.
Go to mistakes → -
Scoring gets weighted by difficulty
Hard = 3 points, medium = 2, easy = 1. Your daily score now reflects how hard today’s set actually was, and the share text shows your total.
-
Blind challenges
When you share a puzzle to a friend, your time is now hidden until they answer — no spoiler. The challenge ribbon still builds the pressure.
-
Adaptive daily run
Hit "Daily" and we now launch you into your *weakest* unplayed game first (once you’ve played a few). Spend your focused minutes where you’re weakest.
Start the daily run → -
Puzzle of the Week
A rotating staff pick from the archive shows up on the hub each week — a low-friction "try this one" nudge that avoids the everything-everywhere paradox of the archive.
-
Tag filter on archives
Each game’s archive now surfaces the top tags as filter chips — click to narrow to "typeof" puzzles or "edge-cases" or whatever your sore spot is.
-
Per-game social previews
Share a puzzle on Discord, Slack, or Twitter/X and the preview card now shows the game’s own colour and icon. Nine new OG images generated at build time.
-
Quieter, more reliable
Under the hood: storage backups on every write with automatic recovery, rate-limited async error toasts, service worker that survives a stale asset manifest, and typed completion meta that catches renamed fields at compile time.
Want to tell us what's missing? Suggest a puzzle