Bite-sized thoughts on code, architecture, and the tools I use.
A character-level layout engine for the web
Taking back control of specificity
Server mutations without the boilerplate
Why completion feels harder than starting
One file, infinite variations
Type-safe string patterns at scale
What production usage actually looks like
Opportunity cost only hurts if you feel it
One source of truth for types, validation, and docs
What it costs when you don't own the code you shipped
How tools are designed to interrupt you
Animate elements entering the DOM without JavaScript
Multiple branches checked out at once
Where each runtime actually wins
JavaScript finally fixes dates
Protecting thinking time in the age of AI tools
Tooltips and popovers without JavaScript
Without goal-setting theater
Prevent bad states by construction
Not a personal failure
Simple, explicit, testable
Why most never make it
Where async helps and where it hurts
Why progress slows before you notice
What they are actually good for
Structured focus, predictable progress
Two philosophies, one goal
How senior devs use AI efficiently
The new reactivity system explained
Structural pattern matching in Python 3.10+
The parent selector we always wanted
Simple structure, noticeable impact
Type checking without widening
Why your code should ask, not create
Responsive components, not viewports
Native page transitions in the browser
Choosing the right Python web framework
The reactive primitive taking over
The architecture decision that matters
Tooltips and modals without JS