About FastBlog
A small independent blog about building fast, lightweight things for the web — and an attempt to practise what it argues for.
FastBlog started as a folder of notes. I kept having the same conversation — with colleagues, in code review, occasionally with myself at eleven at night — about why a page that contains nine hundred words of text needs two megabytes of transfer to display them. The notes turned into arguments, the arguments got long enough to need headings, and eventually it was easier to publish them than to repeat them.
The subject is narrow on purpose: the cost of the things we put on a page, and how to tell whether a change actually made anything better. That covers bytes on the wire, requests, render-blocking resources, fonts, images, and the architectural decisions that quietly determine all four. It does not cover framework release notes, and it never will.
What I believe, roughly
Performance is not a phase of a project, it is a property of the decisions you already made. By the time someone is asked to "optimise the site", the expensive choices are usually two years old and load-bearing. The cheapest performance work happens at the point where you pick an approach, and it mostly looks like declining to add something.
I also think the field over-indexes on scores. A number out of a hundred is a fine regression alarm and a poor goal. The question that matters is how long a real person waited on a real device before they could read the thing they came for, and you can answer that with a phone and a stopwatch for free.
None of this is an argument for austerity. Rich, ambitious, interactive things are the reason the platform is interesting. It is an argument for knowing the price of what you are shipping, so that when you spend, you are spending deliberately.
About the site itself
It would be poor form to argue for lightweight pages on a heavyweight blog, so this one is built the way the posts describe. It is plain PHP with no dependencies at all: no Composer, no build step, no bundler, no npm. Posts live in a PHP array. The templates loop over that array. The header, nav, footer and stylesheet exist in exactly one file each and are included by every page.
The stylesheet is inlined into the document rather than linked, on the reasoning set out in Inline your CSS until it hurts. The type is a system font stack, so nothing is downloaded and nothing reflows when it arrives. There are no images, no icon font, no analytics, no cookies and no JavaScript — the small amount of interactivity here is links, which browsers have handled well for some time. The figure in the footer is measured on each request rather than estimated.
If something here is wrong, I would like to know. Corrections are more useful than agreement.
Colophon
- RuntimePHP 8.2.29
- Dependencies0 packages
- Build stepnone
- JavaScript0 bytes
- Web fonts0 — system stack
- Stylesheetinlined, one shared include
- Posts published5
- Words published2,959
- Tags in use7
- Most recent post18 June 2026