<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Divyansh Singh — Notebook</title>
    <link>https://rgndunes.github.io</link>
    <atom:link href="https://rgndunes.github.io/rss.xml" rel="self" type="application/rss+xml" />
    <description>Working notebook of Divyansh Singh — Software Engineer II at Rippling, building frontend infrastructure, developer tooling, and CI/CD systems.</description>
    <language>en</language>
    <lastBuildDate>Thu, 15 Oct 2026 05:37:20 GMT</lastBuildDate>
    <managingEditor>rgndunes@gmail.com (Divyansh Singh)</managingEditor>
    <webMaster>rgndunes@gmail.com (Divyansh Singh)</webMaster>
    <category>Software Engineering</category>
    <category>Web Development</category>
    <image>
      <url>https://rgndunes.github.io/og-default.png</url>
      <title>Divyansh Singh — Notebook</title>
      <link>https://rgndunes.github.io</link>
      <width>144</width>
      <height>144</height>
    </image>
    
    <item>
      <title>We Blamed Vite For A 90-Second Local Load. The Real Bottleneck Was The 11,516 Modules We Asked It For.</title>
      <link>https://rgndunes.github.io/blog/vite-dev-bottleneck-was-eager-route-imports</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/vite-dev-bottleneck-was-eager-route-imports</guid>
      <pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate>
      <description>A local Vite page took 90 seconds to load because eager route imports pulled 11,516 modules into one page load. Making routes lazy cut it to 54 modules and 10.54 seconds. The mechanism, how to count your own modules, and where the fix stops working.</description>
      <category>Vite</category><category>Frontend Infrastructure</category><category>Developer Experience</category><category>Performance</category><category>React</category>
    </item>
    <item>
      <title>I Gave Claude 500 GB of Raw Footage. It Built a 29-Minute 4K Film.</title>
      <link>https://rgndunes.github.io/blog/claude-edited-500gb-raw-footage-4k-film</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/claude-edited-500gb-raw-footage-4k-film</guid>
      <pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate>
      <description>A practical AI-assisted editing case study for first-time creators and experienced editors: 500 GB of footage, three rebuilds, custom cleanup, 3D maps and a finished 4K film.</description>
      <category>AI Engineering</category><category>Video Production</category><category>Agentic Workflows</category><category>Claude</category><category>Automation</category>
    </item>
    <item>
      <title>Every Browser Retry You Add Is A Small DDoS Attack. Stop Calling It Reliability.</title>
      <link>https://rgndunes.github.io/blog/every-browser-retry-you-add-is-a-small-ddos-attack-stop-calling-it-reliability</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/every-browser-retry-you-add-is-a-small-ddos-attack-stop-calling-it-reliability</guid>
      <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
      <description>Retries keep a single request alive, but at production scale they can turn an outage into a traffic multiplier. The browser needs a retry policy, not a setTimeout loop.</description>
      <category>Frontend Reliability</category><category>Web Performance</category><category>HTTP</category><category>JavaScript</category><category>Architecture</category>
    </item>
    <item>
      <title>loading=&quot;lazy&quot; On Your Hero Image Waits For Your CSS. Same Page, Same Attribute: 16ms Slower In One Test, 428ms In The Next.</title>
      <link>https://rgndunes.github.io/blog/lazy-hero-image-waits-for-your-css</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/lazy-hero-image-waits-for-your-css</guid>
      <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
      <description>loading=&quot;lazy&quot; on an above-the-fold image does not wait for a scroll, it waits for layout. Measured in Chromium, Firefox and WebKit: the lazy hero request starts right after the stylesheet lands, costing 16ms on one network profile and 428ms on another, why fetchpriority cannot rescue it, and why making everything eager is worse.</description>
      <category>Web Performance</category><category>LCP</category><category>Browser Internals</category><category>Images</category><category>Frontend Infrastructure</category>
    </item>
    <item>
      <title>setTimeout(fn, 0) Is Not Zero. In A Background Tab, Your 100ms Timer Runs Once A Minute.</title>
      <link>https://rgndunes.github.io/blog/settimeout-zero-is-not-zero</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/settimeout-zero-is-not-zero</guid>
      <pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate>
      <description>The delay you pass to setTimeout is a minimum. Measured in Chromium, Firefox, WebKit and Node: the 4ms nesting clamp, hidden tabs throttled to 1 second, Chrome&apos;s once-a-minute intensive throttling after 5 minutes, a 30-day timer that fires instantly, and what to use instead.</description>
      <category>JavaScript</category><category>Browser Internals</category><category>Performance</category><category>Timers</category><category>Frontend Infrastructure</category>
    </item>
    <item>
      <title>JavaScript Reads &quot;2026-10-06&quot; As UTC And &quot;2026-10-06T00:00&quot; As Local Time. Most Off-By-One Date Bugs Start There.</title>
      <link>https://rgndunes.github.io/blog/javascript-date-parsing-off-by-one</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/javascript-date-parsing-off-by-one</guid>
      <pubDate>Tue, 06 Oct 2026 00:00:00 GMT</pubDate>
      <description>new Date(&quot;2026-10-06&quot;) is UTC midnight, new Date(&quot;2026-10-06T00:00&quot;) is local midnight. Tested in Chromium, Firefox and WebKit across three time zones: where the day slips, why Indian teams rarely see it, &quot;06-10-2026&quot; becoming 10 June, DST arithmetic, and what Temporal fixes.</description>
      <category>JavaScript</category><category>Browser Internals</category><category>Temporal</category><category>Dates</category><category>Frontend Infrastructure</category>
    </item>
    <item>
      <title>Chrome Stopped Running Your unload Handler. If Your Analytics Still Use It, Your Numbers Already Changed.</title>
      <link>https://rgndunes.github.io/blog/chrome-stopped-running-your-unload-handler</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/chrome-stopped-running-your-unload-handler</guid>
      <pubDate>Thu, 01 Oct 2026 00:00:00 GMT</pubDate>
      <description>Since Chrome 154, unload handlers are off by default on every Chrome page load - they register without error and never run. Reproduced in Chromium: what it does to the Back button, which data quietly went missing during the seven-month rollout, and the pagehide pattern to use instead.</description>
      <category>Browser Internals</category><category>Performance</category><category>Page Lifecycle</category><category>Analytics</category><category>Frontend Infrastructure</category>
    </item>
    <item>
      <title>Cache-Control: no-cache Does Not Mean Do Not Cache. And No Header At All Is Worse.</title>
      <link>https://rgndunes.github.io/blog/cache-control-no-cache-does-not-mean-do-not-cache</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/cache-control-no-cache-does-not-mean-do-not-cache</guid>
      <pubDate>Thu, 24 Sep 2026 00:00:00 GMT</pubDate>
      <description>no-cache stores the response and revalidates it every time - no-store is the one that refuses to store. And an index.html with no Cache-Control at all is still cached, for a period the browser works out from Last-Modified. Reproduced in Chromium, with the two-rule setup I would use.</description>
      <category>HTTP Caching</category><category>Frontend Infrastructure</category><category>Performance</category><category>Release Engineering</category><category>CDN</category>
    </item>
    <item>
      <title>Your Service Worker Is A Deploy You Cannot Roll Back. Stop Shipping It Like A Script.</title>
      <link>https://rgndunes.github.io/blog/service-worker-is-a-deploy-you-cannot-roll-back</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/service-worker-is-a-deploy-you-cannot-roll-back</guid>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <description>Once a service worker is installed, the browser decides when your new release runs, and rollback cannot reach it. Why reloading does not activate a new worker, how skipWaiting breaks lazy chunks in open tabs, and the kill switch to write before you need it.</description>
      <category>Service Workers</category><category>PWA</category><category>Frontend Infrastructure</category><category>Release Engineering</category><category>JavaScript</category>
    </item>
    <item>
      <title>VITE_ And NEXT_PUBLIC_ Are Not Naming Conventions. They Are Publish Buttons.</title>
      <link>https://rgndunes.github.io/blog/client-env-prefix-is-a-publish-button</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/client-env-prefix-is-a-publish-button</guid>
      <pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate>
      <description>Renaming a variable so it stops being undefined pastes its value into a public JavaScript file. What client env prefixes really do at build time, the dynamic lookup that inlines every prefixed variable in Vite, the define config that leaked a whole shell environment, and a CI check that catches it.</description>
      <category>Vite</category><category>Next.js</category><category>Security</category><category>Frontend Infrastructure</category><category>Build Tools</category>
    </item>
    <item>
      <title>Adding &quot;exports&quot; To Your package.json Is A Breaking Change. Stop Shipping It As A Patch.</title>
      <link>https://rgndunes.github.io/blog/package-json-exports-is-a-breaking-change</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/package-json-exports-is-a-breaking-change</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <description>Six lines of JSON can make every deep import your consumers rely on throw at runtime, including require(&apos;pkg/package.json&apos;). How the exports field really resolves, the TypeScript condition-order bug that fails silently, the dual package hazard, and how to roll it out without breaking anyone.</description>
      <category>npm</category><category>Node.js</category><category>TypeScript</category><category>Frontend Infrastructure</category><category>Package Design</category>
    </item>
    <item>
      <title>Long Tasks Are Not Why Your Page Feels Slow. Chrome Shipped An API That Finally Tells You What Is.</title>
      <link>https://rgndunes.github.io/blog/long-animation-frames-not-long-tasks</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/long-animation-frames-not-long-tasks</guid>
      <pubDate>Thu, 27 Aug 2026 00:00:00 GMT</pubDate>
      <description>The Long Tasks API tells you that something blocked the main thread for 340ms. It will not tell you which script, which handler, or which line. Long Animation Frames does - and it measures the unit users actually perceive, which is the frame, not the task.</description>
      <category>Performance</category><category>Browser APIs</category><category>Observability</category><category>INP</category><category>Core Web Vitals</category>
    </item>
    <item>
      <title>Your CI Cache Is a Second Package Manager. Treat It Like One.</title>
      <link>https://rgndunes.github.io/blog/your-ci-cache-is-a-second-package-manager-treat-it-like-one</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/your-ci-cache-is-a-second-package-manager-treat-it-like-one</guid>
      <pubDate>Tue, 25 Aug 2026 00:00:00 GMT</pubDate>
      <description>A CI cache can cut minutes from a build, or quietly make your release process non-reproducible. The difference is whether you treat it as disposable acceleration or hidden infrastructure.</description>
      <category>CI/CD</category><category>Build Systems</category><category>Frontend Infrastructure</category><category>Developer Experience</category><category>npm</category>
    </item>
    <item>
      <title>Your CI Runs Every Test On Every PR. That Is Not A Feature. That Is Waste.</title>
      <link>https://rgndunes.github.io/blog/ci-stop-running-every-test</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/ci-stop-running-every-test</guid>
      <pubDate>Thu, 20 Aug 2026 00:00:00 GMT</pubDate>
      <description>Most teams run the full test suite on every PR and call it thorough. It is not thorough - it is expensive, slow, and quietly teaches everyone to distrust the results. Change-based test selection is a decade old. Frontend teams are still running 40 minutes of tests to validate a one-line change.</description>
      <category>CI</category><category>Test Selection</category><category>Frontend Infrastructure</category>
    </item>
    <item>
      <title>Your Node.js Server Is Blocked By A Thread Pool Of 4. Nobody Told You.</title>
      <link>https://rgndunes.github.io/blog/node-libuv-thread-pool-of-four</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/node-libuv-thread-pool-of-four</guid>
      <pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate>
      <description>Every &apos;JavaScript is single-threaded&apos; explanation forgets that Node.js is not single-threaded. It runs on libuv, which spins up a fixed thread pool of four workers by default. crypto, fs, dns.lookup, zlib - they all queue on those four.</description>
      <category>Node.js</category><category>libuv</category><category>Backend</category>
    </item>
    <item>
      <title>React&apos;s key Prop Is A Reset Button, Not An Identity Prop. Here Is What Most Engineers Get Wrong.</title>
      <link>https://rgndunes.github.io/blog/react-key-is-a-reset-button</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/react-key-is-a-reset-button</guid>
      <pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate>
      <description>Every React tutorial teaches keys the same way - &apos;they help React tell items apart in a list&apos;. That framing is why production React code is full of stale state, ghost animations, and forms that remember the last user&apos;s input. key is a reset primitive, not an identity marker.</description>
      <category>React</category><category>Reconciliation</category><category>Frontend Internals</category>
    </item>
    <item>
      <title>What CI Actually Is. What CD Actually Is. And Why Most Engineers Confuse The Two.</title>
      <link>https://rgndunes.github.io/blog/what-is-ci-what-is-cd</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/what-is-ci-what-is-cd</guid>
      <pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate>
      <description>Everyone says CI/CD. Almost nobody can cleanly define the two letters or draw the line between them. A definitions-first walkthrough: what CI is, what CD is, why there are actually two CDs, and where one ends and the other begins.</description>
      <category>CI/CD</category><category>DevOps</category><category>Frontend Infrastructure</category>
    </item>
    <item>
      <title>How Does DevTools Actually Pause Your Code at a Breakpoint? The V8 Inspector Protocol Nobody Understands</title>
      <link>https://rgndunes.github.io/blog/devtools-breakpoints-v8-inspector-protocol</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/devtools-breakpoints-v8-inspector-protocol</guid>
      <pubDate>Thu, 06 Aug 2026 00:00:00 GMT</pubDate>
      <description>You hit F8 and time stops. Every variable frozen. But how does DevTools actually pause a running JavaScript engine? The answer is a WebSocket, a bespoke protocol from Chrome, and a debugger statement that is not what you think it is.</description>
      <category>Browser Internals</category><category>V8</category><category>DevTools</category>
    </item>
    <item>
      <title>There Are 47 AI Models. I Have Credits for 12 of Them. I Still Don&apos;t Know Which One to Use.</title>
      <link>https://rgndunes.github.io/blog/ai-model-paralysis</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/ai-model-paralysis</guid>
      <pubDate>Mon, 20 Jul 2026 00:00:00 GMT</pubDate>
      <description>When your org gives you access to Claude, Gemini, ChatGPT, and a dozen others - each with different models, effort levels, and credit caps - how do you decide? A framework for choosing AI models that maximises accuracy without burning through your budget.</description>
      <category>AI Tools</category><category>Developer Experience</category><category>Decision Frameworks</category>
    </item>
    <item>
      <title>I Stopped Using npm install. Here&apos;s the 40-Second Trick That Changed How I Debug Dependencies.</title>
      <link>https://rgndunes.github.io/blog/i-stopped-using-npm-install-heres-the-40-second-trick-that-changed-how-i-debug-dependencies</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/i-stopped-using-npm-install-heres-the-40-second-trick-that-changed-how-i-debug-dependencies</guid>
      <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
      <description>Most engineers reinstall node_modules when debugging dependency issues. There&apos;s a faster way that lets you patch, test, and iterate on third-party packages in seconds - without waiting for CI or publishing to a test registry.</description>
      <category>Frontend Infrastructure</category><category>npm</category><category>Developer Experience</category>
    </item>
    <item>
      <title>I Was Drowning in AI Token Limits. Then I Found a Hack That Compresses Text Into Images.</title>
      <link>https://rgndunes.github.io/blog/ai-token-limits-pxpipe-solution</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/ai-token-limits-pxpipe-solution</guid>
      <pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate>
      <description>How one developer&apos;s frustration with Claude&apos;s token costs led to discovering pxpipe - a tool that packs 18 million characters into a 1M token window by converting text to images.</description>
      <category>AI Tooling</category><category>Cost Optimisation</category><category>Claude</category><category>Developer Tools</category><category>Performance</category>
    </item>
    <item>
      <title>Your React Server Components Are Leaking User Data Through Client Boundaries. Here&apos;s How.</title>
      <link>https://rgndunes.github.io/blog/react-server-components-data-leak</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/react-server-components-data-leak</guid>
      <pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate>
      <description>Why the server/client boundary in React Server Components is a security minefield that most teams are crossing blindly - and how serialisation turns your careful access control into a data exposure incident waiting to happen.</description>
      <category>React</category><category>Security</category><category>Server Components</category><category>Next.js</category><category>Architecture</category>
    </item>
    <item>
      <title>Your 100x Faster Rust Build Tool Is Slower Than Webpack. Here&apos;s Why.</title>
      <link>https://rgndunes.github.io/blog/your-rust-build-tool-is-slower-than-webpack</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/your-rust-build-tool-is-slower-than-webpack</guid>
      <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
      <description>Turbopack, SWC, and esbuild promise instant builds. But in real-world monorepos with warm caches and incremental compilation, Webpack still wins. Here&apos;s the nuanced truth about build tool performance that benchmark charts don&apos;t show.</description>
      <category>Build Tools</category><category>Webpack</category><category>Rust</category><category>Performance</category><category>Developer Experience</category>
    </item>
    <item>
      <title>Prompting vs Looping: Why Most Engineers Are Burning Through AI Credits Wrong</title>
      <link>https://rgndunes.github.io/blog/prompting-vs-looping-in-ai</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/prompting-vs-looping-in-ai</guid>
      <pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate>
      <description>The difference between prompting and looping in AI models like Claude isn&apos;t about cost - it&apos;s about control. Here&apos;s what every engineer building with LLMs needs to know about determinism, context retention, and when to let the model think versus when to take control.</description>
      <category>AI Engineering</category><category>LLM</category><category>Architecture</category><category>Production Patterns</category>
    </item>
    <item>
      <title>Tree Shaking Is a Lie: Why Your Bundle Still Ships Dead Code</title>
      <link>https://rgndunes.github.io/blog/tree-shaking-is-a-lie</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/tree-shaking-is-a-lie</guid>
      <pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate>
      <description>The frontend community sold you on tree shaking as the silver bullet for bundle size. But your production bundles are still bloated with unused code. Here&apos;s why the promise was always incomplete - and what actually works.</description>
      <category>Build Systems</category><category>Performance</category><category>Webpack</category><category>Rollup</category><category>Vite</category><category>esbuild</category>
    </item>
    <item>
      <title>I Audited 40 React Codebases. Every Single One Had a useEffect Memory Leak.</title>
      <link>https://rgndunes.github.io/blog/react-useeffect-memory-leaks</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/react-useeffect-memory-leaks</guid>
      <pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate>
      <description>After reviewing over 40 production React codebases, the pattern is impossible to ignore: useEffect-related memory leaks are everywhere. Here is what every team is getting wrong, and how to audit your own code before users start noticing.</description>
      <category>React</category><category>Memory Leaks</category><category>Performance</category><category>JavaScript</category><category>Frontend Engineering</category>
    </item>
    <item>
      <title>Your Production Source Maps Are Leaking Your Entire Codebase to Anyone Who Knows Where to Look</title>
      <link>https://rgndunes.github.io/blog/source-maps-security-vulnerability</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/source-maps-security-vulnerability</guid>
      <pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate>
      <description>Most frontend teams ship source maps to production without realising they&apos;re handing anyone a complete, readable copy of their application code. Here&apos;s what&apos;s actually inside them, how they get exploited, and what to do about it today.</description>
      <category>Security</category><category>Build Systems</category><category>Frontend Infrastructure</category><category>webpack</category><category>Vite</category>
    </item>
    <item>
      <title>12 Months of Vibe Coding in Production: The Technical Debt Report Nobody&apos;s Publishing</title>
      <link>https://rgndunes.github.io/blog/vibe-coding-technical-debt-report</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/vibe-coding-technical-debt-report</guid>
      <pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate>
      <description>We shipped more features in 12 months than in the previous three years combined. We also quietly built the most confusing codebase of my career. Here is the honest audit.</description>
      <category>AI</category><category>Technical Debt</category><category>Production Engineering</category><category>Frontend</category>
    </item>
    <item>
      <title>Hydration Is the Most Expensive Lie in Frontend</title>
      <link>https://rgndunes.github.io/blog/hydration-is-the-most-expensive-lie-in-frontend</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/hydration-is-the-most-expensive-lie-in-frontend</guid>
      <pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate>
      <description>Hydration makes your browser rebuild the entire page a second time just to make it interactive. Here is what it actually costs, and how islands, resumability, and Server Components are quietly replacing it.</description>
      <category>Hydration</category><category>React</category><category>Performance</category><category>Frontend Architecture</category><category>Web Performance</category>
    </item>
    <item>
      <title>I Replaced 12 npm Packages With Browser APIs Nobody Uses. Here&apos;s What Happened.</title>
      <link>https://rgndunes.github.io/blog/replaced-npm-with-browser-apis</link>
      <guid isPermaLink="true">https://rgndunes.github.io/blog/replaced-npm-with-browser-apis</guid>
      <pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate>
      <description>How I audited our production app&apos;s dependency tree, replaced a dozen packages with native browser APIs, and cut our bundle by 58%. A practical guide to the platform features hiding in plain sight.</description>
      <category>Frontend</category><category>Dependencies</category><category>Browser APIs</category><category>Performance</category>
    </item>
  </channel>
</rss>