Learn / Web development

Read it.
Then write it yourself.

Seventeen courses, from the first HTML tag to a deployed Next.js app — with the database, the git history, the HTTP, the attacks, the tests and the milliseconds underneath it. Every lesson ends with an editor that runs in this page and checks your work.

17Courses
340Lessons
≈ 68hOf reading

The courses

Seventeen subjects,
in the order they depend on each other.

Start at HTML ↗
01 · Foundation

HTML

The document, the elements and the meaning behind them. Everything else on the web is layered on top of this.

ElementsMediaFormsSemanticsAccessibility
22 lessons · 22 ready
02 · Foundation

CSS

Selectors, the box model, layout with flexbox and grid, and motion that has a reason to move.

CascadeBox modelFlexboxGridResponsiveMotion
26 lessons · 26 ready
03 · Core

JavaScript

Values, functions, the DOM, events and asynchronous work — written so you can debug it later.

TypesFunctionsDOMEventsAsyncModules
32 lessons · 32 ready
04 · Framework

React

Components, state and effects — the model behind most interfaces built today.

JSXPropsStateEffectsHooksPatterns
20 lessons · 20 ready
05 · Core

TypeScript

Types that describe what your code already does — and a compiler that reads them before anyone else has to.

TypesUnionsGenericsUtility typesNarrowingPractice
14 lessons · 14 ready
06 · Server

Node.js

The runtime, modules, packages, the file system and an HTTP API you can call.

RuntimenpmHTTPExpressRESTDatabases
18 lessons · 18 ready
07 · Framework

Next.js

Routing from the file system, server and client components, data fetching and deployment.

App RouterServer componentsDataActionsDeploy
16 lessons · 16 ready
08 · Data

SQL

The language every database answers to. One door factory, twenty-two lessons, and a real SQLite engine running your queries in the page.

QueriesJoinsAggregatesSchemaIndexesTransactions
22 lessons · 22 ready
09 · Workflow

Git

The tool every team uses and almost nobody is taught. A terminal in the page, and a git whose object ids are the real ones.

CommitsBranchesMergingRebaseRemotesUndo
16 lessons · 16 ready
10 · Foundation

The Web

DNS, TCP, TLS, HTTP, caching, cookies, CORS and the rendering pipeline — the layer every framework sits on and nobody teaches.

HTTPCachingCookiesCORSRenderingPerformance
18 lessons · 18 ready
11 · Craft

Security

The attacks that actually happen to ordinary web applications, and the defences that stop them — written as code you run, not as a list of warnings.

XSSInjectionCSRFAuthSecretsSupply chain
16 lessons · 16 ready
12 · Craft

Accessibility

Semantics, names, keyboard, focus, contrast and ARIA — checked against the browser’s own accessibility tree, not against a linter’s opinion.

SemanticsNamesKeyboardARIAContrastTesting
16 lessons · 16 ready
13 · Craft

Testing

Write the runner, then use it: assertions, doubles, fake time, async, the DOM, flakiness and what coverage will never tell you.

UnitDoublesAsyncDOMFlakyCI
16 lessons · 16 ready
14 · Craft

Performance

The metrics that matter, measured rather than guessed — and the handful of changes that move them, from the hero image to the query behind it.

Core Web VitalsMeasuringImagesJavaScriptBudgets
16 lessons · 16 ready
15 · Craft

Python

Real CPython, running in this page — from the first print to generators, dataclasses and decorators, with every exercise executed by the interpreter itself.

SyntaxData structuresClassesGeneratorsStandard library
24 lessons · 24 ready
16 · Craft

Algorithms

Data structures and algorithms with the complexity measured rather than asserted: every lab counts its own operations and the page names the growth rate.

ComplexitySortingSearchingTreesGraphs
24 lessons · 24 ready
17 · Craft

AI engineering

The parts of an LLM application that are engineering rather than magic: tokens, sampling, retrieval, tools, evaluation and cost — all of them computed and checked in the page.

TokensPromptingRAGToolsEvaluation
24 lessons · 24 ready

Build

A lesson teaches one thing.
A build uses all of them.

All six projects ↗
01 · HTML

A product page, marked up properly

One page, written as a document rather than a pile of divs: landmarks, a real table, a form anyone can fill in, and the metadata that decides how it is shared.

DocumentSemanticsFormsAccessibilityMetadata
5 steps · ≈ 55 min
02 · CSS

Style it, from tokens to motion

Take the same page and give it a design system: tokens, a layout that holds at any width, a component with variants, dark mode, and motion that has a reason.

TokensLayoutResponsiveDark modeMotion
5 steps · ≈ 60 min
03 · JavaScript

A catalogue that filters, sorts and remembers

The page becomes an application: render from data, filter and sort as the user types, validate a form, keep the state in the URL and the browser, and handle every failure.

DOMEventsStateStorageAsync
5 steps · ≈ 70 min
04 · React

The same catalogue, in React

Rebuild it with components and state: props down, events up, a custom hook for the logic, a form that reports its errors, and a list that does not rebuild itself for nothing.

ComponentsStateEffectsHooksForms
5 steps · ≈ 70 min
05 · Node.js

The API behind it

A REST API with the parts that are usually skipped: validation, the right status codes, one error shape, a session, and a health check that tells the truth.

ExpressRESTValidationAuthErrors
5 steps · ≈ 65 min
06 · Next.js

Put it together and ship it

The whole thing as one Next.js application: routes from folders, server components that fetch, a server action that writes, metadata that shares well, and a build you could deploy.

App RouterServer componentsActionsMetadataDeploy
5 steps · ≈ 65 min

How a lesson works

Written, then practised.

01 · Read

The explanation

Every part of the subject in plain English, with the code beside it and a note where the trap is.

02 · Practice

The editor

A real editor and a live preview in the page. Write the code, run it, and a set of checks tells you exactly what is still missing.

03 · Check

The questions

Three questions at the end, each with the reason the answer is what it is. Your progress is kept in this browser.

Paths

If you do not know where to start.

Path 01

Front end, from nothing

Start at HTML, take CSS next, then JavaScript. By the end you can build and style a page that responds to what someone does on it.

80 lessons
Path 02

React developer

You already write JavaScript. Learn the component model, the type system every team expects with it, and the framework that puts both on a server.

50 lessons
Path 03

Typed JavaScript

You write JavaScript already and the job advert says TypeScript. Fourteen lessons, with the real compiler checking your work in the page.

14 lessons
Path 04

Full stack

Everything in order: structure, style, behaviour, components, a server, and the framework that joins them.

170 lessons
Path 05

Under the hood

The layer every framework sits on: what a request is, what the browser does with the answer, and why a page is slow.

18 lessons
Path 06

Fast, and right

Performance and testing: the two courses that decide whether what you built survives contact with real users and real devices.

32 lessons
Path 07

Shipping with confidence

Tests that prove it works and a review that proves it is safe — the two habits that make a codebase survivable.

32 lessons
Path 08

Doing it properly

The two courses that separate a page that works from a page that works for everyone, on a bad connection, on somebody else’s device.

34 lessons
Path 09

Defensive web development

How the web actually works, and how it is attacked — the two courses that make the difference between code that runs and code you can put on the internet.

34 lessons
Path 010

The tools around the code

Git the way a team actually uses it, and the database behind the app — the two subjects every job assumes you already have.

38 lessons
Path 011

The data side

The half of the job that is not the screen: the language every database answers to, and how an application talks to one without being robbed.

22 lessons