<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Puru&apos;s Blog</title><description>Everything web development, engineerring, procrastination, and life.</description><link>https://puruvj.dev/</link><item><title>Introducing aibind</title><link>https://puruvj.dev/blog/aibind/</link><guid isPermaLink="true">https://puruvj.dev/blog/aibind/</guid><description>I got tired of rewriting the same AI boilerplate. So I wrote aibind.</description><pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Svelte 5&apos;s &quot;Magic&quot; Debunked: It&apos;s Just Syntactic Sugar</title><link>https://puruvj.dev/blog/svelte-5-magic-debunked/</link><guid isPermaLink="true">https://puruvj.dev/blog/svelte-5-magic-debunked/</guid><description>It&apos;s time to demystify Svelte 5&apos;s magic and see how it&apos;s actually just syntactic sugar.</description><pubDate>Sat, 28 Jun 2025 00:00:00 GMT</pubDate></item><item><title>Building Smart Intervals with Svelte 5</title><link>https://puruvj.dev/blog/svelte-5-interval-rune/</link><guid isPermaLink="true">https://puruvj.dev/blog/svelte-5-interval-rune/</guid><description>How to build an interval that automatically adapts its timing when your app state changes—no manual cleanup required.</description><pubDate>Mon, 14 Jul 2025 00:00:00 GMT</pubDate></item><item><title>Neodrag v3 Alpha: A Complete Rewrite</title><link>https://puruvj.dev/blog/neodrag-v3-alpha/</link><guid isPermaLink="true">https://puruvj.dev/blog/neodrag-v3-alpha/</guid><description>Neodrag V3 Alpha is out! Here&apos;s a complete description of the new architecture,performance improvements, and how to use it with your favorite frameworks.</description><pubDate>Thu, 26 Jun 2025 00:00:00 GMT</pubDate></item><item><title>From 50% Test Failures to 99% Reliability in One Weekend</title><link>https://puruvj.dev/blog/playwright-test-to-vitest/</link><guid isPermaLink="true">https://puruvj.dev/blog/playwright-test-to-vitest/</guid><description>My Playwright drag-and-drop tests failed half the time and couldn&apos;t run on CI. Here&apos;s how I migrated to Vitest browser mode in 2 days and achieved 99% reliability with 60% faster runs.</description><pubDate>Sat, 21 Jun 2025 00:00:00 GMT</pubDate></item><item><title>Type-Safe Persistence and Auto-Theming in Svelte 5</title><link>https://puruvj.dev/blog/svelte-5-runic-persist-theming/</link><guid isPermaLink="true">https://puruvj.dev/blog/svelte-5-runic-persist-theming/</guid><description>Building bulletproof localStorage utilities with cross-tab sync, Zod validation, and automatic cleanup using Svelte 5 runes.</description><pubDate>Mon, 16 Jun 2025 00:00:00 GMT</pubDate></item><item><title>Why I Analyzed 16,384 Bundle Combinations (And You Should Too)</title><link>https://puruvj.dev/blog/neodrag-16k-bundle-combos/</link><guid isPermaLink="true">https://puruvj.dev/blog/neodrag-16k-bundle-combos/</guid><description>How building a modular drag-and-drop library led me to analyze every possible plugin combination and achieve radical bundle size transparency for developers.</description><pubDate>Sat, 14 Jun 2025 00:00:00 GMT</pubDate></item><item><title>Neodrag v3 is coming</title><link>https://puruvj.dev/blog/whats-up-with-neodrag-v3/</link><guid isPermaLink="true">https://puruvj.dev/blog/whats-up-with-neodrag-v3/</guid><description>Neodrag v3 has plugin system performance improvements, revamped architecture, deep-level of control</description><pubDate>Wed, 01 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Life, Buckets &amp; Water</title><link>https://puruvj.dev/blog/life-buckets-water/</link><guid isPermaLink="true">https://puruvj.dev/blog/life-buckets-water/</guid><description>How life is just a bunch of buckets, a tap, and how to make the best of it.</description><pubDate>Sun, 04 Aug 2024 00:00:00 GMT</pubDate></item><item><title>neotraverse: unbloating traverse</title><link>https://puruvj.dev/blog/forking-and-fixing-traverse/</link><guid isPermaLink="true">https://puruvj.dev/blog/forking-and-fixing-traverse/</guid><description>This is the entire process of why and how I forked traverse npm package into neotraverse.</description><pubDate>Thu, 11 Jul 2024 00:00:00 GMT</pubDate></item><item><title>perf: private count vs #count</title><link>https://puruvj.dev/blog/js-class-private-vs-ts-private/</link><guid isPermaLink="true">https://puruvj.dev/blog/js-class-private-vs-ts-private/</guid><description>What are the performance differences between private and public count in JavaScript?</description><pubDate>Fri, 05 Jul 2024 00:00:00 GMT</pubDate></item><item><title>macOS Web: Why I moved from React to Svelte</title><link>https://puruvj.dev/blog/macos-react-to-svelte/</link><guid isPermaLink="true">https://puruvj.dev/blog/macos-react-to-svelte/</guid><description>I recently moved macOS web from Preact to Svelte. Here&apos;s a firsthand account of my experience.</description><pubDate>Tue, 24 Aug 2021 00:00:00 GMT</pubDate></item><item><title>Trying Golang as a JavaScript lover</title><link>https://puruvj.dev/blog/golang-as-javascripter/</link><guid isPermaLink="true">https://puruvj.dev/blog/golang-as-javascripter/</guid><description>I have written JavaScript, TypeScript, Dart, Python, PHP, C, C++, but never tried golang before. Here is my first hand experience trying it out</description><pubDate>Wed, 18 Aug 2021 00:00:00 GMT</pubDate></item><item><title>The Zen of Preact&apos;s source code</title><link>https://puruvj.dev/blog/deep-dive-into-preact-source-code/</link><guid isPermaLink="true">https://puruvj.dev/blog/deep-dive-into-preact-source-code/</guid><description>Dive into Preact&apos;s source code and explore its simplicity</description><pubDate>Sat, 01 May 2021 00:00:00 GMT</pubDate></item><item><title>Get the most out of CSS Modules with TypeScript in 5 minutes</title><link>https://puruvj.dev/blog/css-modules-typescript-intellisense/</link><guid isPermaLink="true">https://puruvj.dev/blog/css-modules-typescript-intellisense/</guid><description>If you&apos;re a TypeScript Dev, here are a few things you can do to get that sweet, sweet CSS class intellisense</description><pubDate>Fri, 14 May 2021 00:00:00 GMT</pubDate></item><item><title>Why I moved from Styled Components to (S)CSS modules</title><link>https://puruvj.dev/blog/move-to-css-modules-from-styled-components/</link><guid isPermaLink="true">https://puruvj.dev/blog/move-to-css-modules-from-styled-components/</guid><description>A little writeup of my reasons behind moving from Styled Components to SCSS modules, and the benefits I got out of this.</description><pubDate>Fri, 16 Apr 2021 00:00:00 GMT</pubDate></item><item><title>Amazing macOS Dock animation in Svelte</title><link>https://puruvj.dev/blog/macos-dock-animation-svelte/</link><guid isPermaLink="true">https://puruvj.dev/blog/macos-dock-animation-svelte/</guid><description>Let&apos;s make the beautiful macOS Dock animation using Svelte</description><pubDate>Fri, 02 Apr 2021 00:00:00 GMT</pubDate></item><item><title>Mindblowing 🤯 TypeScript tricks</title><link>https://puruvj.dev/blog/get-to-know-typescript--mindblowing-typescript-tricks/</link><guid isPermaLink="true">https://puruvj.dev/blog/get-to-know-typescript--mindblowing-typescript-tricks/</guid><description>There&apos;s a lot about TypeScript that most people don&apos;t know. I&apos;ll surface some of the &quot;unknown&quot; stuff in this blog post.</description><pubDate>Fri, 19 Mar 2021 00:00:00 GMT</pubDate></item><item><title>Moving React app to Preact ⚛ in 10 minutes with Vite</title><link>https://puruvj.dev/blog/moving-macos-from-react-to-preact-vite/</link><guid isPermaLink="true">https://puruvj.dev/blog/moving-macos-from-react-to-preact-vite/</guid><description>How I moved my 40+ components app from React to Preact in under 10 minutes</description><pubDate>Tue, 09 Mar 2021 00:00:00 GMT</pubDate></item><item><title>React TypeScript Hooks issue when returning array</title><link>https://puruvj.dev/blog/get-to-know-typescript--react-hooks-return-array-issue/</link><guid isPermaLink="true">https://puruvj.dev/blog/get-to-know-typescript--react-hooks-return-array-issue/</guid><description>React and TypeScript make up a great pair. But when you&apos;re trying to make your own hooks, and returning an array, TypeScript yells at your. Find out why.</description><pubDate>Fri, 19 Feb 2021 00:00:00 GMT</pubDate></item><item><title>Using TypeScript without TypeScript 😎</title><link>https://puruvj.dev/blog/get-to-know-typescript--using-typescript-without-typescript/</link><guid isPermaLink="true">https://puruvj.dev/blog/get-to-know-typescript--using-typescript-without-typescript/</guid><description>Wanna use TypeScript but don&apos;t want all the compiler and tooling overhead? Read on to know how.</description><pubDate>Fri, 12 Feb 2021 00:00:00 GMT</pubDate></item><item><title>An Ode ❤ to TypeScript </title><link>https://puruvj.dev/blog/get-to-know-typescript-an-ode-to-typescript/</link><guid isPermaLink="true">https://puruvj.dev/blog/get-to-know-typescript-an-ode-to-typescript/</guid><description>TypeScript is cool. Super cool. It&apos;s made us Web Dev&apos;s life super easy. Read me being a total fanboy about it.</description><pubDate>Mon, 01 Feb 2021 00:00:00 GMT</pubDate></item><item><title>Bye bye Callbacks, hello Promises in NodeJS</title><link>https://puruvj.dev/blog/promisify-callbacks-in-nodejs/</link><guid isPermaLink="true">https://puruvj.dev/blog/promisify-callbacks-in-nodejs/</guid><description>Completely get rid of callbacks in NodeJS and replace them with the great Promises.</description><pubDate>Mon, 25 Jan 2021 00:00:00 GMT</pubDate></item><item><title>NodeJS Create folder if not exists in 3 lines - No dependencies</title><link>https://puruvj.dev/blog/create-folder-if-not-exists/</link><guid isPermaLink="true">https://puruvj.dev/blog/create-folder-if-not-exists/</guid><description>The simplest and dependency-free way to create a folder in NodeJS if it doesn&apos;t exist</description><pubDate>Mon, 18 Jan 2021 00:00:00 GMT</pubDate></item><item><title>Simple code with fs.promises and async await</title><link>https://puruvj.dev/blog/fs-promises/</link><guid isPermaLink="true">https://puruvj.dev/blog/fs-promises/</guid><description>If you&apos;ve spent some time with Node&apos;s fs API, you know how huge a pain its callback based pattern can get. Read out how to flatten your code using promises and async await syntax</description><pubDate>Mon, 11 Jan 2021 00:00:00 GMT</pubDate></item><item><title>Top level Await is AWESOME!! 😍</title><link>https://puruvj.dev/blog/top-level-await/</link><guid isPermaLink="true">https://puruvj.dev/blog/top-level-await/</guid><description>Top level await is literally the GOAT (Greatest of All Time). In every way. Read on to know why, how to use it, and its implications</description><pubDate>Mon, 28 Dec 2020 00:00:00 GMT</pubDate></item><item><title>Setting up auto-formatting in VSCode in 5 minutes</title><link>https://puruvj.dev/blog/setup-prettier-vscode/</link><guid isPermaLink="true">https://puruvj.dev/blog/setup-prettier-vscode/</guid><description>Set up auto formatting in VSCode in just 5 minutes.</description><pubDate>Mon, 14 Dec 2020 00:00:00 GMT</pubDate></item><item><title>Free Github pro and Perks for Students</title><link>https://puruvj.dev/blog/get-free-github-pro-and-perks/</link><guid isPermaLink="true">https://puruvj.dev/blog/get-free-github-pro-and-perks/</guid><description>Are you a student? Then you better enroll yourself into getting the Github Student Developer Pack. So many great perks. Find out more about it.</description><pubDate>Sun, 20 Dec 2020 00:00:00 GMT</pubDate></item><item><title>BLOG. EVERY. SINGLE. WEEK!!</title><link>https://puruvj.dev/blog/blog-every-week-rant/</link><guid isPermaLink="true">https://puruvj.dev/blog/blog-every-week-rant/</guid><description>Just some random rant to make myself blog every week</description><pubDate>Wed, 09 Dec 2020 00:00:00 GMT</pubDate></item><item><title>Cleaning up tag-along git commits in Pull Requests</title><link>https://puruvj.dev/blog/git-pr-clean-commits/</link><guid isPermaLink="true">https://puruvj.dev/blog/git-pr-clean-commits/</guid><description>It&apos;s easy to submit dirty PRs with unnecessary number of stowaway commits. Learn how to clean this up.</description><pubDate>Mon, 07 Dec 2020 00:00:00 GMT</pubDate></item><item><title>Async Await usage and pitfalls in Array.prototype.map() and chaining</title><link>https://puruvj.dev/blog/chaining-promises-array-methods/</link><guid isPermaLink="true">https://puruvj.dev/blog/chaining-promises-array-methods/</guid><description>Using async await in array methods is quite tricky. But it gets even trickier when you chain multiple array methods. Find out how.</description><pubDate>Tue, 29 Sep 2020 00:00:00 GMT</pubDate></item><item><title>Simplify code by promisifying `setTimeout`</title><link>https://puruvj.dev/blog/flatten-settimeout/</link><guid isPermaLink="true">https://puruvj.dev/blog/flatten-settimeout/</guid><description>Simplify and clean your codebase by making setTimeout more idiomatic using Promises</description><pubDate>Mon, 28 Sep 2020 00:00:00 GMT</pubDate></item><item><title>Split Array into `n` number of chunks</title><link>https://puruvj.dev/blog/split-array-chunks/</link><guid isPermaLink="true">https://puruvj.dev/blog/split-array-chunks/</guid><description>Split an array into `n` number of multiple arrays with JavaScript</description><pubDate>Sun, 27 Sep 2020 00:00:00 GMT</pubDate></item><item><title>GIF to MP4 conversion for web using NodeJS</title><link>https://puruvj.dev/blog/gif-to-mp4-ffmpeg-fluent-web/</link><guid isPermaLink="true">https://puruvj.dev/blog/gif-to-mp4-ffmpeg-fluent-web/</guid><description>GIF to MP4 conversion for performance is all the rage nowadays. But doing so in practice is really difficult, especially for cross-browser compatibility. Learn how to do it right</description><pubDate>Fri, 25 Sep 2020 00:00:00 GMT</pubDate></item><item><title>Image Optimization Automation with Incremental builds</title><link>https://puruvj.dev/blog/how-i-created-personal-site-part-3/</link><guid isPermaLink="true">https://puruvj.dev/blog/how-i-created-personal-site-part-3/</guid><description>In this post, I delve deep into how I automated image optimization on my blog.</description><pubDate>Mon, 29 Jun 2020 00:00:00 GMT</pubDate></item><item><title>Blogging with Markdown</title><link>https://puruvj.dev/blog/how-i-created-personal-site-part-2/</link><guid isPermaLink="true">https://puruvj.dev/blog/how-i-created-personal-site-part-2/</guid><description>In this post, I delve into the details of how I built the blogging with markdown system</description><pubDate>Sun, 28 Jun 2020 00:00:00 GMT</pubDate></item><item><title>Tech Stack &amp; Design</title><link>https://puruvj.dev/blog/how-i-created-personal-site-part-1/</link><guid isPermaLink="true">https://puruvj.dev/blog/how-i-created-personal-site-part-1/</guid><description>In this post, I delve into the details of the design part of how I built my personal site with StencilJS and what did I use to do so.</description><pubDate>Sat, 27 Jun 2020 00:00:00 GMT</pubDate></item><item><title>Safeguarding target=_blank links</title><link>https://puruvj.dev/blog/link-noopener/</link><guid isPermaLink="true">https://puruvj.dev/blog/link-noopener/</guid><description>Do you know adding a link with target=_blank has the potential of crashing your page and is very insecure? Find out how and its prevention.</description><pubDate>Tue, 09 Jun 2020 00:00:00 GMT</pubDate></item><item><title>Web Workers: Intro and Basic Usage</title><link>https://puruvj.dev/blog/web-workers-intro-basic-usage/</link><guid isPermaLink="true">https://puruvj.dev/blog/web-workers-intro-basic-usage/</guid><description>Have you ever heard this term &quot;Web Workers&quot; mentioned somewhere and wondered what the hell is this new thing? let me introduce you to this great tech.</description><pubDate>Fri, 05 Jun 2020 00:00:00 GMT</pubDate></item><item><title>Performantly loading Google Fonts based on Data Saver</title><link>https://puruvj.dev/blog/google-fonts-prefetch/</link><guid isPermaLink="true">https://puruvj.dev/blog/google-fonts-prefetch/</guid><description>Efficiently and Asynchronously load Google Fonts based on Data Saver mode</description><pubDate>Fri, 05 Jun 2020 00:00:00 GMT</pubDate></item><item><title>StencilJS Route Change events - Without any dependencies</title><link>https://puruvj.dev/blog/stencil-router-events/</link><guid isPermaLink="true">https://puruvj.dev/blog/stencil-router-events/</guid><description>How to detect route changes in StencilJS Router using the core StencilJS APIs. No dependencies.</description><pubDate>Wed, 03 Jun 2020 00:00:00 GMT</pubDate></item><item><title>Pitfalls when using Stencil Helmet during Prerendering</title><link>https://puruvj.dev/blog/pitfalls-stencil-helmet-prerendering/</link><guid isPermaLink="true">https://puruvj.dev/blog/pitfalls-stencil-helmet-prerendering/</guid><description>Stencil Helmet can break the whole app really bad on some occasions, some so random that you might never find out why</description><pubDate>Tue, 02 Jun 2020 00:00:00 GMT</pubDate></item><item><title>My First Blog post</title><link>https://puruvj.dev/blog/my-first-blog/</link><guid isPermaLink="true">https://puruvj.dev/blog/my-first-blog/</guid><description>My very first blog post on my very first functional site</description><pubDate>Sun, 31 May 2020 00:00:00 GMT</pubDate></item></channel></rss>