Writing on data systems, software engineering, and building for the web.
How to Add Payload CMS to Next.js Project
A step-by-step walkthrough of installing Payload, defining your content, rendering it, and deploying - based on setting it up on a real production Next.js site.If you have a Next.js app and you’re tir...
I Finally Stopped My Server From Crashing on 1000-Page PDFs
Our app lets warehouse managers download barcode label PDFs, one label per box, up to 1,000 boxes in a single shipment. Small shipments were fine. Big ones crashed the server, timed out, or slowed eve...
A few weeks ago, a user told me “the bot logged the wrong calories,” and I had absolutely nothing to debug it with except one console.log line that only fires when the chatbot completely gives up:cons...
CSR, SSR, SSG, ISR: The Four Rendering Words That Confused Me for Way Too Long
When I first started with Next.js, these four acronyms were everywhere and nowhere explained simply. Every article assumed I already knew what “hydration” meant, or they buried the one useful sentence...
Here’s a mistake I almost made: I was building the onboarding flow for my app NutriCal, and right before returning a success response to the user, I was about to write one line - await sendWelcomeEmai...
How to Add Memory to Your AI Chatbot (No Vector Database Needed)
A practical guide to giving your LLM a working memory — using tools you probably already haveThere’s a specific kind of frustration that comes from building an AI chatbot and realizing it’s completely...
I Finally Stopped Ignoring Vite’s Chunk Size Warning
How code-splitting turned my 664 KB monster bundle into something I’m not embarrassed bySo last night I was wrapping up a build of my calorie-tracking PWA, it has an AI chat feature, a Razorpay subscr...
So You Want to Turn Your Web App Into a PWA?A while back, I went down the PWA rabbit hole for a side project, a little calorie tracker I’d built with React and Vite. I kept seeing the term “PWA” throw...
How I Deploy My Next.js App on AWS Amplify (Simple Guide + One Bug I Hit)A beginner-friendly walkthrough: why I picked Amplify, how I deploy, what it costs, and a sneaky bug I ran into.When my Next.js...
Deploying an Express Backend to AWS Lambda with GitHub Actions
Running an Express app locally is simple node index.js, done. Deploying it to AWS Lambda is a different story - not because it's hard, but because Lambda works nothing like a traditional server.Th...
Payments look simple from the outside. Show a button, collect money, unlock the feature.I wired up Razorpay into a subscription-based React + Node.js app recently and spent more time than I’d like to ...
Why Your PDF Looks Fine on Screen but Blurry When Printed (Node.js)
LLM GeneratedWe generate barcode PDFs using Puppeteer. One day, a client reported that barcodes aren’t scanning properly after printing. We checked the PDF - looked fine. Opened it on screen - sharp a...
Before New Relic, debugging a slow API in production meant one thing, staring at console.log output and guessing.Someone reports “the order page is slow.” You have no idea if it’s a slow query, a slow...
I Replaced Debezium with a Cron Job. Here’s How I Made It Reliable.
Debezium was going down 3–4 times a month. Its only job in our system was publishing events to Kafka — order created, PO created, that kind of thing. Every time it went down, events were lost.So I rep...