Posts
All the articles I've posted.
Dynamic import(): the browser already caches our modules
Published:Calling import() every time a feature is used doesn't download or evaluate the module again: the browser reuses it from its module map. What it guarantees, when the same module stops being the same, and what happens when the first load fails.
WebMCP on a static site: the GeeksCAT Conf 2026 website, ready for agents
Published:The GeeksCAT Conf 2026 website is a static Astro site that exposes its schedule, speakers and event details to AI agents through WebMCP. Three layers: a manifest in /.well-known, JSON endpoints generated at build time, and tool registration with document.modelContext.
HTTP cache partitioning: the same image, downloaded twice
Published:A page with a cross-site iframe requests the same image from the iframe and from the parent. Chrome downloads it twice; Firefox and Safari, once. Why the cache key differs across the three engines, why sharing a partition does not guarantee a hit, and what Cross-Origin Storage proposes to fix it.
A skill that knows nothing: the architecture of Modern Web Guidance
Published:Modern Web Guidance doesn't keep the knowledge in the skill, it teaches the agent to retrieve it. Local semantic search with MiniLM and TensorFlow.js, guides with their own grader, and empirical calibration of the content.
The CrUX 28-day rolling window
Published:How the CrUX 28-day rolling window actually works, what each source publishes, and why p75 takes so long to move even though the data is only two days old.
A 301 on every click: the trailing slash that slowed down all internal navigation
Published:A real finding on skills.addy.ie: every internal link triggered a 301 redirect on Netlify because of a missing trailing slash. What it costs the UX, how I spotted it in DevTools, the quick fix I first thought of, and the underlying solution (Astro directory format + trailingSlash: 'always'). With Network panel evidence before and after.
Keep-Alive is not Cache-Control: anatomy of a network waterfall
Published:A real audit case: two heavy images (608 KB and 403 KB) over HTTP/1.1 with Connection: Keep-Alive but no Cache-Control. Why they are different things, what HTTP/2 fixes and how preconnect gets ahead of the handshake. With an interactive waterfall demo.
The mystery of the self-repainting #document: Paint flashing and composited layers
Published:Why the #document layer racks up hundreds of repaints at rest because of a ticker animated with transform, how to catch it with the Layers tab and Paint flashing, and how to promote the element to its own composited layer with will-change.