thinkdeep
DSA
System Design
Frontend
The Frontend Path
14 mental models across TypeScript and React
I
NOVICE
fundamentals
II
STUDIED
patterns
III
ADVANCED
mastery
PHASE 1
PHASE 2
PHASE 3
01
currently studying
JavaScript Refresh
Most React bugs start one layer lower than React itself: shared references, accidental coercion, silent mutation, and queue ordering mistakes.
Read the fundamentals →
032
Object Spread and Falsy Traps
033
Scheduling and Async Traps
050
Content Coverage Score
02
upcoming
State-Driven UI
State is a snapshot of what React rendered — the value you read in a handler belongs to the render where it was created, not the render where it runs.
Read the fundamentals →
024
Like Button
025
Star Rating
03
upcoming
Data Fetching & Async State + Conditional Types
Async state has four phases — and `infer` is the mechanism that extracts the resolved type from a promise so the hook can stay generic without losing the data shape.
Read the fundamentals →
027
Promise Adoption Traps
053
Implement Promise.all
034
useQuery
04
upcoming
Effects, Timers & Cleanup
An effect is a synchronization step with a setup and a required cleanup — the pair is the contract, not just the setup.
Read the fundamentals →
028
Traffic Light
026
Promise vs setTimeout
05
upcoming
Component Composition
A compound component separates state ownership from visual structure — the parent holds the state, the children decide how to display it.
Read the fundamentals →
029
Modal Dialog
031
Carousel Navigation
06
upcoming
Rich Interactive UI + CSS Layout
Multi-concern UI separates navigation state, loading state, and animation state as independent dimensions that layer, not merge.
Read the fundamentals →
035
Image Carousel
07
upcoming
Collection & State Shape Hooks + Generics
Writing `useMap<K, V>` is where generic constraints stop being abstract — the shape of the collection forces you to constrain `K` and design the return type around `V`.
Read the fundamentals →
036
useArray
037
useMap
051
Search and Filter Bar
08
upcoming
Timing & Scheduling Hooks
Debounce delays until quiet; throttle limits the rate — they solve different problems and are never interchangeable.
Read the fundamentals →
038
useDebounce
039
useCountdown
052
Debounced Search Hook
09
upcoming
DOM, Events & Browser API Hooks + Template Literal Types
DOM event names are template literal types in disguise — typing `useEventListener` so the handler narrows by event name is the concept made immediately concrete.
Read the fundamentals →
040
useEventListener
041
useHover
10
upcoming
Advanced Hook Patterns + Variance
The most complex hooks are small state machines — naming the valid states and their transitions is the design work; the code follows.
Read the fundamentals →
042
useMediatedState
043
useIdle
11
upcoming
Complex State & Reducers + Mapped Types
A reducer makes state transitions explicit and impossible states unrepresentable — the shape of valid actions is as important as the shape of state.
Read the fundamentals →
044
Undoable Counter
045
Tic-Tac-Toe
12
upcoming
Performance & Render Optimization
Memoization only helps when the input is stable — an unstable input makes it a tax, not a savings.
Read the fundamentals →
046
Selectable Cells
13
upcoming
Accessibility & Keyboard Interaction + Branded Types
ARIA roles describe what something is; keyboard handlers describe how to use it — both are required for a component to be accessible.
Read the fundamentals →
047
Modal Dialog II & III
14
upcoming
Full-Feature Applications
A full-feature component is a system design problem: what state is shared, what is local, and what triggers re-renders across the tree.
Read the fundamentals →
048
Users Database
049
Wordle