Still shipping.
What actually shipped on this site, newest first. A real changelog, not a marketing one — nothing here is a milestone that didn’t happen.
- Aug 17, 2026
La Cochina is live — Entry 02
Multiplayer gets its second entry: La Cochina, a real-time 2v2 Venezuelan domino game — 28 double-six tiles, no boneyard, counterclockwise, and the winning pair scores the points of all four hands — running in production on a Colyseus server on Fly.io with accounts, OpenSkill ratings, matchmaking, and elimination tournaments. Unlike Prode's hand-captured standings snapshot, this entry's proof panel is live: the game server grew a public /api/stats endpoint, and this site fetches real counts — registered players, completed matches — straight from the game's own Postgres at render time, server-side, with an honest 'server didn't answer' state instead of cached or invented numbers. The numbers are small because the game just launched; the page says so instead of dressing them up. Under the hood, the Production data model split into a discriminated proof union — a finished run proves itself with a captured table, a live game proves itself with a live database — so neither entry has to pretend to be shaped like the other. Play La Cochina links out to the real app in a new tab (the game's client walls everything behind an account, so an embedded cabinet would demo a login form); there's no repo link, and the case study says why.
- Aug 5, 2026
PIXEL INVASION goes mobile — and Level Select shows up on one
The Unity build behind Level 07 is playable on a phone now — an on-screen joystick and fire button, landscape-only, with its own tap-to-start gate. The case study meets it halfway: on a coarse pointer, Insert Coin no longer tries to mount the WebGL build inside the case-study frame — it links straight to the real build in a new tab instead. Neither the Fullscreen API nor screen.orientation.lock() works reliably inside a cross-origin iframe, so a framed phone session had no way to hold landscape against the browser's own chrome; this was true the moment the build learned to play on a phone at all, not something the site broke. The desktop embed also started actually sending the embed=1 marker its own copy had been describing since launch — so the game now genuinely hides its co-op buttons inside the frame, matching what the case study has said all along. Separately, a real bug: Level Select's reveal-on-scroll waited for 30% of the tile grid itself to enter view, but stacked on a phone that grid runs past 3000px tall — a threshold no phone viewport could ever satisfy, so all seven tiles sat at opacity 0 forever on mobile. Swapped for a viewport-margin trigger that doesn't scale with the grid's own height. And PIXEL INVASION moves back to Level 07, closing out the list in order — Sextant is the featured tile again.
- Aug 4, 2026
PIXEL INVASION is live — Level 07
A 3D co-op arcade shooter built in Unity 6, now Level 07. Space Invaders' shape, with real online multiplayer underneath it: shooting is server-authoritative with client-side prediction — your tracer leaves the ship the frame you press fire, the host decides whether anything actually died, and a disagreement reconciles instead of arguing. Movement is owner-authoritative on purpose, because in PvE co-op a movement cheater only ruins their own run. Explosions travel as ~16-byte RPCs instead of spawned NetworkObjects, which is both cheaper on the wire and the fix for a bug where your own death explosion was the one nobody else could see. A custom xorshift32 RNG replaced UnityEngine.Random everywhere, so a whole run replays from a single seed — which is what made 30 EditMode unit tests across 6 files possible in the first place. The case study embeds the real WebGL build but deliberately does not download it for you: a 24.7 MB game has no business loading because someone scrolled past, so the cabinet shows a poster and an Insert Coin button, and the iframe doesn't exist until you press it. And there's no repo link on this one — the case study says why: three bundled Unity Asset Store packs are licensed for use in the game, not for redistributing their source.
- Aug 3, 2026
Inventory, a real accessibility pass, and a hidden speedrun
A backlog-closing pass rather than one feature: a new /inventory screen lists the actual daily tools this site runs on (TypeScript, Next.js, Tailwind, Vercel, Upstash Redis, Supabase, Resend, Sentry, Playwright/Vitest) as game-inventory item cards, not a skills list — every entry checkable against this repo's own package.json. The §5.4 accessibility pass turned out to have real, fixable gaps: the boot flourish's "any key dismisses it" was invisible to a sighted keyboard-only visitor, so it now has a real, focusable Skip intro button, autofocused on mount, with focus restored to the page on exit. Focus rings now pick up their section's own zone color instead of always cyan. The leaderboard's "you" row got a plain-text (you) marker alongside its color highlight. REWIRE's midnight-rollover guard — the thing that keeps a puzzle from going stale if you leave the tab open past 00:00 UTC — is now shared by ECHO, KEYRUN, and FLUX DODGE too, with an honest "the day rolled over mid-run" message instead of silently resetting an in-flight game. Posting a score on any of the four daily games now unlocks the High Score trophy, not just REWIRE. And the console colophon's one-way log message became a real callable — window.chu.speedrun() arms a hidden any% timer (so does just dismissing the boot flourish), ticking in the corner until you focus the contact form, at which point it saves your best time and hands you the Speedrunner trophy.
Features- Wire up the hidden any% timer (ROADMAP §3.3)
- Close the real gaps in the §5.4 accessibility pass
- Add /inventory — the "uses" page (ROADMAP §2.4)
- Generalize High Score to every /play/* game
- Share REWIRE's midnight-rollover guard across the arcade
Fixes- Backend hardening (leaderboard rate limit, DODGE input-log warning) + contact-form a11y
- Aug 3, 2026
The arcade learns to catch its own errors
Every one of the 17 real error sites in this codebase used to just console.error and move on — a Redis hiccup that silently weakened the leaderboard's rate limiter, a failed Resend send, a broken GitHub fetch, all invisible outside Vercel's runtime logs. Sentry now catches all of it, client and server, through one shared reportError() helper that keeps the existing console output and adds real reporting, plus a global-error.tsx that stays in the site's own arcade language ("Connection lost") instead of Sentry's generic template. Separately, the Supabase auth flow — signup, email confirmation, login, an authenticated write, session persistence — had unit coverage for the pure logic but had never actually run end-to-end. It has now, against real production: a new Playwright suite confirms the whole loop, admin-confirming the test user instead of reading a real inbox, running nightly instead of on every PR since Supabase's own SMTP rate-limits signups on the free tier.
Features- Integrate Sentry + E2E smoke-test the Supabase auth flow
- Aug 2, 2026
Ember is live — Level 06
A serverless image-optimization pipeline built entirely on AWS, now under its own brand — Ember. Drop an image and watch S3, Lambda, and CloudFront actually process it: a presigned upload goes straight to S3, an event-driven Lambda runs sharp to generate WebP and AVIF variants at three sizes, and the results are served back through the same CloudFront distribution the app itself runs on. The page now explains itself — a How It Works walkthrough and an example gallery built entirely from real pipeline output, never a mockup. Every resource is defined in AWS CDK, torn down cleanly with cdk destroy, and files self-destruct on a real ~60-minute schedule — engineered around the fact that S3 Lifecycle can't actually expire anything in under a day.
- Jul 25, 2026
The arcade learns to test itself
294 unit tests already covered the pure logic — daily seeds, score validation, share links — but nothing exercised the boot sequence, the contact form's honeypot, or the four daily cabinets in an actual browser. Playwright now drives all of it against a real production build: the boot overlay racing the Konami code for the same keydown listener, a honeypot that returns a silent 200 indistinguishable from a real send, warp-key navigation, and REWIRE solving its own daily puzzle end-to-end. It runs with zero secrets on purpose — every integration (Redis, Supabase, Resend) degrades gracefully, and the suite asserts the degradation instead of skipping past it. axe found one real contrast violation on /how-it-works; it's fixed, not allowlisted. GitHub Actions now runs lint, types, unit tests, a real build, and the full E2E suite on every pull request.
Features- e2e: Add the Playwright E2E rig for the arcade's fragile flows
Fixes- a11y: Distinguish the Player Profile link from surrounding text
Internal- Document every env var and ignore Playwright artifacts
- Run lint, typecheck, unit tests, build and E2E on every PR
- Jul 24, 2026
Patchnotes hits npm — and the Lab runs it live
Shipped patchnotes, a zero-dependency npm CLI that turns raw git log output into grouped patch notes, then wired it into the Lab as EXP-03: paste any log, pick markdown, JSON, or plain text, and the exact code published on npm parses it live in your browser — not a re-implementation. Entries on this page can now carry a grouped change list, and this entry's list came from running the CLI over this site's own commits. It only understands conventional-commit prefixes; anything else files under Changes, which is a design choice, not an accident.
Features- lab: Add EXP-03 — the patchnotes playground
- log: Render optional grouped items on patch note entries
Fixes- sitemap: Add missing /lab entries
Internal- log: Announce EXP-03 with a change list generated by the CLI itself
- Jul 23, 2026
HOLOGRAMA is live — Level 05
A three.js 3D/AR viewer built from scratch — not a <model-viewer> embed. Drop in any glTF model for a real client-side inspection that never leaves your browser, launch native AR on iOS (Quick Look) or Android (Scene Viewer), or scan the QR on Chu's business card and watch a solitaire diamond ring appear on your table. One glTF pipeline feeds the viewer, the inspector, the USDZ for AR, and the card's marker mode.
- Jul 22, 2026
The arcade learns to respect thumbs
KEYRUN used to need a real keyboard — mobile devices bypass keydown events entirely, so the game didn't work on touch keyboards at all. Rewrote the input capture around input events instead, so a soft keyboard on iOS or Android now works. Tap targets and touch behavior across all four cabinets got tightened too — no more accidental double-tap zoom, clearer hit zones. Honest truth: a physical keyboard is still faster for KEYRUN, but now you can at least try.
- Jul 21, 2026
FLUX DODGE — a survival cabinet the server actually verifies
The fourth cabinet: dodge a filling arena for as long as you can — no daily seed, the danger is procedural and the same for everyone. The score is the showcase here: the client sends its full input log, every direction change timestamped, and the server re-simulates the entire run from scratch, deterministically, before it trusts the reported survival time. No client-sent time is ever taken on faith — this is the first cabinet backed by a full replay proof.
- Jul 21, 2026
KEYRUN — a daily typing sprint, no lorem ipsum
The third cabinet: type today's passage of real prose — never pseudo-code, never filler text — as fast and cleanly as you can. A wrong key holds the line until you fix it; there's no skipping past a typo. Score is net WPM plus accuracy, capped at 250 WPM so an impossible run can't reach the board, and the server independently re-derives today's passage and re-checks every submitted field itself.
- Jul 21, 2026
The arcade floor opens — /play is a hub now, and ECHO joins the lineup
/play stopped being REWIRE's address and became the arcade floor: a grid of cabinets, one per game, with REWIRE moving to its own room at /play/rewire — its shared result links and dynamic OG cards came with it, untouched. The same day, a second cabinet lit up: ECHO, a daily memory game in the Simon tradition — watch the pattern, play it back, one wrong pad ends the run. Pads are distinguishable by position and shape, never color alone, and the server checks that every input you send is a genuine prefix of today's sequence before a score counts.
- Jul 21, 2026
Optional player accounts — initials that follow you
Added /account: an optional sign-up — email, password, the same three-letter arcade tag from the leaderboard entry screen — for anyone who wants their initials to persist across devices instead of riding with one browser. Guest play didn't change at all: you still post to every leaderboard exactly as before, no account required. Signed-in scores key off your account instead of an IP hash, and the whole sign-in/sign-up UI is built from scratch — no vendor auth widget breaking the arcade's visual language.
- Jul 21, 2026
A Last Run card with a real route trace
/run now shows a Last Run card — distance, time, pace, and date of the most recent activity, plus the actual route drawn as a flat SVG path in the zone's color, decoded straight from Strava's polyline with a decoder written in-house (zero external dependency, same rule the CLI follows). If Strava doesn't send a polyline — a privacy zone, a privacy-taped activity, or the env not configured — the card says so instead of faking a trace.
- Jul 21, 2026
VS Mode races any distance, and the cadence number stopped lying
VS Mode on /run no longer forces every challenger into a 10K: pick 5K, 10K, half, or full marathon, enter your own PR at that distance, and race Chu's real PR there instead — all four already lived in the data, nothing invented. Pace presets are now defined in min/km so they hold up at any distance. And a smaller honesty fix: Strava reports cadence per leg, not real steps per minute, so the HUD was quietly showing half the true number — it now doubles it to show the actual ~168 steps/min a runner takes.
- Jul 18, 2026
REWIRE gets a leaderboard
Added a global leaderboard to REWIRE — a Today board that resets with the circuit and an All-Time board that persists, both entered with 3 initials, arcade-style. The server won't take a score unless it can independently verify the circuit is actually solved: it regenerates today's board from the same deterministic seed and checks it, never trusting a client-sent board. Taps and time are self-reported (there's no move log to verify them against) and the UI says so plainly. Backed by the same Upstash Redis foundation as the demo-uptime badges, with a real High Score trophy now wired up.
- Jul 18, 2026
Level 04 is playable — REWIRE, a daily circuit puzzle
/play is live: REWIRE, a daily circuit-routing puzzle. Rotate tiles until current reaches every socket — one board for everyone, generated from a deterministic seed of the UTC calendar day and solvable by construction, never an unsolvable puzzle. Par is the exact minimal number of taps to the generated solution. Fully keyboard playable, streaks and personal bests kept in localStorage only, and a Share button that copies a spoiler-free emoji grid of the circuit's shape — never the solution's orientation.
- Jul 16, 2026
A storage foundation, and a pulse check for every demo
Added an Upstash Redis foundation and a daily Vercel Cron that pings every live demo's URL, plus a real STATUS: ONLINE/OFFLINE badge on each case study with an honest last-checked time — no backend, no fake uptime, just an actual check. If Redis is ever unreachable, every case study falls back to its previous Live chip instead of showing a stale or fabricated status.
- Jul 16, 2026
Opened the Lab
/lab is live — a Test Chamber of small, self-contained experiments, each one honestly labeled STABLE or JANKY before you load it. First two cartridges: Signal Field, a generative piece that bends all three zone colors toward your cursor, and Reflex Ring, a millisecond timing toy that admits up front it's a vibe, not a benchmark.
- Jul 16, 2026
A trophy case, not a stat sheet
Added a sitewide trophy system — eight things you can actually do here (warp with the keyboard, find the cheat code, read the patch notes, clear every level and the Lab) tracked in localStorage and shown as a case on the Player Profile. No server, no fake stats — just an honest record of what you actually did, with a shareable ALL CLEAR card once you clear it out.
- Jul 15, 2026
Level 03 is live — the ecosystem closes the loop
Obra, a 100-piece generative NFT collection and marketplace on BNB Chain, is minted and traded entirely in CHU — the token staked in Level 02. No backend anywhere: the contracts are the source of truth, art and metadata live on IPFS, and every deploy went out through a browser wallet, not a private key in a repo. All three levels are active now.
- Jul 15, 2026
A side quest, not a side project
Shipped /run — a Strava-powered training log for the actual Buenos Aires marathon I'm training for. Live pace, endurance, and weekly mileage pulled from real runs, a countdown to both races, and a VS Mode where you race my real 10K PR.
- Jul 15, 2026
Legible to machines, not just people
Added llms.txt, JSON-LD (Person, WebSite, and one SoftwareApplication per level), an RSS feed for this log, and a deliberate robots.txt policy — plus a live GitHub activity feed: recent commits here, stars and forks on each case study, a contribution strip on the Player Profile.
- Jul 15, 2026
Instrumented the arcade
Wired up Vercel Web Analytics and Speed Insights — the site was flying blind until now.
- Jul 15, 2026
An accessibility pass
Added a skip-to-content link, made the Contact success message announce itself to screen readers, and fixed a contrast failure on two toast panels found by actually measuring the colors, not eyeballing them.
- Jul 14, 2026
A real bonus level
Added a first-visit boot sequence, and gave the Konami code an actual payoff — a Bonus Level toast, not just a recolored rail.
- Jul 14, 2026
Case studies you can poke at
Every shipped project now embeds the live app directly in its case study, backed by real screenshots of the real thing — proof instead of a promise.
- Jul 14, 2026
Brand identity, for real this time
Shipped the Chu logo, the amber Level Select palette, a proper OG card, and named Level 02 the CHU Token Staking Protocol.
- Jul 12, 2026
Connected the ecosystem
Level 02 and Level 03 stopped being standalone demos — CHU, the staking token, became the shared currency between them.
- Jul 12, 2026
Launched the arcade
Hero, Level Select, Player Profile, Level Complete — the four-level scroll went live.