Two a week — one deep dive, one short essay. Systems, receipts, and the occasional contrarian take.
Get every new piece in your inbox, plus one idea I don’t publish anywhere else.
The biggest single day of the entire build. Admin dark mode, Explore going live, DPDP compliance, and the feeling of a product outgrowing its founder.
A day spent across shubhamdatarkar, The Parliament and WeCos, and every real problem turned out to be the same one wearing different clothes.
Three bugs in one day, none of which logged anything. A blank game icon, a bookmark count stuck at zero, and a share button that did nothing at all.
Click outside the composer, or hit Escape, and your half-written note vanished with no warning. I did that to my own users and didn't notice for a while.
A YouTube video refused to play in my feed. I blamed YouTube, built a check to warn people about it, and then found the block was in my own security header the whole time.
I added follow and mute to the community in one afternoon. Follow sends an email. Mute sends nothing, ever, on purpose -- and that silence took more thought than the feature.
I went to make the Hot tab better and found it had never worked. Then I broke it a second, more interesting way -- and my green test suite had no idea.
For months the tools on my site were fake -- buttons that showed canned output. Yesterday I wired the last one to a real model, and it changed what the tools are for.
One 529 could kill a whole article, and a 429 storm could hang the pipeline forever. Yesterday was a day of teaching KalamAI to survive bad weather.
Yesterday's only commit flipped a default between two search-data vendors. The 2-line diff was the payoff for a boring interface I wrote weeks ago and half-forgot.
KalamAI built clean on my laptop and 500'd in production. The bug was hiding where next build cannot see it -- inside the serverless lambda.
KalamAI wrote its first real article end-to-end. It was fine -- and fine is a problem when the whole point is good writing. So I spent the day rebuilding the ranking math.
I wrote a rule, then broke it myself, and the community feed put the same fallback line under my name twice in twenty minutes. So I stopped trusting my discipline and moved the rule into CI.
I added a default to a database function so a deploy couldn't break. Then I probed prod and found the default had never once applied.
I reset all three games -- fresh puzzles, re-scrambled lists. Two things stayed quietly alive: a streaks table the migration forgot, and a Date.now() the cache had frozen.
I locked the middle column to a fixed width so three unrelated sections would line up. Then I spent nine PRs paying for it.
A member could not log in because the auth email never arrived. The fix I reached for did not work -- and the reason why was more interesting than the bug.
Community posts had ugly UUID links. I wanted human URLs -- without ripping out the key every other feature leans on.
I spent a day hardening the site, shipped a Content-Security-Policy, and quietly blocked every logo and photo from loading. Here is what the audit missed.
A safe shortcut in my SEO code stopped being safe the day testimonials moved to the database. Nobody told the code.
The photo publisher crashed in production with an error I could not read. I spent the night making it speak. Then I deleted all 1,918 lines of it.
I swapped role-based gating for capabilities on the members side, and a migration reminded me you cannot quietly change a function's return type.
A prod migration came back green, then a search index blew up on a column I had just written. The culprit: a forgotten table sharing a name.
I had a variable literally named fakeOriginal. Ripping it out meant I finally had to build real GST invoices.
I added a real dictionary to Alfazy, then realised an invisible \r would reject every valid word on a Windows checkout.
Starter, Host+, Studio. Three tiers, a coupon system, and the kind of day where you forget to eat.
Somewhere between building competitor pages and an About page, I shipped the thing you're reading right now. The recursion isn't lost on me.
A person who books a yoga class and a person who hosts a yoga class might be the same person. Today I made the product understand that.
Nine sections, a pricing table, testimonials, and the question I'd been avoiding: what does this thing even look like to a stranger?
I thought my code was secure. A proper audit disagreed -- loudly, across critical, high, and medium findings.
The door opened. Real traffic, real money, real legal obligations I'd been pretending didn't exist.
The scariest bug in a payments product is the one that happens while you sleep. So the day after going live, I built for the failures I can't watch.
Thirty posts ago I told you I was doing something that made no sense. I'm standing at the end of it, and my hand is on the handle.
I could launch this and stay quiet about the rough parts. Most people would. I'm not going to.
The layer on top — the small touches that don't change what the product does but completely change how it feels.
I counted. Five. Knowing what to charge and explaining it on one page are two completely different things.
The happy path is smooth. And the happy path is a liar, because almost nobody walks it exactly.
A stranger booked my page yesterday and it just worked. So today I started trying to break it on purpose.
I need to tell you about the best five minutes of the whole month, and why something this small was this big.
Every other screen matters to people who are already customers. Onboarding matters to people who aren't sure they want to be.
Himanshi handed me a real deadline shaped like a real person. Today I did the thing every builder secretly hates.
Two posts today, two halves of the same emotional whiplash. A migration nearly took my table down; one message put me back together.
Yesterday I was tired. Today I was scared, which — strangely — is a more useful feeling.
I don't have a lesson today. Some days don't have a moral. This is one of them.
A lot of bookings on Book A Sloth are online — and a confirmed booking isn't finished until both people have a link to click.
The best feedback I've ever gotten came in slightly annoyed, over a phone call, from a physiotherapist named Yukta.
Booking confirmations needed to go out on WhatsApp. That was never in question. In India, an email confirmation is half a confirmation — people live in…
Today the whole thing finally stood up on its own two legs.
Today I didn't write much code. I wrote numbers, erased them, wrote them again, and stared at a spreadsheet until the spreadsheet stared back. Pricing is the…
Nobody will ever send me a message that says "I love your availability editor." It will never trend. No one screenshots a settings screen and says "look how…
There's a category of code where "mostly works" is a disaster, and money is at the top of it. A button can be slightly off. A color can be a little wrong. A…
It was my birthday.
Two posts in one day. I'm flagging that honestly, because the whole point of doing this in public is to show the real rhythm, and the real rhythm is: some days…
Before today's technical pain, a human thing, because it mattered more than the code.
Remember the smug version of me from a few days ago? The one who stored OTP codes in a quick in-memory list because it was fast and worked perfectly on his…
Every booking tool I've ever used asks me to make an account before I can do the one thing I came to do. I have always hated this. You want to book a 20-minute…
I had it scheduled for a day. One day. "Set up auth." That's the line I wrote in my plan, with the smug confidence of a man who has clearly forgotten every…
Up to now, the new Book A Sloth looked like a database in a trench coat. Real data, sure, but it rendered like a tax form. Today I built the first page that…
There's a specific feeling to an empty repository. Anyone who's started something from nothing knows it. It's the same feeling as a blank page, a fresh…
Okay. The fight everyone's been asking about.
I told Naman first. He had to be first — he built half of it with me.
Let me start with the part that makes no sense.