All Posts

Listed below are posts in chronological order. You might want to explore topics instead. There’s also a web feed for latest posts.

Debugging CSS Custom Properties


CSS-Only Ripple Effect


CSS Nesting Syntax Conversion


CSS Vector-Path Scaling

CSS allows for arbitrary shapes these days. Getting the details right turns out to be a little challenging.

Tricking Browsers into Nesting Forms

Turns out the HTML parser and DOM APIs don’t always agree on semantic constraints.

Subverting the Cascade

The cascade is what makes CSS powerful and special. And yet, sometimes we want to limit that power for containment purposes.

Virtual JavaScript Modules


Given my penchant for minimal test cases and local applications, I sometimes run into situations where I can’t load external JavaScript files. Typically that’s because ESM is unsupported for file:// URIs or because I don’t wanna rely on additional assets for a Web Worker.

Default Map in JavaScript


I’ve always liked Python’s defaultdict and occasionally find myself reimplementing it in other languages, notably JavaScript – typically for some kind of dynamic indexing.

Easy to Test, Easy to Change

File-System Access in the Browser

Every so often I create another local web application, for myself or others – mostly because not relying on a server seems more sustainable and eternally trustworthy, especially for personal, single-purpose projects. Sometimes all you want to rely on is a web browser.

Scroll Shadows


CSS Color Scheme




Two-Factor Authentication on the Command Line


Technology as Attractive Nuisance

Purveyors of software must exercise reasonable care to guard against decontextualization of architectural choices.

Subgrid for Nested Alignment


Skeumorphic Text Highlighting


HTML Boilerplate


I probably create dozens of HTML documents each month, usually for experiments or minimal test cases. Consequently, I’ve long maintained a carefully crafted HTML template, included below, which I typically reduce to only retain pieces that are strictly necessary (e.g. removing the external style sheet or .stack utility).

Code Splitting for Humans

JavaScript bundles don’t need to be monolithic, even without surrendering control to inscrutable algorithms. Here’s an approach for explicitly sharing code between multiple bundles.

Theming with Constructed Style Sheets

Constructable Style Sheets are useful to inject and control styles via JavaScript.

Augmenting JavaScript with Static Typing

As we’ve learned from the brouhaha around Svelte’s use of TypeScript, JSDoc makes it possible to write plain JavaScript while getting the benefits of static typing.

Encrypted Web Documents

There are many options these days for securely sharing sensitive data, but they typically require some kind of shared infrastructure. Sometimes all you can rely on is the web.

From HTML to DOM Nodes

Every once in a while, I need to turn HTML strings into DOM nodes. The mechanisms for doing so are less than obvious and nuanced.

Client-Side Secrets with Web Crypto

Reading about Excalidraw’s end-to-end encryption a while back piqued my interest: Given my TiddlyWiki background, the idea of using a server to exchange sensitive data without exposing details to anyone else seemed compelling.

Perils of View Transitions

View transitions are excellent, but might block concurrent animations as well as interactions while transitioning.


This article was updated a week after publication to include helpful comments from Mr. View Transitions himself, Jake Archibald, who was kind enough to respond in private.

Signals for Reactivity

Having been roped into dealing with the excesses of RxJS lately, I’d been wondering about Angular folks’ excitement about signals. So I finally sat down in an effort to understand the furor.

Banishing npm

npm is slow, unwieldy and unsafe. Deno can now serve as a drop-in replacement for front-end development environments.


being sent to the dictionary is a gift

Creative Privacy

Allowing users to tinker in private is essential to enabling creativity.

Streaming HTML

Browsers begin rendering HTML even before the document has been fully downloaded, which can greatly improve perceived performance. Servers can support such progressive rendering by emitting partial HTML chunks as soon as possible.

Lazy Custom Elements: An Undercover Primer

At face value, An Approach to Lazy Loading Custom Elements appears to propose a solution for on-demand loading of web components. It’s actually subtle propaganda for custom elements.

Lightweight HTML Templating with JavaScript

Sometimes I need to generate HTML without relying on external dependencies.

Seizing the Means of Transclusion

After years of advocating transclusion as a simple and effective integration mechanism, we’ve identified patterns and pitfalls worth considering.

churnal: Digestible News

In ruminations on how async-first communication could and should work within a rapdily growing team, I had concluded that unidirectional broadcasting of significant developments can provide tremendous value, if done well.

Data URIs

The data: URI scheme is an underappreciated trick for virtual files.

HTTP Caching 101

After repeatedly teaching the basics of HTTP caching in an ad-hoc fashion, I decided it was worth briefly summarizing the fundamental mechanisms.

Cheating God

happy to help – it’s simple math: I spend 5 min. to save you 60

in the grand scheme of things, we just cheated god

Progressive Web Components

This is a write-up of the “Progressive Web Components” presentation at GOTO Berlin.

Bugs Are Good

Bugs are an opportunity for the community to reveal itself.

"JSON is faster"

Discussing isomorphic JavaScript at dotJS, I questioned the value of client-side templating – and was confronted once again with the “but … JSON is faster!?” assertion.