tutorials
The reading behind the practice.
Written walkthroughs of the ideas the exercises drill — with fill-in-the-blank checkpoints inline, graded as you read. Each one ends where reading should: at the exercises that make it yours.
36 walkthroughs · 3 tracks · checkpoints graded in-page, free
The last three of each language — reviewing generated code, the three-message budget, and buying context — are the same craft, written against that language's actual defects.
start here
React
the exercises →- 01React FundamentalsJSX compiles to function calls, components are functions that return them, and props are read-only — the three ideas everything else in React sits on.beginner · 8 min
- 02Hooks in DepthuseState batches more aggressively than people expect, most useEffect calls solve a problem render could handle directly, and useContext re-renders every consumer on every change.intermediate · 8 min
- 03State ManagementuseReducer, Context, and lifting state up cover nearly everything client state needs — the real argument for a state library is usually about caching server data, not about React running out of room.intermediate · 7 min
- 04Advanced Patternsmemo, useMemo, compound components, code splitting, and error boundaries — what each one actually buys you, and the specific case where reaching for it makes things worse instead of faster.advanced · 8 min
- 05Reviewing Code You Did Not WriteGenerated code fails where the spec was silent, and its tests inherit the same blind spots — review the inputs a passing suite never used, not the style of the code.intermediate · 4 min
- 06The Three-Message BudgetCap the conversation at three messages and each one gets a job: buy the whole shape, correct one reading you actually verified, and know when to stop steering and edit the code yourself.intermediate · 3 min
- 07Context Is a PurchaseA model missing a local fact does not fail — it invents, fluently. The skill is naming the fact you need, buying the cheapest source that states it, and refusing the sources that merely look relevant.intermediate · 3 min
TypeScript
the exercises →- 01Getting Started with TypeScriptWhat to annotate versus what to let TypeScript infer, why const narrows to a literal type, and why a literal union usually beats an enum.beginner · 7 min
- 02Understanding TypeScript GenericsHow a type parameter differs from any, what a constraint actually promises, and when to let inference pick the type instead of writing it yourself.intermediate · 6 min
- 03Async/Await Patterns in TypeScriptPromises, async/await, and structured error handling — and why Promise.all doesn't cancel the requests it stops waiting for.intermediate · 6 min
- 04Type Narrowing in TypeScriptHow typeof, instanceof, in, discriminated unions, and assertion functions each narrow a type, and why narrowing can silently evaporate across a function call.intermediate · 7 min
- 05Mastering TypeScript Utility TypesThe built-in utility types are ordinary generic aliases you can read and rebuild yourself — knowing which one to reach for beats memorizing the list.advanced · 6 min
- 06Working with unknown safelyUse unknown at the boundaries of your program, narrow it deliberately, and understand why a single any spreads further than you expect.intermediate · 7 min
- 07Reviewing Code You Did Not WriteGenerated code fails where the spec was silent, and its tests inherit the same blind spots — review the inputs a passing suite never used, not the style of the code.intermediate · 5 min
- 08The Three-Message BudgetCap the conversation at three messages and each one gets a job: buy the whole shape, correct one reading you actually verified, and know when to stop steering and edit the code yourself.intermediate · 5 min
- 09Context Is a PurchaseA model missing a local fact does not fail — it invents, fluently. The skill is naming the fact you need, buying the cheapest source that states it, and refusing the sources that merely look relevant.intermediate · 4 min
- 10Two Pointers and the WindowThe two patterns that answer most array questions — walking a sorted array from both ends, and keeping an invariant about a stretch of it — plus the prefix sum that makes range questions constant time.intermediate · 5 min
- 11Binary Search Is an InvariantBinary search is not about finding a thing fast — it is about maintaining a sentence that is true of a range. Get the sentence right and the loop bounds, the midpoint moves, and the off-by-ones decide themselves.intermediate · 5 min
- 12The Stack That RemembersA stack is the structure for work you cannot finish yet — unclosed brackets, days still waiting for warmth — and a hash map is the structure for places you have already been. Most linear-time tricks are one of these two.intermediate · 5 min
- 13Breadth-First for DistanceDFS finds whether something is reachable; only BFS finds it in fewest steps, because it finishes everything at distance d before touching anything at distance d+1. The grid, the tree row, and the shortest path are one algorithm.intermediate · 5 min
- 14Backtracking: Three BeatsChoose, explore, unchoose — the skeleton that generates subsets, permutations and combinations. The unchoose is not cleanup, it is the algorithm, and the loop's start index is the deduplication machine.advanced · 5 min
- 15The Recurrence FirstDynamic programming is one sentence about a prefix — best ending here, best through here — written before any code. Memoization is that sentence plus a cache, and greedy is the heuristic that fails exactly when a locally-bad choice is globally necessary.advanced · 5 min
- 16The K Smallest ThingsTop-k questions are not sorting questions — a heap of size k holds the current podium and exposes exactly the kth largest, in logarithmic time per arrival, without ever sorting the stream.advanced · 5 min
- 17Words as PathsA trie stores words as paths from the root, one character per edge — autocomplete, prefix lookup and wildcard search all become walks. The one flag that matters says where words end, because every word is also the prefix of words that do not exist.advanced · 5 min
- 18Caches, Limits, BreakersEvery system design interview bottoms out in five small machines — an LRU, a TTL, a token bucket, a debouncer, a circuit breaker — each one an invariant you can hold in your head, with the clock injected and every decision made lazily on read.advanced · 5 min
- 19Linked Lists Without Losing the RestA linked list is pointers you wire yourself — the one rule is never lose the rest of it. Reversal with three variables, the tortoise and the hare, and the dummy head that deletes the first case.intermediate · 5 min
- 20Tables With Two DimensionsWhen the recurrence's sentence mentions prefixes of two things at once, the table grows a second dimension — edit distance, longest common subsequence, knapsack. Plus the state that indexes by where a run can end, not where it started.advanced · 6 min
- 21The Wire's ContractHTTP semantics are not trivia — the status century decides who retries, idempotency decides what may be re-sent, and a retry loop is three small decisions: how many attempts, how long to wait, and whose error survives.intermediate · 6 min
Vue
the exercises →- 01Vue Component PatternsProps, emits, v-model, and slots as the real contract between a Vue component and everything that calls it — plus why defineProps and defineEmits are not functions you can pass around.beginner · 5 min
- 02Vue Reactivity Deep DiveHow Proxy-based dependency tracking actually decides what to re-run, why ref beats reactive as the default, and the synchronous-tracking rule that breaks watchEffect after an await.intermediate · 6 min
- 03State Management with PiniaWhat actually belongs in a Pinia store instead of component state, why setup stores are the better default, and the reactivity trap that storeToRefs exists specifically to avoid.intermediate · 5 min
- 04Building ComposablesWhen a function actually earns the use prefix, the MaybeRefOrGetter/toValue contract that makes one reusable, and why calling a composable after an await silently breaks its lifecycle hooks.advanced · 5 min
- 05Reviewing Code You Did Not WriteGenerated code fails where the spec was silent, and its tests inherit the same blind spots — review the inputs a passing suite never used, not the style of the code.intermediate · 5 min
- 06The Three-Message BudgetCap the conversation at three messages and each one gets a job: buy the whole shape, correct one reading you actually verified, and know when to stop steering and edit the code yourself.intermediate · 3 min
- 07Context Is a PurchaseA model missing a local fact does not fail — it invents, fluently. The skill is naming the fact you need, buying the cheapest source that states it, and refusing the sources that merely look relevant.intermediate · 3 min