Blog
Thoughts, updates, and practical deep-dives into modern software development and digital innovation. We share insights on high-performance architecture, web standards, and the technical decisions behind building scalable, resilient technology.
Note: We migrated our blog posts from an internal wiki in Summer 2026; publish dates reflect the migration, while the revision history reflects actual edits.

Inert, Dialog, and the Death of Z-Index Hacks
For fifteen years, we wrote complex JavaScript to trap focus in modals and fought endless z-index wars. The native web has finally solved this. Here is a deep dive into the <dialog> element and the inert attribute.
AccessibilityModern Web APIs
Service Workers in 2026: Beyond the Offline Dinosaur
Service Workers are for more than just caching assets for offline mode. They are the ultimate tool for network resilience, background sync, and decoupling your UI from the network.
ResilienceArchitecture
Structuring for AI Crawlers: What Actually Works, and What llms.txt Doesn't Prove
A 300,000-domain study found llms.txt presence added noise, not signal, to predicting AI citation frequency - and no major AI vendor has confirmed it fetches the file. The techniques that do have evidence behind them are less exciting and already covered elsewhere on this site: raw HTML content, semantic tables, and structured data your crawler never has to render.
AEOArchitecture
Subresource Integrity (SRI) in a Dynamically Imported World
Securing static script tags is easy. Securing a modern JavaScript application that heavily relies on dynamic import() and third-party vendors is significantly harder. Here is how to handle CSP and SRI hashes alongside JavaScript Import Maps.
SecurityArchitecture
View Transitions on MPAs: SPA-Feeling Navigation Without a Router
Same-document view transitions reached Baseline in October 2025 across Chrome, Firefox, and Safari. Cross-document transitions - the ones that make a real multi-page site feel like an SPA - are shipped in Chromium and reported inconsistently elsewhere; this article states what's actually verifiable and how to check the rest yourself before you ship.
ArchitecturePerformance
Native Web Components vs Hydration: What customElements.define() Buys You
The hydration uncanny valley delays interactivity. Native custom elements skip framework overhead for isolated interactive widgets on modern web pages.
ArchitecturePerformance
Stop Faking Personalisation: Edge Rewrites Instead of Client-Side Flicker
Client-side personalization causes layout shift and Safari cookie resets. Learn how edge rewrites prevent CLS and preserve experiment bucket integrity.
Architecture
First-Party Server Tagging: The Case That Survived Google's Cookie Reversal
Google cancelled third-party cookie deprecation in April 2025. The argument for server-side tagging did not depend on it - ITP's seven-day cookie cap, ad-blocker loss, and main-thread cost are the real drivers, and all three still apply.
Architecture
Fluid Type Systems: The Parts the Calculators Don't Generate
Utopia and the clamp() generators solve the interpolation. What they don't give you: a ratio that scales with the viewport, vertical rhythm that survives fluid sizing, and the viewport-height unit that quietly reflows on every scroll.
CSS
Why Your SPA Is Invisible in the Answer Engine Era
AI crawlers do not execute JavaScript. Vercel's analysis of 500M+ GPTBot fetches found zero JS execution. If your content lives in the rendered DOM, you do not exist to ChatGPT, Claude, or Perplexity - regardless of your Google rankings.
Architecture
Data Table Serialization: Development HTML for LLM Ingestion
AI crawlers read raw HTML with no CSS and no JavaScript. A CSS Grid 'table' serialises to an undifferentiated list of strings, and every row-column relationship in your data is destroyed before the model sees it.
AEO
Zero-Jank Scroll: Getting Animation Off the Main Thread
Binding animation to a scroll event listener is an development failure with a known fix. Scroll-driven animations run on the compositor, off the main thread, in pure CSS - and the syntax is not the one most tutorials still teach.
Performance