Frontend · Mumbai · Since 2005
I write about the frontend — and build the demo so you can break it.
Twenty years shipping the web. Every post ships with something you can drag, resize, or take apart.
A new piece every other Tuesday. No newsletter about the newsletter.
Acharya Kōdo: Drag the window edge, Kai. Watch the needle find each breakpoint.
It knows my width!
↔ Drag the window edge. That's the whole pitch.
Latest4 posts

The Lazy Lantern: why loading=”lazy” can make your page slower
Kai put loading="lazy" on all forty gallery images and his hero painting arrived late. Vayu, Domlok's Air guide, wakes the Lazy Lantern: keep the first image eager with fetchpriority="high", lazy-load the rest, and give every image its size.

The Lost Focus: why keyboard users get lost every time your single-page app changes page
Your single-page app changes page and keyboard focus quietly falls to the body. Sanjaya, Domlok's Ether guide who travels by sound, chases the Lost Wisp and moves focus on purpose: to the new heading, the next row and back to the opener.
Raiden’s Throttle: debounce vs throttle, and why your search box sends six requests
Type one word, send six requests. Raiden, Domlok's Lightning guide, calms the Storm of Requests with debounce for search boxes and throttle for scroll handlers, and shows the React mistake that undoes both.
The Dialog Gate: why your div modal lets Tab escape, and how <dialog> fixes it
Kai's modal is a div, so Tab walks straight out and Escape does nothing. Vishwa, the Earth guide of Domlok, swaps it for a native opened with showModal(), and the browser handles focus, Escape and the page behind.The castMeet the team
Every post is an episode set in Domlok, a realm where every page is a kingdom. A bug attacks, Kai tries the obvious fix, and the team shows how it really works.
Browse the episodes →Mentor · that’s me
Acharya Kōdo
The old architect. Guarding Domlok since the Age of jQuery.
All five · Pancha MahabhutaApprentice
Kai
Asks what you’re thinking. Breaks it first, so you don’t have to.
Element unknown, for nowHTML & architecture
Vishwa
After Vishwakarma, the divine architect. Builds foundations, hates div soup.
Earth · PrithviCSS, layout & CMS
Kitsu
A shape-shifting fox. One piece of content, a hundred layouts.
Fire · AgniJavaScript
Raiden
After Raijin, god of thunder. Fast, loud, and lives on events.
Lightning · VidyutAccessibility
Sanjaya
The Mahabharata’s narrator. Describes the world for those who can’t see it.
Ether · AkashaPerformance
Vayu
God of the wind. Light, quick, and weighs every kilobyte.
Air · VayuState & version control
Chitragupta
Keeper of every record. Every commit, every action, written down.
Water · Jal
What I knowPick a thread
With VishwaFrontendSemantic HTML, intrinsic CSS layout, design systems that survive a second team touching them. The part that decides whether the next three years are pleasant.5 POSTS
With VayuPerformanceCore Web Vitals as an engineering problem rather than a scorecard. Where the milliseconds actually go, and which ones a user can feel.7 POSTS
With SanjayaAccessibilityPOUR in practice, on real budgets, with real deadlines. What it costs to retrofit versus what it costs to build in, with numbers.2 POSTS
With ChitraguptaPracticeBranching, review, release. The habits that separate a team shipping weekly from a team shipping when someone is brave.2 POSTS
With KitsuCMSAdobe Experience Manager and WordPress underneath most of what I've shipped — CMS-driven web apps and eCommerce builds on one end, enterprise content architecture on the other.2 POSTS
With RaidenJavaScriptEvents, async, and the runtime underneath the frameworks. What actually happens between a click and a repaint.6 POSTS
- Semantic HTML
- CSS Grid
- Container queries
- TypeScript
- WordPress
- PHP
- Core Web Vitals
- Lighthouse
- WCAG 2.2
- Git
- Vite
- Figma
Twenty years means most of this list has been rewritten three times. The judgement is the part that carried over.