Your blog does not need 1.2 MB of JavaScript
Most publishing stacks ship a framework, a hydration pass and a font stack to render what is, functionally, a text document. Here is what happens when you delete all three.
Most publishing stacks ship a framework, a hydration pass and a font stack to render what is, functionally, a text document. Here is what happens when you delete all three.
Fine-grained invalidation is a graph problem you will lose. A generation counter is a single integer that cannot be subtly wrong — and for a blog, it costs you almost nothing.
A Go binary with embedded templates, embedded assets and an embedded migration runner is the smallest deployable web app that is still a real web app. Here is the shape of it.
Before you add Elasticsearch to a blog with four hundred posts, try a generated tsvector, a GIN index and websearch_to_tsquery. It handles phrase queries, ranking and stemming out of the box.
LCP, CLS and INP are not abstract scores — each one maps to a specific resource decision. Give every decision a number and the score takes care of itself.