Course catalog
Browse our test-driven coding courses. Rebuild the tools you rely on or ship a production app, one passing test at a time.
9 courses
Build a fine-grained reactive UI framework from scratch in TypeScript — signals, effects, a glitch-free scheduler, a fine-grained renderer with keyed lists, components, context, and a real TodoMVC. Learn exactly how React and SolidJS work underneath.
Build a real query engine from scratch in Clojure — the kind that powers Datomic and DataScript. Start with a bag of facts, end with recursive rules, aggregates and negation. Queries are data; you write the engine that runs them.
Build a language model from scratch in pure Python — the exact path Andrej Karpathy uses to teach LLMs. Start by counting letter pairs, end by writing self-attention and generating text from your own tiny GPT. Only numpy, no PyTorch, no magic.
Type SELECT ... JOIN ... GROUP BY ... and a database answers in milliseconds — but how? Build the engine yourself, in TypeScript, from a SQL parser to a B+Tree to hash joins. Over 16 milestones, the black box becomes glass.
Rebuild the engine behind Claude Code in pure TypeScript — the tool-using agent loop that reads, writes, and edits files on its own. Start with a sandboxed workspace, end by wiring the real Anthropic API, with the LLM as a pluggable, testable dependency.
Write a tree-walking interpreter for your own dynamic language, Sprout, in Rust — scanner, parser, and evaluator — until it runs recursive Fibonacci and real closures. The best possible tour of Rust's enums, pattern matching, and ownership.
Rebuild the engine behind one of the world's most-used databases. In Go, grow a bare map into a real in-memory store — concurrent GET/SET, TTL expiry, atomic counters, LRU eviction, pub/sub, and atomic transactions.
Build a Google Docs-style collaborative text editor with real-time sync, CRDT-based conflict resolution, and presence indicators using TypeScript, React, and WebSocket.
await feels like magic — but a Promise is just a tiny state machine you can build yourself. Implement one from scratch: .then() chaining, microtask timing, Promise.all, and the gnarly thenable edge cases that pass the official Promise/A+ spec.