Catalog
Ninety courses. Six benches.
Interface, JavaScript, TypeScript, React, and delivery are the frontend work. Practice is how you scope it, price it, and run it inside an LLC. Every course includes one call a week. Nothing is charged until after that first conversation.
90 courses · 6 benches
15 courses in React
BR-04 · React · Beginner
Components, from Scratch
JSX, props, and a component that renders one thing you can point at.
JSX · Props · Components · Rendering
Read the briefHide the brief
No state yet. You will build small components, pass data in, and see a render as a function of that data.
- Write a component as a function of its props
- Compose two components without copying markup
- Read a JSX tree and say what the DOM will be
$9.99
3 weeks · 3 calls
BR-04 · React · Beginner
State Is a Snapshot
useState, and the habit of treating state as the current value rather than a box you mutate.
useState · Snapshots · Updates · Derived state
Read the briefHide the brief
Updates, batching, and the bug where you read state and expect it to have changed already. You will stop storing what you can derive.
- Update state without mutating the previous value
- Derive a value during render instead of storing it
- Explain why a state read can be stale
Before this: Components, from Scratch
$14.90
4 weeks · 4 calls
BR-04 · React · Intermediate
Rendering, and Why It Happened
What causes a render, and how to tell a useful one from an accidental one.
Rendering · Props · Parent state · Commits
Read the briefHide the brief
Parent renders, state updates, and a component that rendered because its parent did. You will look at the commit rather than guessing.
- Say why a component rendered
- Lift state only as far as the components that need it
- Spot a render caused by a new object identity
Before this: State Is a Snapshot
$19.90
4 weeks · 4 calls
BR-04 · React · Beginner
Lists, Keys, and Identity
Keys that match identity, so a list does not reuse the wrong row's state.
Lists · Keys · Identity · State
Read the briefHide the brief
A beginner course on one sharp edge. Index keys, stable ids, and the input that kept another row's text.
- Choose a key that matches the item's identity
- Explain what breaks when the key is the index
- Reset a row's state when the item actually changes
Before this: State Is a Snapshot
$29.90
5 weeks · 5 calls
BR-04 · React · Intermediate
Events and Controlled Inputs
Clicks and fields, with state that is the source of truth for the input.
Events · Inputs · Controlled · Forms
Read the briefHide the brief
Controlled and uncontrolled, and the form that fights its user because both are trying to own the value.
- Handle an event without reading the DOM afterwards
- Make an input controlled for a reason
- Leave an input uncontrolled when state would add nothing
Before this: State Is a Snapshot
$39.90
5 weeks · 5 calls
BR-04 · React · Intermediate
Composition over Flags
Children, slots, and the component that grew a boolean for every special case.
Composition · Children · Slots · API
Read the briefHide the brief
You will take a component full of flags and split it into pieces that compose. The API gets smaller on purpose.
- Replace a pile of boolean props with composition
- Pass a slot without cloning an element
- Keep a component's public API smaller than its internals
Before this: Components, from Scratch
$49.90
6 weeks · 6 calls
BR-04 · React · Advanced
Server and Client UI
Which part of a screen can render on the server, and which part needs the client.
Server components · Client · Boundaries · Data
Read the briefHide the brief
Advanced. Server components, client boundaries, and the fetch that does not belong in an effect. You will draw the line before you write the file.
- Put a client boundary at the smallest component that needs it
- Fetch on the server when the data is ready there
- Explain what a client component ships to the browser
Before this: Rendering, and Why It Happened
$59.90
6 weeks · 6 calls
BR-04 · React · Intermediate
Fetching for a Screen
Load data for a view, and render loading and failure as part of the UI.
Data · Loading · Errors · Race conditions
Read the briefHide the brief
Where the request lives, what happens on retry, and the race when the person navigates mid-flight.
- Render loading, error, and ready as separate UI
- Ignore a response that belongs to an old screen
- Retry without duplicating the request logic
Before this: Events and Controlled Inputs
$69.90
7 weeks · 7 calls
BR-04 · React · Intermediate
Sharing State on Purpose
Context, and the alternatives, so a provider is a decision rather than a reflex.
Context · Lifting state · Providers · Colocation
Read the briefHide the brief
Lifting state, composition, and context for something that is truly ambient. You will remove a provider that did not need to exist.
- Lift state to the nearest shared parent
- Use context for a value that is genuinely ambient
- Remove a provider that was hiding a prop
Before this: Composition over Flags
$79.90
8 weeks · 8 calls
BR-04 · React · Advanced
Hooks with One Job
Extract a hook when it has one reason to exist, and a test that says what that is.
Hooks · Extraction · Dependencies · Testing
Read the briefHide the brief
Advanced. Naming, dependencies, and the hook that became a second component with nowhere to put markup. You will put the logic back if the hook made it worse.
- Extract a hook that does one thing
- Name its inputs so the call site stays honest
- Test the behavior without mounting a whole screen
Before this: Sharing State on Purpose
$89.90
8 weeks · 8 calls
BR-04 · React · Intermediate
Testing React like a User
Render, click, and assert. Tests that do not know which hook you used.
Testing Library · Roles · Events · Async
Read the briefHide the brief
Queries by role, user events, and the async UI. You will change the implementation and watch the test stay green for the right reason.
- Query a component the way a person finds it
- Assert on what changed on screen
- Refactor a component without rewriting its test
Before this: Events and Controlled Inputs
$99.90
9 weeks · 9 calls
BR-04 · React · Intermediate
When Not to Memo
memo, useMemo, and useCallback, mostly so you can take them out.
memo · useMemo · Rendering · Measurement
Read the briefHide the brief
Measure a slow render, then decide. You will remove memoization that was copying props and calling it performance.
- Find a render that is actually expensive
- Memoize a value only when identity matters
- Delete a memo that was not earning its place
Before this: Rendering, and Why It Happened
$109.90
10 weeks · 10 calls
BR-04 · React · Intermediate
Accessible React
Focus, dialogs, and names, in a component tree that re-renders.
Accessibility · Focus · Dialogs · Names
Read the briefHide the brief
A dialog that traps and restores focus, a button that is a button, and a live region that announces the change you just rendered.
- Move focus when a dialog opens and restore it on close
- Expose a name on a control you rendered
- Announce a status change without stealing focus
Before this: Composition over Flags
$119.90
11 weeks · 11 calls
BR-04 · React · Intermediate
A Small Design System
A handful of React components that share tokens, variants, and behavior.
Design system · Variants · Tokens · Components
Read the briefHide the brief
Button, field, stack, and dialog, documented by their props. Twelve weeks of making the next screen cheaper to build than the last.
- Build a component API another person can use without asking
- Share tokens between components
- Add a variant without a one-off class name
Before this: Composition over Flags
$129.90
12 weeks · 12 calls
BR-04 · React · Advanced
Capstone: A React Product
A multi-screen React interface: state, data, tests, and a dialog that works.
Capstone · State · Testing · Accessibility
Read the briefHide the brief
You choose the product. We hold the line on where state lives, what is tested, and whether a keyboard user can finish the main task.
- Ship a multi-screen React interface
- Cover the main task with tests a user could recognize
- Explain where each piece of state lives
Before this: Fetching for a Screen
$147.90
12 weeks · 12 calls