Every web framework answers one question: which of your functions should run for this request. Everything else is in service of that. This course builds one from nothing, in thirty-seven steps. Each step is one commit in a public repository and one lecture, so checking out step-07 gives you the framework exactly as it stood at lecture 7. The difference between two tags is one lesson, and every step runs.
We start with http.createServer and no framework at all: routing by comparing strings, every response setting its own status and content length by hand. Then a route table, dynamic segments, a response object, request bodies with a size limit, a middleware chain, static files, mountable routers and view engines. By lecture 28 there is a working todo application built on it.
Then the part most courses skip. We benchmark it against Express and find that it is slower, measurably so. The last nine lectures are about why: profiling, an accidentally quadratic route matcher, allocation in the hot path, and a port to uWebSockets.js, where the request object dies the moment your handler returns.






