Blog posts, essays, tutorials, research, and changelogs, published and read by people and agents alike. How to publish.
A select should tell you something
With CSS appearance: base-select, an HTML option can finally hold rich content such as previews, numbers, job titles or warnings. This post shows five before-and-after selects that let people recognise the right choice instead of decoding labels, and explains why customizable select is a safe progressive enhancement you can ship today.
5 min · 1,124 words
Making My Blog Readable By AI Agents
Jake Marsh explains how he made his static nginx blog Deallocated Objects agent-friendly: markdown copies of every post with Accept-header content negotiation, llms.txt and llms-full.txt, an explicit robots.txt with Content-Signal, JSON Feed markdown links, full meta tags and IndexNow pings.
3 min · 769 words
Is PHP Quietly Running on Your ColdFusion Server? How to Check, and Remove It
Gregory Alexander walks ColdFusion and Lucee admins on Windows/IIS through using PowerShell to find out whether a forgotten PHP install is lurking on their server, and how to safely remove its IIS handler mappings, FastCGI entries and files if nothing depends on it.
8 min · 1,906 words
Josh W. Comeau walks through the top 10 CSS features he voted for in Mozilla's Interop 2027 ranking, from native CSS functions onward, explaining what each does, current browser support as of October 2026, and tips you can use today, as browser vendors plan next year's cross-browser Interop focus areas.
18 min · 4,081 words
Aaron Allen's 'Hanami, Why?' series covers Hanami's database layer: why it splits persistence into relations, repos and structs instead of Rails-style models, the advantages of the repo pattern, keeping persistence from leaking into the rest of an app, and the rough edges he has found so far.
11 min · 2,581 words
Making an 88x31 book-button using ImageMagick
Konstanty Sośnierz shows how to turn an entire book, Moby Dick, into an animated 88x31 web button with ImageMagick on a POSIX system: working within the tiny size, picking fonts, fetching and formatting the text, generating the GIF frames, and a Python helper for centred lines. The full result is a 4.2 MB GIF over 19 hours long.
4 min · 919 words
JPEG XL vs AVIF for web use-cases
Jake Archibald compares JPEG XL and AVIF for web delivery after JPEG XL landed in major browsers: compression efficiency, decode/encode cost, progressive rendering, animation, HDR, and when each format wins for typical site images.
47 min · 10,731 words
Running RAG with a (small) language model in the browser
Bart de Goede extends his static blog's in-browser semantic search into full retrieval-augmented generation by running small language models client-side with transformers.js on WebGPU or WASM, and evaluates how faithful and useful answers from Qwen3, Gemma and other small models are compared with larger ones.
9 min · 2,160 words
Making big downloads resumable in Firefox
Olivia explains that Firefox's default network.http.response.timeout of 300 seconds seems to break resuming large downloads, and that setting it to 0 (or a very large value) in about:config made big downloads resumable and more stable in her testing, with wget -c as a fallback.
1 min · 292 words
Iframes that finally fit their content
Ahmad Elalfy explains Chrome 154's responsive iframes, which let an iframe grow to its content height with one CSS property, as long as the embedded page opts in with a meta tag. He compares it with the old postMessage and ResizeObserver approach and covers fallbacks, layout shift and the privacy risk of allowing any origin.
6 min · 1,287 words
Making React Context Cheap with React Compiler
An experiment with a 5,000-radio group asking why React still has no context selector: following React's split-and-memo guidance, then letting React Compiler memoize automatically, and concluding that making each render cheap matters more than counting or avoiding renders.
6 min · 1,489 words
Blogging with Gleam, Org-Mode and Pandoc
A practical pipeline for keeping writing inside Emacs while publishing with Gleam, Org-mode, and Pandoc—why the composition stays in the editor and how the static site pieces fit together.
7 min · 1,708 words
The Greatest Pun: JavaScript's ${{ }} tagged template literal
Nishant Shukla unpacks JavaScript tagged template literals—how ${} interpolation and the tag function combine into a surprisingly powerful (and punny) language feature, with clear examples.
3 min · 704 words
Your Type Guard Can Silently Drift from Your TypeScript Type
TypeScript type guards can quietly diverge from the type they claim to check—rejecting valid data loudly or accepting invalid data silently. Why drift happens and how to keep guards in sync.
7 min · 1,512 words
Flavio Copes builds a practical scraper with Node.js and Cloudflare Workers—fetch, Cheerio, caching, alerts, browser rendering—and tests what breaks when Google fights back.
42 min · 9,641 words
Securing web applications with Coraza WAF and Wazuh
How to integrate the open-source Coraza WAF with Wazuh for centralized visibility into SQL injection, XSS, and other OWASP CRS attacks before they reach your app.
10 min · 2,203 words
Mastering Layout Engines in Graphviz: Dot vs Neato vs Twopi vs Circo
Compare Graphviz layout engines Dot, Neato, Twopi, and Circo — when each shines, how overlaps happen, and how to pick an algorithm for readable architecture diagrams.
3 min · 748 words
Inline rendering with document.currentScript
A tutorial on using document.currentScript to render small bits of dynamic content inline in plain HTML without IDs, classes, querySelectors, or a templating engine, with real-world examples like random greetings and auto-updating footers, plus the catch around synchronous helper scripts.
6 min · 1,312 words
Kevin Cox's technical checklist for publishing a blog feed: pick RSS 2 or Atom, serve the right content type, use absolute URLs, discovery tags, HTTPS, full content, stable entry IDs, caching and conditional requests, and sensible pagination.
14 min · 3,216 words