- A College Forked My Open Source Project and Forgot to Change the Analytics KeyRamachandra College of Engineering rebuilt my MIT-licensed CodeTrace into a placement portal, and shipped it with my PostHog key still inside. Here's the whole story, the evidence, and what the MIT license actually asked of them.8/15/2026Open SourceLicensingStory
- Run Your ML Model in the Browser: No Server Required (Pyodide vs ONNX)I took a real XGBoost news-bias classifier and made it run entirely in the browser two different ways: Pyodide unpickling the original .pkl, and ONNX via onnxruntime-web. Same model, same task, wildly different perf. Here's what actually happened, with numbers, the trap that almost broke it, and which one I finally shipped across the whole site.8/14/2026Machine LearningWeb
- 'This Website Has No API': Yes It Does, and Here's the No-Browser Way to Scrape ItMy friend Amresh was building Pitaara, a live gold-rates app, and needed data from brands that really don't want to be scraped. I've done this dance before, so I helped. Here's the project walkthrough, plus the general guide to scraping sites that swear they don't have APIs.8/14/2026Web ScrapingPython
- Component Gallery: Every Building Block in One PostEvery component the Markdown renderer supports, shown in both the tag spelling and the directive spelling: steps, meters, panels, tabs, diagrams, callouts. This page is also the test fixture, so a renderer regression shows up here first.8/8/2026Meta
- JSON vs YAML for LLM Output: What the Tokens Actually CostA pipeline of mine kept asking an LLM for JSON and kept paying for every brace and quote in the reply. I switched the output format to YAML, then got curious and actually ran both through tiktoken to see what was true and what was just a stat floating around the internet. There's a real saving, and a catch nobody mentions: minified JSON beats YAML on raw tokens.10/15/2025Mobile Development
- Why Your Android Service Keeps Dying (and What to Use Instead)I was building a run-tracker side project and the GPS updates just stopped the moment the screen locked. Turned out I'd built a background service the way Android used to allow, and the OS doesn't allow that anymore. Here's the full picture: foreground, background, and bound services, the lifecycle that governs all three, and what modern Android actually wants you to do instead.10/10/2025Mobile Development
- Prisma Notes: Schema to Query, and Every Trap in BetweenI built a tiny shared blog for a few friends and used it as an excuse to actually learn Prisma properly instead of copy-pasting from the docs. This is what happened: the schema file, migrations, relations, and every gotcha along the way, from the include-vs-select trap to pagination that quietly reshuffles itself when you forget orderBy.10/8/2025DBMS
- Old bridge vs new architecture: why my React Native chat list kept dropping framesA chat screen with a typing indicator and a fast scroll was enough to make an old-architecture React Native app visibly stutter. The cause wasn't my code, it was JSON crossing a bridge sixty times a second. Here's what the new JSI-based architecture actually replaces, and why the old one had to go.9/24/2025React NativeLow Level
- useRef vs useState: why my countdown timer redrew the whole page every secondI stashed a setInterval handle in useState and watched a simple countdown widget stutter every tick. The fix is one hook swap, but understanding why it works is the actual lesson: which of your values need to repaint the screen, and which are just bookkeeping.9/24/2025ReactReact NativeLow Level
- My Frontend Was on :5173, My API Was on :8000: A Field Guide to Every Way CORS BreaksThe first real fetch call I wrote against my own backend died in the console with a wall of red about CORS policy. Here's what an origin actually is, why browsers block it by default, and every real way CORS bites you afterward, in the order you'll actually hit them: preflight, credentials, wildcards, and the errors that follow.9/21/2025CORSAPI
- It Ran Fine on My Machine: Chasing Core Web Vitals Across the Full StackI pushed a new build of my portfolio, tested it on my laptop over wifi, and it felt instant. Then I ran it through PageSpeed Insights on a throttled connection and watched the largest-contentful-paint number come back embarrassing. This is the walkthrough of fixing FCP, LCP, INP and CLS across a FastAPI backend and Next.js/Astro frontends, with the code that actually moved each number.9/21/2025WebNext.jsAstro+1
- Why Python Doesn't Have Call by Reference (And What It Does Instead)I spent longer than I'd like to admit trying to bump a counter inside a function before I actually understood what a Python variable is. Here's the mental model that made it click, and the three ways to get the behavior you actually want.9/2/2025PythonLow Level
- How Many Loops Do You Actually Need? Generating N Nested Loops in PythonI was building a tiny combination-lock simulator where the number of wheels was a setting, not a constant, and hit the wall everyone hits eventually: you can't write for i, for j, for k when you don't know how many for's you need. Recursion, itertools.product, and a manual odometer, with real tradeoffs and the one thing you should never do instead.9/2/2025PythonDSA
- Python's Import System, and the Error That Finally Made Me Learn ItI tried to test one scraper module in isolation and got 'attempted relative import with no known parent package' for my trouble. Here's what that error actually means, how Python's import system really works, and how to structure a project so you stop hitting it.8/30/2025PythonLow Level
- I Built a Linked List, Then Spent a Weekend Making It Act Like a Real Python ListI was grinding linked-list problems for interview prep and got sick of writing ll.get_length() and ll.contains(x) by hand for every variant. So I built one general-purpose LinkedList and went through the dunder methods one at a time until list(my_ll), sum(my_ll) and for x in my_ll just worked. Here's every method, in the order I actually hit them, including the one (__del__) that I implemented wrong on the first try.8/20/2025PythonDSALow Level+1
- How Python Actually Creates Classes: type, Metaclasses, and the Object ModelI built a plugin loader that was supposed to auto-register every class dropped in a folder, reached for a metaclass instead of a decorator because it felt like the 'proper' way, and then couldn't explain why it worked. So I went and figured out what actually happens when Python hits a class statement, and what type really is underneath it all.8/19/2025PythonOOPsLow Level
- Git Doesn't Delete Anything: What's Actually Inside .gitA rebase gone wrong taught me that git never really deletes anything, it just moves pointers around. Here's what blobs, trees, commits, refs, merges and rebases actually are under the hood.6/23/2025Git
- From HTML Bytes to Pixels: How the Browser Actually Renders a PageA scroll-linked animation once pegged a phone's CPU at 100% and dropped it to 12fps. The bug was one line reading offsetHeight inside a loop that also wrote style.top. Here's the full pipeline that made that line so expensive, from HTML bytes to painted pixels.6/23/2025WebJS
- The Rendering Spectrum: MPA, SPA, SSR, RSC, and Islands, in the Order You'd Actually Hit ThemA client's marketing site scored terribly on Lighthouse and painted a blank screen for three seconds. It was a plain React SPA with no server rendering at all. That one bug tour is basically the whole history of web rendering, so here it is end to end: MPA, SPA, SSR, RSC, and islands.6/23/2025WebLow Level