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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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