Last week
- The reason I write more Go than JavaScript nowadays is not because there is anything wrong with the language, but because I’m tired of the ecosystem. The language on its own is really good, it is the first programming language that I became productive with and I’m still...
- For decades, one of the most notoriously-challenging problems on the web has been sticking one element to another element, for things like tooltips and nested menus. The CSSWG has decided to provide a first-class solution to this problem, and it’s pretty friggin’ cool! In this...
- I made some updates to my notes blog, including a change to how my “Shuffle” feature worked. Figured I’d blog about it. Shuffle? On a Blog? At the time of this writing, I have 974 “notes” that I’ve published. For fun, I have a “shuffle” button that digs up a random note from the...
About a month ago
- A developer guide to the Gemini Interactions API, text generation, streaming, multi-turn chat, multimodal inputs, structured output, tool use, managed agents, and background execution from a single endpoint....
about 1 month ago
- Gradient shaderPlanted: May 2026Status: seedIntended Audience: Creative coders and front-end developers with a basic understanding of WebGL shaders.How to create an organic gradient animation using a WebGL shader. If you're new to shaders, check out this note. What we'll make:...
about 2 months ago
- There are a bunch of JavaScript animation libraries out there, and you might have wondered whether there’s a performance cost compared to traditional CSS transitions and keyframe animations. In this blog post, we’ll compare the same animation across several different strategies...
2 months ago
- Safari and Firefox change how big sites render based on the domain. TikTok, Netflix, Instagram… even SeatGuru. Chrome doesn’t. Why is that?...
- I’ve been posting about how you can make lots of HTML pages and leverage navigations over in-page, JS-dependent interactions. Now I’m gonna post another example. On my icon sites, I have a little widget that allows you to resize the icons you’re looking at. Previously, I...
- I wrote about building websites with LLMs — (L)ots of (L)ittle ht(M)l page(s) — and I think it’s time for a post-mortem on that approach: I like it. I’ve tweaked a few things from that original post but the underlying idea is still the same, which I would describe as: Avoid...
- I have complex feelings about Generative AI but one area I find myself weirdly bullish on is small language models (SLMs) in the browser which are available in Chrome and Edge behind an experimental flag. I know, I know. I know. AI in the browser reeks of a product manager...
3 months ago
- A practical use case for rendering HTML+CSS to a canvas, an emerging API being previewed in Chrome....
- LlamaIndex have a most excellent open source project called LiteParse, which provides a Node.js CLI tool for extracting text from PDFs. I got a version of LiteParse working entirely in …
- for (i = 0; i < numberOfElements; i++) { doSomethingWith(element[i]); } This works, but isn't very elegant. The Ruby way is much more elegant. elements.each do |element| do_something_with(ele...
4 months ago
- So I got an email earlier, which you’ll find out about in my next post, which made me think “hey, the reply to this would make a great blog post”, and then I thought “…and it would be even better if people could add their own comments to it”, and so I plugged in the rather...
- What a month! After losing a job at the end of January, I started looking for a new one straight away. Seeking a new job nowadays is very different from how it used to be. Very long, multi-step and mentally draining processes are the new norm. The recent explosion of AI tools...
- Pretext went viral for its beautiful canvas demos. But the community is showcasing the wrong feature....
- 1. Separate what you know once from what changes There is work that depends on data that rarely changes, and work that depends on data that changes constantly. When you mix them together, you pay the...
- A JavaScript engine (e.g. V8, JavaScriptCore) executes JavaScript code. It doesn't know about things like files, HTTP requests, or timers.On the other hand, a JavaScript runtime (e.g. Node.js, Bun) is a more complete environment where JavaScript runs. It contains a JavaScript...
- I shipped some updates to my notes site. Nothing huge. Just small stuff. But what is big stuff except a bunch of small stuff combined? So small stuff is important too. What follows is a bunch of tiny details you probably don’t care about, but they were all decisions I had to...
- Introduction This is the note for future me. This bug was not random. Chrome was correct. We tried to start background music from mousemove. That feels like usage. It is not a real activation event fo...
- Introduction You have a combobox using cmdk (shadcn Command component) inside a Radix Dialog. The list has more items than fit. You expect it to scroll. It does not scroll. You are not alone. This iss...
- Introduction Sonner is the best toast library for React. But the docs barely cover advanced styling. This is everything I learned building a custom dark toast system with colored rails, action buttons...
- This post is the fourth and last in a series comparing the same sample blog in Web Origami and Eleventy: - Eleventy version: Source code and Demo - Origami version: Source code and Demo As a very crude metric, the conciseness of legible code can roughly...
- This post is the second in a series comparing the same sample blog in Web Origami and Eleventy: - Eleventy version: Source code and Demo - Origami version: Source code and Demo Today let's look at how both projects define the overall structure of the site...
Rows per page