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

Why is my JavaScript bundle so big? Tree shaking and code splitting (The Bloat Asura)
A login page that downloads a megabyte of JavaScript. Vayu, the Air guide of Domlok, weighs the bundle, shakes out unused lodash with ES modules and splits heavy routes with import() and React.lazy until the Bloat Asura shrinks.

Cannot access before initialization? let, const and the Temporal Dead Zone
Kai changed var to const and his page crashed. Raiden, Domlok's Lightning guide, explains hoisting, the temporal dead zone and why let and const throw "Cannot access before initialization", then fixes it by putting declarations first.
The Grid That Wasn’t: Flexbox vs Grid, and why your last row of cards stretches
Your flex-wrap gallery looks like a grid until the last row stretches and nothing lines up. Kitsu, Domlok's fox of CSS and layout, untangles the Crooked Weaver: Grid for rows and columns, Flexbox for single lines, and subgrid for the insides.
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 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.6 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.8 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.9 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.