One course was a launch; two is a catalog. The second free course on this site is live today: Build a Chess Game with Rust and WebAssembly — thirteen lessons, a bonus fourteenth, no signup, no paywall.
What you’re actually learning
The chess is the vehicle. The subject is the pipeline every Rust-curious
web developer eventually needs: how systems code actually gets into a
browser, and how you test it once it’s there. You build a Rust crate that
compiles to two targets at once (WebAssembly for the browser, native for
cargo test), export it across a deliberately strings-only wasm-bindgen
boundary, wire it into Vite with a three-part alias trick, and put a single
Lit web component in front of it. No backend, no framework, no build magic
you didn’t configure yourself.
The finish matters too. The last core lesson lands the entire polish layer as one readable diff: pieces that glide via the View Transitions API, dark mode derived from two hue variables, container queries, a glass help drawer. Fifty-four tests stand guard while it happens — nineteen native Rust tests, twenty-eight component tests that run the real compiled wasm in happy-dom, and seven Playwright flows in actual Chrome.
The opponent is the honest part
The computer player this game ships with is about twenty lines of Rust, and lesson 8 refuses to pretend otherwise. It picks pseudo-randomly with a bias toward captures, using a hash dressed up as a random number generator, and it will cheerfully trade its queen for a pawn. The lesson prices exactly what those twenty lines buy and why the design dodges the wasm-randomness problem entirely.
Then the bonus lesson builds the real thing: a material evaluation, alpha-beta search, and difficulty implemented as two knobs you can point to — search depth and score noise. You end the course able to explain what “difficulty level” concretely means in an engine, because you built both ends of the spectrum.
A repo you can diff your way through
Like course #1, the companion repo carries a git tag per lesson, so every checkpoint diffs cleanly against your own work and any lesson’s answer key is one compare link away. The bonus engine lives on its own tag, so the core history stays exactly what the course builds. Lessons follow the same contract as before: a Build it table, an objective Done when check, the answer key as a diff, and one optional challenge each.
Start here
The course lives at mikezupper.com/courses, free start to finish. Lesson 1 has you playing the finished game and serving your own first page inside the hour; by lesson 5, Rust is printing a chessboard into your browser console.
If you take it, tell me how it goes — especially if a Done-when check lies to you. Find me on X @mikezupper or email [email protected].
