Inkwell
Back to writing
2 min read

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

  1. Publish before it's done. The post you're reading is not finished. None of them will be. Writing in public is the point.
  2. 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:

lib/utils.ts
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.