Hello, world — and what this notebook is for
An opening note on why I'm starting yet another blog, and the small ground rules I'm setting for it.
I've started a blog roughly four times. Each time the pattern was the same: pick the framework, agonize over the typography, ship a single “Hello, world” post, and never come back. So this time, I'm setting two ground rules before I have the chance to overthink it.
The two rules
- Publish before it's done. The post you're reading is not finished. None of them will be. Writing in public is the point.
- Write for one specific person. Usually that person is me, three months ago, trying to figure out the same thing I just figured out.
That's it. Everything else — taxonomy, comments, newsletter, the “personal brand” — is allowed to remain undecided.
What you'll find here
I expect this place to drift between three rough territories:
- Code I keep rewriting. TypeScript, design systems, the parts of frontend that feel like furniture making.
- Tools and small experiments. Things I built in a weekend that I want to remember.
- Quieter ideas. Notes on attention, taste, and why some software ages better than others.
A small example, because every first post needs one
Here's the helper I used to render this very page's reading time:
import readingTime from "reading-time";
export function getReadingTime(content: string) {
const stats = readingTime(content);
return {
text: stats.text, // e.g. "4 min read"
minutes: stats.minutes, // 3.6
words: stats.words, // 720
};
}Nothing exotic. But it's a tiny instance of the rule I want to live by here: prefer small, legible code over clever abstractions. I'll come back to that in a future post.
Until then — thanks for reading. See you in the margins.