Blog
Notes from the build
Long pieces on the web platform, engineering and machine learning. Plus The Wire, short briefs on the news as it lands.
Machine learning for web developers: the only mental model you need
You do not need calculus to work with models. You need one idea — that a model is a function you fit instead of write — and the rest follows from things you already know.
What a small product actually costs to run
The hosting bill is the cheapest part and everyone budgets for it anyway. Here is the whole list, including the lines that only appear after you have customers.
How :has() changed the way I write components
The parent selector we asked for since 2003 has been shipping for years now. It does not just save a class name — it moves state out of JavaScript entirely.
The N+1 you cannot see
Everyone knows to eager load. The queries that actually take sites down are the ones hiding in an accessor, a Blade partial, or a policy — and there is a one-line switch that finds all of them.
What an embedding actually is
An embedding is a list of numbers that puts similar things near each other. That one sentence is enough to build search, recommendations and retrieval — here is how.
Container queries killed my breakpoints
Media queries ask how big the window is. That was never the question. Components care about the space they are given, and now they can ask.
Tokens, context windows, and why your bill is what it is
The unit of billing for language models is not the request or the word. Once you understand tokens and how a context window fills up, the invoice stops being a surprise.
Queues are not optional
If your request handler calls somebody else’s API, you have already built a distributed system. The queue is how you stop their bad day from becoming your bad day.
RAG is just search with extra steps
Retrieval-augmented generation gets written up like an architecture. It is a search query, a string concatenation and one API call — and the search query is the part that decides whether it works.