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

Three Chests of Storage: localStorage vs sessionStorage vs cookies, and why your saved false comes back true
Kai saved false and got dark mode anyway. Chitragupta, keeper of Domlok's records, opens all three chests: why Web Storage only keeps strings, when to use localStorage, sessionStorage or a cookie, and why a login session belongs in an HttpOnly cookie.

The Race of Two Fetches: why your React page shows data for the wrong click
Click one item, then another, and the screen shows the first. Raiden, Domlok's Lightning guide, tracks down the Twin Oni and the useEffect cleanup with AbortController that lets only the latest request answer.
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.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.8 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.