Fragments

Occasional notes on code that lasts, tools worth keeping, quiet mornings, and the small decisions that shape days.

Stay in the loop

Rare emails — usually when something actually worth saying appears. No list fatigue promised.

Code on screen

The half-life of excitement in side projects

Most side projects die around day 17. Not because the idea was bad, but because the initial dopamine wore off and the boring parts arrived: error handling, edge cases, deployment scripts, READMEs no one will read. I’ve started counting how many evenings I can push through after the “fun” phase ends. The number is usually 4–7. After that, it either becomes a real habit or quietly joins the archive folder. Lately I’ve been trying a different rule: if it survives two full weekends of maintenance rather than creation, it might be worth keeping alive.

Continue reading →
Notebook and coffee

Why I still carry a pocket notebook in 2026

Digital notes are searchable, syncable, taggable. And yet every important idea I’ve had in the last three years was first written in a 9×14 cm Moleskine with a Pilot G2 0.38. There’s something about the slowness — the friction — that forces clearer thinking. No autocorrect, no notifications, no temptation to check Slack mid-sentence. I’ve tried reMarkable, Supernote, iPad + pencil. They’re great tools, but they still feel like computers wearing paper costumes. The little black notebook just sits there, silent, waiting. And somehow that silence makes the words better.

Read more →

CSS :has() is quietly changing component libraries

For years we’ve been adding wrapper divs or data attributes just so we could style a parent based on child state. :has() removes most of that ceremony. Suddenly a card can know whether it contains an image, a badge can adjust padding if its parent has notifications, a navigation item can highlight when its submenu is open — all without JavaScript or extra markup. I’ve been slowly replacing our old BEM modifiers with :has() selectors in our internal library. The HTML got cleaner, the CSS got smaller, and weird bugs caused by forgotten modifiers disappeared. It’s not flashy like container queries, but it might end up being more transformative in day-to-day component work.

Continue reading →
Laptop workspace

Choosing boring technology in 2026 still feels rebellious

The new hotness this quarter is usually some combination of tRPC + Next.js App Router + Drizzle + shadcn/ui + Tailwind + Vercel. It’s fast to spin up, looks modern, gets you likes on Twitter. But six months later you’re fighting schema migrations, fighting hydration mismatches, fighting someone’s experimental RSC feature that broke SSR. Meanwhile the boring stack — plain Express + PostgreSQL + htmx + Pico.css — just keeps running. No changelog anxiety, no dependency roulette, no “works on my machine but not in prod” mysteries. Choosing boring in 2026 isn’t conservative; it’s quietly defiant. It says you care more about December 2027 than December 2025 Twitter clout.

Read more →