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 TypeScript
BR-03 · TypeScript · Beginner
Your First Typed File
Turn a JavaScript file into a typed one, and read the errors instead of silencing them.
Annotations · Inference · Errors · Strictness
Read the briefHide the brief
Annotations, inference, and the first time the compiler is right and you are not. You finish comfortable leaving a file stricter than you found it.
- Add types to a small module without any
- Read a compiler error back to the real mismatch
- Let inference work where an annotation adds nothing
$9.99
3 weeks · 3 calls
BR-03 · TypeScript · Beginner
Unions and Narrowing
Model a value that can be more than one shape, and prove which one you have.
Unions · Narrowing · Discriminants · Control flow
Read the briefHide the brief
Unions, discriminants, and the checks that narrow them. You will stop using a cast to tell the compiler to trust you.
- Model a value as a union instead of optional fields
- Narrow a union with a check the compiler believes
- Remove a cast that was hiding a real case
Before this: Your First Typed File
$14.90
4 weeks · 4 calls
BR-03 · TypeScript · Intermediate
Props as a Data Model
Design a component's props so the illegal combinations cannot be passed.
Props · Variants · Required · API design
Read the briefHide the brief
Required, optional, and the union of variants. You will look at a props type and see the product decisions inside it.
- Design props that reject an illegal combination
- Choose a variant union over a pile of booleans
- Name a callback's arguments so the caller cannot drift
Before this: Unions and Narrowing
$19.90
4 weeks · 4 calls
BR-03 · TypeScript · Beginner
Types for Component State
Type the states a screen moves through: empty, loading, ready, failed.
State · Unions · Loading · Screens
Read the briefHide the brief
A beginner-length course on a single idea. The state object stops being a bag of flags that can all be true at once.
- Model loading, empty, ready, and failed as a union
- Render each state without checking three booleans
- Make the impossible combination a type error
Before this: Unions and Narrowing
$29.90
5 weeks · 5 calls
BR-03 · TypeScript · Intermediate
Generics You Can Read
Type parameters for the helpers you actually write, and the times a generic is worse.
Generics · Constraints · Inference · Overloads
Read the briefHide the brief
Constraints, defaults, and inference sites, taught by removing duplication. Equal time goes to the overload that would have been clearer.
- Write a generic helper another person can call
- Add a constraint when the body needs one
- Prefer an overload when a generic is harder to read
Before this: Props as a Data Model
$39.90
5 weeks · 5 calls
BR-03 · TypeScript · Intermediate
Discriminated Unions in UI
One field that says which variant you are in, used all the way through the render.
Discriminated unions · Exhaustiveness · UI state · Switch
Read the briefHide the brief
Menus, toasts, and form steps, each modeled so the render function is a switch the compiler can exhaust.
- Model a component as an exhaustive switch
- Add a variant without leaving a silent fall-through
- Keep the discriminant next to the data it describes
Before this: Types for Component State
$49.90
6 weeks · 6 calls
BR-03 · TypeScript · Advanced
Typing the Boundary
unknown at the edge, and a parse step before the UI ever sees the data.
unknown · Parsing · Boundaries · Validation
Read the briefHide the brief
Advanced. JSON, query strings, and form payloads arrive untyped no matter what your interfaces say. You will validate them and type the result, not the wish.
- Accept external data as unknown
- Parse it into a type the UI can trust
- Show a failure when the payload is not the shape you hoped
Before this: Unions and Narrowing
$59.90
6 weeks · 6 calls
BR-03 · TypeScript · Intermediate
Utility Types in Anger
Pick, Omit, Partial, and the mapped types behind them, used on a real props object.
Utility types · Mapped types · Pick · Partial
Read the briefHide the brief
You will derive a type instead of copying it, and you will notice when the utility made the API harder to read.
- Derive a props variant with a utility type
- Read a mapped type and say what it produces
- Inline a utility when the name is hiding the shape
Before this: Generics You Can Read
$69.90
7 weeks · 7 calls
BR-03 · TypeScript · Intermediate
Context and Component Types
Type a provider, a consumer, and the children slot without an any escape hatch.
Context · Children · Component types · Providers
Read the briefHide the brief
ComponentType, props of a child, and a context value that cannot be undefined by accident.
- Type a context value so missing provider is a bug
- Describe children more tightly than ReactNode when you can
- Pass a component as a prop without losing its props
Before this: Props as a Data Model
$79.90
8 weeks · 8 calls
BR-03 · TypeScript · Advanced
Asserting Types, Not Casting
Tests for your types, so a refactor cannot quietly loosen them.
Assertions · Tests · Predicates · Strictness
Read the briefHide the brief
Advanced. ExpectType-style checks and assertion functions. You will catch a type that got wider before a user catches the bug.
- Write a type-level assertion that fails the build
- Use a predicate to narrow, not a cast
- Notice when a public type got wider
Before this: Typing the Boundary
$89.90
8 weeks · 8 calls
BR-03 · TypeScript · Intermediate
Forms with a Schema
One schema that types the values, the errors, and the payload you send.
Forms · Schemas · Errors · Payloads
Read the briefHide the brief
You will stop maintaining a type, a validator, and a default object as three drifting copies of the same form.
- Derive the value type from one schema
- Type field errors so a missing key is a compile error
- Submit a payload that matches the schema
Before this: Typing the Boundary
$99.90
9 weeks · 9 calls
BR-03 · TypeScript · Intermediate
React Types Without any
Events, refs, and generic components, typed without reaching for any.
React · Events · Refs · Generics
Read the briefHide the brief
The React types people silence. You will type a change handler, a ref to a DOM node, and a list component that keeps the item type.
- Type an event handler without any
- Type a ref to the node you actually have
- Write a generic list that preserves the item type
Before this: Props as a Data Model
$109.90
10 weeks · 10 calls
BR-03 · TypeScript · Intermediate
Module Boundaries
What a package exports, and the internal types that should stay internal.
Exports · Public API · Packages · Encapsulation
Read the briefHide the brief
Public types, path exports, and a barrel file that accidentally became your API. You will draw a line and keep it.
- Mark a type as public or internal on purpose
- Stop a barrel file from widening your API
- Change an internal type without a downstream break
Before this: Utility Types in Anger
$119.90
11 weeks · 11 calls
BR-03 · TypeScript · Intermediate
A Typed Design System
Tokens, variants, and component props that agree with each other.
Design system · Variants · Tokens · Props
Read the briefHide the brief
A button, a field, and a stack, with variant names that exist in exactly one place. Twelve weeks of making the system harder to misuse.
- Type a variant so a typo will not compile
- Share a token type between CSS and props
- Add a component without inventing a second naming scheme
Before this: React Types Without any
$129.90
12 weeks · 12 calls
BR-03 · TypeScript · Advanced
Capstone: Types that Hold
Take a loose UI module and make the illegal states unrepresentable.
Capstone · Unions · Boundaries · Refactor
Read the briefHide the brief
You bring a real file, or we give you one. The capstone is the diff: fewer casts, a parsed boundary, and a state union the render trusts.
- Replace a bag of flags with a state union
- Parse data at the boundary instead of casting it
- Leave a module another person can extend without any
Before this: Typing the Boundary
$147.90
12 weeks · 12 calls