Notes on building for the web — what I learn while shipping full-stack apps.
A dark mode toggle doesn't have to snap. With one inline script and the View Transitions API, the whole page can cross-fade through a soft blur — and still never flash the wrong theme on load.
Project data on a portfolio changes a few times a year, so there is no reason to query the database on every request. A cached query, a lazy client and one careful try/catch keep it fast and resilient.
The links on this site rest on a row of light grey dots that darken and drop a couple of pixels on hover. Here is how that works with a gradient, a registered custom property and one layout gotcha.