PageSourceSearch

https://blog.greenroots.info/

html greenroots.info collected 2026-10-03 22:14:23 UTC 109,802 bytes, 24 lines download raw bytes

1<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="https://cdn.hashnode.com/res/hashnode/image/upload/v1571822266210/WoU_msKQk.png"/><link rel="stylesheet" href="/_next/static/css/0d16c72050851854.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/7ffcc02a3c67389b.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/c20e76e7d11dec32.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/59fefb2212bd5b60.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-55b36f0cd6c208fe.js"/>
1<script src="/_next/static/chunks/4bd1b696-100b9d70ed4e49c1.js" async=""></script>
1<script src="/_next/static/chunks/9da6db1e-8a4e8c23641c31bf.js" async=""></script>
1<script src="/_next/static/chunks/1255-a242e0ce0372fddf.js" async=""></script>
1<script src="/_next/static/chunks/main-app-bda8a52fe841b3aa.js" async=""></script>
1<script src="/_next/static/chunks/4554-984b480a9db5f3fe.js" async=""></script>
1<script src="/_next/static/chunks/7563-4dfa0994a9b0e37c.js" async=""></script>
1<script src="/_next/static/chunks/9216-9272709ba40c1cfd.js" async=""></script>
1<script src="/_next/static/chunks/2810-6b74d77b4b0dc790.js" async=""></script>
1<script src="/_next/static/chunks/3091-bf1537ff6571a1bd.js" async=""></script>
1<script src="/_next/static/chunks/app/layout-6ae7b4b583d4bba3.js" async=""></script>
1<script src="/_next/static/chunks/app/not-found-b861935655c5698b.js" async=""></script>
1<script src="/_next/static/chunks/5001-fae0bebdd93f95e3.js" async=""></script>
1<script src="/_next/static/chunks/2423-c8b1388240338d7d.js" async=""></script>
1<script src="/_next/static/chunks/652-f40dcb480b4e356f.js" async=""></script>
1<script src="/_next/static/chunks/730-8191af9e9424b148.js" async=""></script>
1<script src="/_next/static/chunks/app/page-cc18ae1a3a7a5ed8.js" async=""></script>
1<meta name="next-size-adjust" content=""/><title>GreenRoots Blog -  A Blog by Tapas Adhikary</title><meta name="description" content="Articles about Tech, JavaScript, Web Technologies, and Career development. "/><meta name="google-site-verification" content="9ZqvoIYW8QVrrbKmTvaMKPom67fXWhS9OGuc1AByxJg"/><meta name="monetization" content="$ilp.uphold.com/mExiJU8rNMp2"/><link rel="canonical" href="https://blog.greenroots.info"/><meta property="og:title" content="GreenRoots Blog -  A Blog by Tapas Adhikary"/><meta property="og:description" content="Articles about Tech, JavaScript, Web Technologies, and Career development. "/><meta property="og:url" content="https://blog.greenroots.info"/><meta property="og:site_name" content="GreenRoots Blog -  A Blog by Tapas Adhikary"/><meta property="og:image" content="https://blog.greenroots.info/api/og/home?og=eyJ0aXRsZSI6IkdyZWVuUm9vdHMlMjBCbG9nJTIwLSUyMCUyMEElMjBCbG9nJTIwYnklMjBUYXBhcyUyMEFkaGlrYXJ5IiwiaXNEZWZhdWx0TW9kZURhcmsiOmZhbHNlLCJwaG90byI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNzYzMjA2OTA2OTYzL2ZmNDExNjE5LTQ1MDAtNDAzNS04NTEyLWFiNjE3OTQ0NDk0NS5wbmc/dz01MDAmaD01MDAmZml0PWNyb3AmY3JvcD1lbnRyb3B5JmF1dG89Y29tcHJlc3MsZm9ybWF0JmZvcm1hdD13ZWJwIiwibG9nbyI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNTcxODIyMjY2MjEwL1dvVV9tc0tRay5wbmciLCJsb2dvRGFyayI6bnVsbCwiaXNUZWFtIjp0cnVlLCJkb21haW4iOiJibG9nLmdyZWVucm9vdHMuaW5mbyIsIm1ldGEiOiJFZHVjYXRvciUyMCU3QyUyMFlvdVR1YmVyJTIwJTdDJTIwQnVpbGRpbmclMjBSZWFjdFBsYXklMjAlN0MlMjBMZXQncyUyMENvbm5lY3QlMEEiLCJmb2xsb3dlcnMiOjMzMjEwLCJhcnRpY2xlcyI6MCwiZmF2aWNvbiI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNTYwODU1NjgzMTM3Lzg1WHRCRERhMi5wbmcifQ=="/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:creator" content="https://twitter.com/tapasadhikary"/><meta name="twitter:title" content="GreenRoots Blog -  A Blog by Tapas Adhikary"/><meta name="twitter:description" content="Articles about Tech, JavaScript, Web Technologies, and Career development. "/><meta name="twitter:image" content="https://blog.greenroots.info/api/og/home?og=eyJ0aXRsZSI6IkdyZWVuUm9vdHMlMjBCbG9nJTIwLSUyMCUyMEElMjBCbG9nJTIwYnklMjBUYXBhcyUyMEFkaGlrYXJ5IiwiaXNEZWZhdWx0TW9kZURhcmsiOmZhbHNlLCJwaG90byI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNzYzMjA2OTA2OTYzL2ZmNDExNjE5LTQ1MDAtNDAzNS04NTEyLWFiNjE3OTQ0NDk0NS5wbmc/dz01MDAmaD01MDAmZml0PWNyb3AmY3JvcD1lbnRyb3B5JmF1dG89Y29tcHJlc3MsZm9ybWF0JmZvcm1hdD13ZWJwIiwibG9nbyI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNTcxODIyMjY2MjEwL1dvVV9tc0tRay5wbmciLCJsb2dvRGFyayI6bnVsbCwiaXNUZWFtIjp0cnVlLCJkb21haW4iOiJibG9nLmdyZWVucm9vdHMuaW5mbyIsIm1ldGEiOiJFZHVjYXRvciUyMCU3QyUyMFlvdVR1YmVyJTIwJTdDJTIwQnVpbGRpbmclMjBSZWFjdFBsYXklMjAlN0MlMjBMZXQncyUyMENvbm5lY3QlMEEiLCJmb2xsb3dlcnMiOjMzMjEwLCJhcnRpY2xlcyI6MCwiZmF2aWNvbiI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNTYwODU1NjgzMTM3Lzg1WHRCRERhMi5wbmcifQ=="/><link rel="icon" href="https://cdn.hashnode.com/res/hashnode/image/upload/v1560855683137/85XtBDDa2.png"/>
1<script type="text/javascript">window.addEventListener('message',function(e){var d=e.data;if(!d||d.__hnWidget!==1||typeof d.h!=='number'||d.h<=0)return;var f=document.querySelectorAll('.hn-widget-frame');for(var i=0;i<f.length;i++){if(f[i].contentWindow===e.source){f[i].style.height=d.h+'px';break;}}});</script>
1<script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script>
1</head><body class="__variable_c2612a __variable_246ccd __variable_3069d5 bg-background dark:bg-background"><div hidden=""><!--$--><!--/$--></div>
1<script>((a2, b2, c4, d3, e2, f2, g4, h3) => {
2          let i3 = document.documentElement, j2 = ["light", "dark"];
3          function k2(b3) {
4            var c5;
5            (Array.isArray(a2) ? a2 : [a2]).forEach((a3) => {
6              let c6 = a3 === "class", d4 = c6 && f2 ? e2.map((a4) => f2[a4] || a4) : e2;
7              c6 ? (i3.classList.remove(...d4), i3.classList.add(f2 && f2[b3] ? f2[b3] : b3)) : i3.setAttribute(a3, b3);
8            }), c5 = b3, h3 && j2.includes(c5) && (i3.style.colorScheme = c5);
9          }
10          if (d3) k2(d3);
11          else try {
12            let a3 = localStorage.getItem(b2) || c4, d4 = g4 && a3 === "system" ? window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light" : a3;
13            k2(d4);
14          } catch {
15          }
16        })("class","theme","system",null,["light","dark"],null,true,true)</script>
16<main id="main-content" class="min-h-screen bg-background dark:bg-background"><header class="sticky top-0 z-50 w-full py-4 bg-background backdrop-blur-sm transition-transform duration-300 translate-y-0"><a href="#main-content" class="sr-only focus:not-sr-only focus:absolute focus:left-4 focus:top-4 focus:z-50 focus:rounded-md focus:bg-background focus:px-4 focus:py-2 focus:text-sm focus:shadow">Skip to main content</a><div class="relative w-full mx-auto xl:max-w-[80rem] 2xl:max-w-[90rem] px-4 sm:px-12 md:px-18 lg:px-16 xl:px-10"><div class="flex items-center justify-between gap-3 xl:hidden"><div class="flex items-center gap-3 min-w-0 flex-1"><a href="https://hashnode.com/?utm_source=https%3A%2F%2Fblog.greenroots.info&amp;utm_medium=referral&amp;utm_campaign=blog_header_logo&amp;utm_content=logo" class="inline-flex items-center justify-center text-lg text-muted-foreground hover:text-foreground transition border rounded-md h-9 w-9 shrink-0 border-border hover:bg-muted"><i class="text-xl fa-brands fa-hashnode" aria-hidden="true"></i><span class="sr-only">Hashnode</span></a><a class="flex items-center" href="/"><img alt="GreenRoots Blog -  A Blog by Tapas Adhikary" width="500" height="125" decoding="async" data-nimg="1" class="w-auto h-auto max-w-40 sm:max-w-48 max-h-10 sm:max-h-12 object-contain" style="color:transparent" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1571822266210/WoU_msKQk.png"/><span class="sr-only">GreenRoots Blog -  A Blog by Tapas Adhikary</span></a></div><div class="flex items-center gap-2 shrink-0"><button class="gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent py-2 h-9 w-9 px-0 flex items-center justify-center text-muted-foreground hover:text-foreground bg-transparent border-border shadow-none" aria-label="Open search (press Control or Command and K)"><i class="fa-jelly fa-search text-sm" aria-hidden="true"></i><span class="sr-only">Open search (press Control or Command and K)</span></button><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent w-9 px-3 h-9 text-muted-foreground hover:text-foreground shadow-none" type="button" id="radix-_R_2j4lfalb_" aria-haspopup="menu" aria-expanded="false" data-state="closed" data-slot="dropdown-menu-trigger"><i class="fa-jelly fa-sun text-sm scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90" aria-hidden="true"></i><i class="fa-jelly fa-moon absolute text-sm scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0" aria-hidden="true"></i><span class="sr-only">Toggle theme</span></button><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border border-input bg-background hover:bg-accent hover:text-accent-foreground py-2 h-9 w-10 px-0 shadow-none" type="button" aria-haspopup="dialog" aria-expanded="false" aria-controls="radix-_R_3j4lfalb_" data-state="closed" data-slot="sheet-trigger"><i class="fa-jelly fa-bars" aria-hidden="true"></i><span class="sr-only">Open menu</span></button></div></div><div class="hidden xl:grid gap-4 items-center xl:grid-cols-[1fr_auto_1fr] xl:gap-6 max-w-full xl:mx-auto xl:max-w-[80rem] 2xl:max-w-[90rem]"><div class="flex items-center w-full gap-3 min-w-0"><a href="https://hashnode.com/?utm_source=https%3A%2F%2Fblog.greenroots.info&amp;utm_medium=referral&amp;utm_campaign=blog_header_logo&amp;utm_content=logo" class="inline-flex items-center justify-center text-lg text-muted-foreground hover:text-foreground transition border rounded-md h-9 w-9 border-border hover:bg-muted"><i class="text-xl fa-brands fa-hashnode" aria-hidden="true"></i><span class="sr-only">Hashnode</span></a><span class="h-6 border-l border-border"></span><a class="flex items-center" href="/">
16<img alt="GreenRoots Blog -  A Blog by Tapas Adhikary" width="500" height="125" decoding="async" data-nimg="1" class="w-auto h-auto max-w-40 sm:max-w-48 max-h-10 sm:max-h-12 object-contain" style="color:transparent" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1571822266210/WoU_msKQk.png"/><span class="sr-only">GreenRoots Blog -  A Blog by Tapas Adhikary</span></a></div><nav aria-label="Main navigation" class="flex justify-center w-full"><nav aria-label="Main" data-orientation="horizontal" dir="ltr" data-slot="navigation-menu" data-viewport="false" class="group/navigation-menu relative flex flex-1 items-center max-w-max justify-center"><div style="position:relative"><ul data-orientation="horizontal" data-slot="navigation-menu-list" class="group flex flex-1 list-none items-center flex-nowrap justify-center gap-1 text-muted-foreground text-sm" dir="ltr"><li data-slot="navigation-menu-item" class="relative"><a data-slot="navigation-menu-link" class="data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground focus:bg-accent focus:text-accent-foreground [&amp;_svg:not([class*=&#x27;text-&#x27;])]:text-muted-foreground flex-col p-2 outline-none focus-visible:outline-1 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-9 px-4 py-2" data-radix-collection-item="" href="/page/collab">Collab</a></li><li data-slot="navigation-menu-item" class="relative"><a data-slot="navigation-menu-link" class="data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground focus:bg-accent focus:text-accent-foreground [&amp;_svg:not([class*=&#x27;text-&#x27;])]:text-muted-foreground flex-col p-2 outline-none focus-visible:outline-1 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-9 px-4 py-2" data-radix-collection-item="" href="/series/git-github-open-source">Open Source</a></li><li data-slot="navigation-menu-item" class="relative"><a data-slot="navigation-menu-link" class="data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground focus:bg-accent focus:text-accent-foreground [&amp;_svg:not([class*=&#x27;text-&#x27;])]:text-muted-foreground flex-col p-2 outline-none focus-visible:outline-1 [&amp;_svg:not([class*=&#x27;size-&#x27;])]:size-4 inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-9 px-4 py-2" data-radix-collection-item="" href="/series/javascript-promises">Promises</a></li><li data-slot="navigation-menu-item" class="relative"><button id="radix-_R_1jl4lfalb_" data-state="closed" aria-expanded="false" data-slot="dropdown-menu-trigger" class="group w-max focus:bg-accent focus:text-accent-foreground data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent outline-none focus-visible:outline-1 group inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focu
16s-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent py-2 h-9 px-3 text-muted-foreground hover:text-foreground bg-transparent shadow-none data-[state=open]:bg-transparent" type="button" aria-haspopup="menu" data-radix-collection-item="">More<!-- --> <span class="ml-1 flex items-center justify-center"><i class="fa-jelly fa-regular fa-angle-down size-3 leading-none transition duration-300 group-data-[state=open]:rotate-180" aria-hidden="true"></i></span></button></li></ul></div></nav></nav><div class="flex items-center justify-end gap-3 text-muted-foreground"><button class="gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent py-2 h-9 w-9 px-0 flex items-center justify-center text-muted-foreground hover:text-foreground bg-transparent border-border shadow-none" aria-label="Open search (press Control or Command and K)"><i class="fa-jelly fa-search text-sm" aria-hidden="true"></i><span class="sr-only">Open search (press Control or Command and K)</span></button><div class="flex items-center gap-3"><button class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent w-9 px-3 h-9 text-muted-foreground hover:text-foreground shadow-none" type="button" id="radix-_R_6t4lfalb_" aria-haspopup="menu" aria-expanded="false" data-state="closed" data-slot="dropdown-menu-trigger"><i class="fa-jelly fa-sun text-sm scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90" aria-hidden="true"></i><i class="fa-jelly fa-moon absolute text-sm scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0" aria-hidden="true"></i><span class="sr-only">Toggle theme</span></button><a target="_blank" rel="noopener" class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 border border-input bg-background hover:bg-accent hover:text-accent-foreground py-2 gap-2 px-3 h-9 shadow-none" href="https://hashnode.com"><i class="text-sm fa-jelly fa-pencil" aria-hidden="true"></i>Write</a></div></div></div></div></header><div data-slot="dialog-header" class="flex flex-col gap-2 text-center sm:text-left sr-only"><h2 id="radix-_R_8lfalbH1_" data-slot="dialog-title" class="text-lg leading-none font-semibold">Command Palette</h2><p id="radix-_R_8lfalbH2_" data-slot="dialog-description" class="text-muted-foreground text-sm">Search for a command to run...</p></div><div class=""><div class="w-full mx-auto xl:max-w-[80rem] 2xl:max-w-[90rem] px-4 sm:px-12 md:px-18 lg:px-16 xl:px-10"><div class="flex flex-col gap-8 pt-2 sm:pt-10"><section class="pb-16"><div class="space-y-6 w-full mx-auto"><section aria-labelledby="_R_15falb_" class="flex flex-col gap-8"><h2 id="_R_15falb_" class="sr-only">Latest articles</h2><div class="flex flex-col gap-8"><div class="rounded-xl border border-border bg-card overflow-hidden"><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4"><div class="order-2 md:order-2 lg:order-1 md:col-span-1 flex flex-col divide-y divide-border md:border-t lg:border-t-0 lg:border-r border-border"><div class="min-h-[140px] md:min-h-40 lg:min-h-[180px] flex-1"><article aria-labelledby="_R_lct5falb_" class="h-full"><a class="block h-full hover:bg-muted transition-colors" href="/react-design-patterns-for-building-maintainable-forms"><div class="flex flex-col gap-3 p-4 h-full"><div class="relative overflow-hidden rounded-lg bg-muted aspect-[800/420]"><img alt="Mastering React Design Patterns for Building Maintainable Forms" loading="lazy" decoding="async" data-nimg="fill" class="object-cover object-center" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1770695507863/3fc0d0b3-e9de-482f-9afb-f8e2cd153339.png"/></div><header class="flex flex-col gap-1"><h3 id="_R_lct5falb_" class="text-foreground text-base font-bold leading-snug tracking-tight transition-colors line-clamp-2">Mastering React Design Patterns for Building Maintainable Forms</h3></header><div class="flex flex-wrap items-center gap-2 text-sm text-muted-foreground mt-auto"><span class="whitespace-nowrap">Feb 10, 2026</span><span class="whitespace-nowrap"><span class="mr-3" aria-hidden="true">·</span>6 min read</span><span class="whitespace-nowrap" title="642 views"><span class="mr-3" aria-hidden="true">·</span>642</span></div></div></a></article></div>
16<div class="min-h-[140px] md:min-h-40 lg:min-h-[180px] flex-1"><article aria-labelledby="_R_15ct5falb_" class="h-full"><a class="block h-full hover:bg-muted transition-colors" href="/javascript-variables-explained-values-references"><div class="flex flex-col gap-3 p-4 h-full"><div class="relative overflow-hidden rounded-lg bg-muted aspect-[800/420]"><img alt="JavaScript Variables Explained Clearly: Values, Types, and How Data Really Works" loading="lazy" decoding="async" data-nimg="fill" class="object-cover object-center" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769602498621/c041e5a8-7b99-4fd3-9b33-643d93a4c6e2.png"/></div><header class="flex flex-col gap-1"><h3 id="_R_15ct5falb_" class="text-foreground text-base font-bold leading-snug tracking-tight transition-colors line-clamp-2">JavaScript Variables Explained Clearly: Values, Types, and How Data Really Works</h3></header><div class="flex flex-wrap items-center gap-2 text-sm text-muted-foreground mt-auto"><span class="whitespace-nowrap">Jan 28, 2026</span><span class="whitespace-nowrap"><span class="mr-3" aria-hidden="true">·</span>5 min read</span><span class="whitespace-nowrap" title="193 views"><span class="mr-3" aria-hidden="true">·</span>193</span></div></div></a></article></div></div><div class="order-1 md:col-span-2 lg:col-span-2 border-b md:border-b-0 border-border"><article aria-labelledby="_R_2ct5falb_" class="h-full"><a class="block h-full hover:bg-muted transition-colors" href="/a-deep-dive-into-ssr-streaming-with-react"><div class="flex flex-col gap-4 p-4 md:p-6 h-full"><div class="relative overflow-hidden rounded-lg bg-muted aspect-[800/420]"><img alt="Goodbye, Slow-Motion Tortoise: A Deep Dive into SSR Streaming" loading="lazy" decoding="async" data-nimg="fill" class="object-cover object-center" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="https://cdn.hashnode.com/uploads/covers/5c9bb4026656f09759cdc1f0/86b649a0-8157-4a5b-a337-15f267809632.png"/></div><header class="flex flex-col gap-2"><h3 id="_R_2ct5falb_" class="text-foreground text-xl sm:text-2xl font-bold leading-snug tracking-tight transition-colors line-clamp-3">Goodbye, Slow-Motion Tortoise: A Deep Dive into SSR Streaming</h3><p class="text-sm sm:text-base leading-relaxed text-muted-foreground line-clamp-3">Traditional SSR is great, but it has a massive buffering problem. Let&#x27;s look into the SSR Streaming and learn how it could be a game changer.</p></header><div class="flex flex-wrap items-center gap-3 text-sm text-muted-foreground mt-auto"><span class="whitespace-nowrap">Jul 21, 2026</span><span class="whitespace-nowrap"><span class="mr-3" aria-hidden="true">·</span>10 min read</span><span class="whitespace-nowrap" title="229 views"><span class="mr-3" aria-hidden="true">·</span>229</span></div></div></a></article></div><div class="order-3 md:col-span-1 flex flex-col divide-y divide-border border-t lg:border-t-0 lg:border-l border-border"><div class="min-h-[140px] md:min-h-40 lg:min-h-[180px] flex-1"><article aria-labelledby="_R_nct5falb_" class="h-full"><a class="block h-full hover:bg-muted transition-colors" href="/javascript-explained-from-scratch"><div class="flex flex-col gap-3 p-4 h-full"><div class="relative overflow-hidden rounded-lg bg-muted aspect-[800/420]"><img alt="JavaScript Explained From Scratch: How the Web Becomes Interactive" loading="lazy" decoding="async" data-nimg="fill" class="object-cover object-center" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769052331247/1b119ae7-b985-4c89-a579-490662cf65de.png"/></div><header class="flex flex-col gap-1"><h3 id="_R_nct5falb_" class="text-foreground text-base font-bold leading-snug tracking-tight transition-colors line-clamp-2">JavaScript Explained From Scratch: How the Web Becomes Interactive</h3></header><div class="flex flex-wrap items-center gap-2 text-sm text-muted-foreground mt-auto"><span class="whitespace-nowrap">Jan 22, 2026</span><span class="whitespace-nowrap"><span class="mr-3" aria-hidden="true">·</span>5 min read</span><span class="whitespace-nowrap" title="179 views"><span class="mr-3" aria-hidden="true">·</span>179</span></div></div></a></article></div>
16<div class="min-h-[140px] md:min-h-40 lg:min-h-[180px] flex-1"><article aria-labelledby="_R_17ct5falb_" class="h-full"><a class="block h-full hover:bg-muted transition-colors" href="/how-does-event-loop-handle-promises-ever-thought"><div class="flex flex-col gap-3 p-4 h-full"><div class="relative overflow-hidden rounded-lg bg-muted aspect-[800/420]"><img alt="Tidbit 01: How Does Event Loop Handle Promises? Ever Thought?" loading="lazy" decoding="async" data-nimg="fill" class="object-cover object-center" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750328438994/7a6e7c3f-5c35-4377-a0ab-ac48faff9cf9.png"/></div><header class="flex flex-col gap-1"><h3 id="_R_17ct5falb_" class="text-foreground text-base font-bold leading-snug tracking-tight transition-colors line-clamp-2">Tidbit 01: How Does Event Loop Handle Promises? Ever Thought?</h3></header><div class="flex flex-wrap items-center gap-2 text-sm text-muted-foreground mt-auto"><span class="whitespace-nowrap">Jun 10, 2025</span><span class="whitespace-nowrap"><span class="mr-3" aria-hidden="true">·</span>2 min read</span><span class="whitespace-nowrap" title="480 views"><span class="mr-3" aria-hidden="true">·</span>480</span></div></div></a></article></div></div></div></div><div class="grid grid-cols-1 gap-6 items-stretch"><aside aria-label="About the publication" class="h-full *:h-full"><div class="rounded-xl border bg-card text-card-foreground transition hover:border-slate-400 dark:hover:border-slate-600 p-5 flex flex-col"><div class="flex flex-col items-center text-center gap-5"><div class="flex flex-col items-center gap-3"><span class="relative flex overflow-hidden rounded-full h-16 w-16 shrink-0"><span class="flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground font-medium text-lg">G</span></span><div class="space-y-1"><p class="text-base font-semibold text-foreground leading-tight">GreenRoots Blog -  A Blog by Tapas Adhikary</p><p class="text-sm text-muted-foreground">186<!-- --> posts</p></div></div><div class="prose prose-sm dark:prose-invert max-w-xs mx-auto text-muted-foreground"><p><strong>Educator</strong> | <a href="https://www.youtube.com/tapasadhikary?sub_confirmation=1" target="_blank" rel="noopener ugc">YouTuber</a> | <a href="https://reactplay.io" target="_blank" rel="noopener ugc">Building ReactPlay</a> | <a href="https://twitter.com/tapasadhikary" target="_blank" rel="noopener ugc">Let's Connect</a></p>
17</div><div class="flex flex-wrap items-center justify-center gap-3"><a href="https://twitter.com/tapasadhikary" target="_blank" rel="noopener" class="text-muted-foreground transition-colors hover:text-foreground" aria-label="Twitter"><i class="fa-brands fa-x-twitter" aria-hidden="true"></i></a><a href="https://instagram.com/tapascript" target="_blank" rel="noopener" class="text-muted-foreground transition-colors hover:text-foreground" aria-label="Instagram"><i class="fa-brands fa-instagram" aria-hidden="true"></i></a><a href="https://github.com/atapas" target="_blank" rel="noopener" class="text-muted-foreground transition-colors hover:text-foreground" aria-label="GitHub"><i class="fa-brands fa-github" aria-hidden="true"></i></a><a href="https://www.linkedin.com/in/tapasadhikary" target="_blank" rel="noopener" class="text-muted-foreground transition-colors hover:text-foreground" aria-label="LinkedIn"><i class="fa-brands fa-linkedin" aria-hidden="true"></i></a><a href="https://www.youtube.com/channel/UCaYr5yxgOyk599Mnb3TGh-g" target="_blank" rel="noopener" class="text-muted-foreground transition-colors hover:text-foreground" aria-label="YouTube"><i class="fa-brands fa-youtube" aria-hidden="true"></i></a><a href="https://tapasadhikary.com" target="_blank" rel="noopener" class="text-muted-foreground transition-colors hover:text-foreground" aria-label="Website"><i class="fa-jelly fa-globe" aria-hidden="true"></i></a><a href="https://hashnode.com/@atapas" target="_blank" rel="noopener" class="text-muted-foreground transition-colors hover:text-foreground" aria-label="Hashnode"><i class="fa-brands fa-hashnode" aria-hidden="true"></i></a><a href="https://fosstodon.org/@tapasadhikary" target="_blank" rel="noopener" class="text-muted-foreground transition-colors hover:text-foreground" aria-label="Mastodon"><i class="fa-brands fa-mastodon" aria-hidden="true"></i></a></div></div></div></aside></div><div class="flex flex-col gap-6"><div class="rounded-xl border border-border bg-card overflow-hidden"><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3"><div class="border-border"><article aria-labelledby="_R_5st5falb_" class="h-full"><a class="block h-full hover:bg-muted transition-colors" href="/top-10-qa-automation-tools-for-startups-in-2026"><div class="flex flex-col gap-3 p-4 md:p-5 h-full"><div class="relative overflow-hidden rounded-lg bg-muted aspect-[800/420]"><img alt="Top 10 QA Automation Tools for Startups in 2026" loading="lazy" decoding="async" data-nimg="fill" class="object-cover object-center" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768198971563/3498069d-e9bb-40e1-80ad-f58b0da08e0e.jpeg"/></div><header class="flex flex-col gap-2"><h3 id="_R_5st5falb_" class="text-foreground text-base sm:text-lg font-bold leading-snug tracking-tight transition-colors line-clamp-2">Top 10 QA Automation Tools for Startups in 2026</h3><p class="text-sm leading-relaxed text-muted-foreground line-clamp-2">The startup landscape is at a critical inflection point for QA testing. While the demand for quality software has never been higher, the State of Testing Report by PractiTest reveals a concerning skills gap: 42% of testers don&#x27;t feel comfortable writ...</p></header><div class="flex flex-wrap items-center gap-2 text-sm text-muted-foreground mt-auto"><span class="whitespace-nowrap">Jun 4, 2025</span><span class="whitespace-nowrap"><span class="mr-3" aria-hidden="true">·</span>20 min read</span><span class="whitespace-nowrap" title="1,477 views"><span class="mr-3" aria-hidden="true">·</span>1.5K</span></div></div></a></article></div><div class="border-t md:border-t-0 md:border-l lg:border-l divide-border border-border"><article aria-labelledby="_R_9st5falb_" class="h-full"><a class="block h-full hover:bg-muted transition-colors" href="/exploring-advanced-javascript-features-ecmascript-2023"><div class="flex flex-col gap-3 p-4 md:p-5 h-full"><div class="relative overflow-hidden rounded-lg bg-muted aspect-[800/420]"><img alt="Exploring Advanced JavaScript Features: A Deep Dive into ECMAScript 2023 Updates" loading="lazy" decoding="async" data-nimg="fill" class="object-cover object-center" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1727083502183/473d42e3-500f-4782-9762-89fdbe5334d8.png"/></div><header class="flex flex-col gap-2"><h3 id="_R_9st5falb_" class="text-foreground text-base sm:text-lg font-bold leading-snug tracking-tight transition-colors line-clamp-2">Exploring Advanced JavaScript Features: A Deep Dive into ECMAScript 2023 Updates</h3><p class="text-sm leading-relaxed text-muted-foreground line-clamp-2">Learn about the addition of latest features in ECMAScript 2023.</p></header><div class="flex flex-wrap items-center gap-2 text-sm text-muted-foreground mt-auto"><span class="whitespace-nowrap">Sep 23, 2024</span><span class="whitespace-nowrap"><span class="mr-3" aria-hidden="true">·</span>6 min read</span><span class="whitespace-nowrap" title="473 views"><span class="mr-3" aria-hidden="true">·</span>473</span></div></div></a></article></div><div class="border-t md:col-span-2 md:border-t lg:col-span-1 lg:border-t-0 lg:border-l border-border"><article aria-labelledby="_R_dst5falb_" class="h-full"><a class="block h-full hover:bg-muted transition-colors" href="/shadcn-dialog-with-form-three-tips"><div class="flex flex-col gap-3 p-4 md:p-5 h-full"><div class="relative overflow-hidden rounded-lg bg-muted aspect-[800/420]"><img alt="Effective Ways to Manage Shadcn Dialog Box: 3 Tips with Code" loading="lazy" decoding="async" data-nimg="fill" class="object-cover object-center" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1726476807909/31999c4c-3498-4cd3-a0ca-b6e732a62088.png"/></div><header class="flex flex-col gap-2"><h3 id="_R_dst5falb_" class="text-foreground text-base sm:text-lg font-bold leading-snug tracking-tight transition-colors line-clamp-2">Effective Ways to Manage Shadcn Dialog Box: 3 Tips with Code</h3><p class="text-sm leading-relaxed text-muted-foreground line-clamp-2">How to Seamlessly Combine shadcn/ui Dialogs with your UI components like forms for Optimal Use, let&#x27;s learn with a project and code examples.</p></header><div class="flex flex-wrap items-center gap-2 text-sm text-muted-foreground mt-auto"><span class="whitespace-nowrap">Sep 16, 2024</span><span class="whitespace-nowrap"><span class="mr-3" aria-hidden="true">·</span>12 min read</span><span class="whitespace-nowrap" title="9,946 views"><span class="mr-3" aria-hidden="true">·</span>9.9K</span></div></div></a></article></div></div></div><div class="rounded-xl border border-border bg-card overflow-hidden"><div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3"><div class="border-border"><article aria-labelledby="_R_6st5falb_" class="h-full"><a class="block h-full hover:bg-muted transition-colors" href="/javascript-array-method-with-immutability"><div class="flex flex-col gap-3 p-4 md:p-5 h-full"><div class="relative overflow-hidden rounded-lg bg-muted aspect-[800/420]"><img alt="Why the with() method of JavaScript Array is a gem?" loading="lazy" decoding="async" data-nimg="fill" class="object-cover object-center" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1719997775222/99f6bdf9-f735-4480-8120-1e699128f213.png"/></div><header class="flex flex-col gap-2"><h3 id="_R_6st5falb_" class="text-foreground text-base sm:text-lg font-bold leading-snug tracking-tight transition-colors line-clamp-2">Why the with() method of JavaScript Array is a gem?</h3><p class="text-sm leading-relaxed text-muted-foreground line-clamp-2">Discover the new with() method in JavaScript Arrays from ECMAScript 2023 with examples and use cases.</p></header><div class="flex flex-wrap items-center gap-2 text-sm text-muted-foreground mt-auto"><span class="whitespace-nowrap">Jul 8, 2024</span><span class="whitespace-nowrap"><span class="mr-3" aria-hidden="true">·</span>5 min read</span><span class="whitespace-nowrap" title="16,145 views"><span class="mr-3" aria-hidden="true">·</span>16K</span></div></div></a></article></div><div class="border-t md:border-t-0 md:border-l lg:border-l divide-border border-border"><article aria-labelledby="_R_ast5falb_" class="h-full"><a class="block h-full hover:bg-muted transition-colors" href="/nextjs-and-next-auth-v5-guide-to-social-logins"><div class="flex flex-col gap-3 p-4 md:p-5 h-full"><div class="relative overflow-hidden rounded-lg bg-muted aspect-[800/420]"><img alt="Next.js and Next-Auth V5: Guide to Social Logins(OAuth)" loading="lazy" decoding="async" data-nimg="fill" class="object-cover object-center" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1718002089699/9f2248ca-6914-4806-9c83-58fcdcc86eb9.png"/></div><header class="flex flex-col gap-2"><h3 id="_R_ast5falb_" class="text-foreground text-base sm:text-lg font-bold leading-snug tracking-tight transition-colors line-clamp-2">Next.js and Next-Auth V5: Guide to Social Logins(OAuth)</h3><p class="text-sm leading-relaxed text-muted-foreground line-clamp-2">Using Next-Auth V5 for Google and GitHub OAUTH Login in a Next.js app: A complete guide</p></header><div class="flex flex-wrap items-center gap-2 text-sm text-muted-foreground mt-auto"><span class="whitespace-nowrap">Jun 12, 2024</span><span class="whitespace-nowrap"><span class="mr-3" aria-hidden="true">·</span>15 min read</span><span class="whitespace-nowrap" title="9,507 views"><span class="mr-3" aria-hidden="true">·</span>9.5K</span></div></div></a></article></div><div class="border-t md:col-span-2 md:border-t lg:col-span-1 lg:border-t-0 lg:border-l border-border"><article aria-labelledby="_R_est5falb_" class="h-full"><a class="block h-full hover:bg-muted transition-colors" href="/what-is-authentication-and-authorization"><div class="flex flex-col gap-3 p-4 md:p-5 h-full"><div class="relative overflow-hidden rounded-lg bg-muted aspect-[800/420]"><img alt="What is Authentication and Authorization - Explain like I am five" loading="lazy" decoding="async" data-nimg="fill" class="object-cover object-center" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" src="https://cdn.hashnode.com/res/hashnode/image/upload/v1710238617433/03d1813f-828a-4e1a-8a9e-07645a39e2ea.png"/></div><header class="flex flex-col gap-2"><h3 id="_R_est5falb_" class="text-foreground text-base sm:text-lg font-bold leading-snug tracking-tight transition-colors line-clamp-2">What is Authentication and Authorization - Explain like I am five</h3><p class="text-sm leading-relaxed text-muted-foreground line-clamp-2">Learn the concept of authentication and authorization from this visual tutorial. You will find it easy to grasp the concepts to build things further.</p></header><div class="flex flex-wrap items-center gap-2 text-sm text-muted-foreground mt-auto"><span class="whitespace-nowrap">Mar 20, 2024</span><span class="whitespace-nowrap"><span class="mr-3" aria-hidden="true">·</span>8 min read</span><span class="whitespace-nowrap" title="1,110 views"><span class="mr-3" aria-hidden="true">·</span>1.1K</span></div></div></a></article></div></div></div></div></div><div class="flex justify-center py-8"><button type="button" class="group flex items-center gap-2 rounded-lg px-5 py-2.5 text-sm font-medium text-muted-foreground transition hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary disabled:opacity-50" aria-controls="_R_15falbH1_" aria-label="Load more posts"><span aria-live="polite">Load more posts</span><i class="fa-regular fa-arrow-down text-sm transition-transform group-hover:translate-y-0.5" aria-hidden="true"></i></button></div></section></div></section></div></div></div>
17<script type="application/ld+json">{"@context":"https://schema.org","@type":"Blog","name":"GreenRoots Blog -  A Blog by Tapas Adhikary","url":"https://blog.greenroots.info","description":"Educator | YouTuber | Building ReactPlay | Let's Connect\n","mainEntityOfPage":{"@type":"WebPage","url":"https://blog.greenroots.info"},"publisher":{"@type":"Organization","name":"GreenRoots Blog -  A Blog by Tapas Adhikary","url":"https://blog.greenroots.info"},"image":{"@type":"ImageObject","url":"https://blog.greenroots.info/api/og/home?og=eyJ0aXRsZSI6IkdyZWVuUm9vdHMlMjBCbG9nJTIwLSUyMCUyMEElMjBCbG9nJTIwYnklMjBUYXBhcyUyMEFkaGlrYXJ5IiwiaXNEZWZhdWx0TW9kZURhcmsiOmZhbHNlLCJwaG90byI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNzYzMjA2OTA2OTYzL2ZmNDExNjE5LTQ1MDAtNDAzNS04NTEyLWFiNjE3OTQ0NDk0NS5wbmc/dz01MDAmaD01MDAmZml0PWNyb3AmY3JvcD1lbnRyb3B5JmF1dG89Y29tcHJlc3MsZm9ybWF0JmZvcm1hdD13ZWJwIiwibG9nbyI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNTcxODIyMjY2MjEwL1dvVV9tc0tRay5wbmciLCJpc1RlYW0iOnRydWUsImRvbWFpbiI6ImJsb2cuZ3JlZW5yb290cy5pbmZvIiwibWV0YSI6IkVkdWNhdG9yJTIwJTdDJTIwWW91VHViZXIlMjAlN0MlMjBCdWlsZGluZyUyMFJlYWN0UGxheSUyMCU3QyUyMExldCdzJTIwQ29ubmVjdCUwQSIsImZvbGxvd2VycyI6MzMyMTAsImFydGljbGVzIjowLCJmYXZpY29uIjoiaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE1NjA4NTU2ODMxMzcvODVYdEJERGEyLnBuZyJ9"},"sameAs":["https://x.com/tapasadhikary","https://instagram.com/tapascript","https://github.com/atapas","https://tapasadhikary.com","https://hashnode.com/@atapas","https://www.youtube.com/channel/UCaYr5yxgOyk599Mnb3TGh-g","https://www.linkedin.com/in/tapasadhikary","https://fosstodon.org/@tapasadhikary"]}</script>
17<footer class="px-4 pt-8 pb-20 sm:px-8 text-muted-foreground" aria-label="Footer"><div class="w-full max-w-4xl mx-auto"><div class="flex flex-col items-center gap-4 text-center text-sm"><section id="impressum" class="w-full max-w-2xl pt-3 text-left text-sm text-muted-foreground text-center [&amp;_*]:text-center [&amp;_*]:mx-auto" aria-label="Impressum"><div class="prose prose-sm prose-stone dark:prose-invert max-w-none text-muted-foreground prose-a:text-muted-foreground prose-a:no-underline prose-a:transition prose-a:hover:text-foreground [&amp;_ul]:list-none [&amp;_ol]:list-none"><h4>Learn from Video Tutorials ✨</h4>
18<ul>
19<li>▶️ <a href="https://www.youtube.com/tapasadhikary?sub_confirmation=1" target="_blank" rel="noopener ugc">My YouTube Channel</a></li>
20</ul>
21<h4>Blogs I enjoy reading 👇</h4>
22<ul>
23<li><a href="https://lo-victoria.com/" target="_blank" rel="noopener ugc">Victoria Lo's Blog</a> | <a href="https://daily-dev-tips.com/" target="_blank" rel="noopener ugc">Chris's Daily Dev Tips</a> | <a href="https://markodenic.com/blog/" target="_blank" rel="noopener ugc">Marko Denic's Post</a></li>
24</ul></div><div class="my-6 h-px w-full bg-border" aria-hidden="true"></div></section><p class="font-medium"><time dateTime="2026"><span class="font-sans">©</span> <!-- -->2026</time> <!-- -->GreenRoots Blog -  A Blog by Tapas Adhikary</p><nav aria-label="Footer navigation"><ul class="flex flex-wrap justify-center gap-4 text-sm tracking-wide"><li><a class="transition hover:text-foreground" href="/archive">Archive</a></li><li><a class="transition hover:text-foreground" href="/recommendations">Recommendations</a></li><li><a class="transition hover:text-foreground" target="_blank" rel="noopener" href="https://hashnode.com/privacy-policy">Privacy</a></li><li><a class="transition hover:text-foreground" target="_blank" rel="noopener" href="https://hashnode.com/terms">Terms</a></li></ul></nav><div class="pt-8 flex justify-center gap-6"><a target="_blank" rel="noopener" class="flex items-center gap-2 text-sm transition hover:text-foreground" title="Sitemap" href="/sitemap.xml"><i class="fa-regular fa-sitemap"></i><span>Sitemap</span></a><a target="_blank" rel="noopener" class="flex items-center gap-2 text-sm transition hover:text-foreground" title="RSS Feed" href="/rss.xml"><i class="fa-regular fa-rss"></i><span>RSS</span></a></div><div class="pt-10 text-center"><a target="_blank" rel="noopener" aria-label="Visit Hashnode (opens in a new tab)" class="inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&amp;_svg]:pointer-events-none [&amp;_svg]:size-4 [&amp;_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-10 rounded-md text-xl px-5 py-4" href="https://hashnode.com/?utm_source=https%3A%2F%2Fblog.greenroots.info&amp;utm_medium=referral&amp;utm_campaign=blog_footer_logo&amp;utm_content=logo"><svg fill="none" viewBox="0 0 282 39" aria-hidden="true" class="h-6 w-auto min-w-[9.5rem] text-muted-foreground transition hover:text-foreground"><path fill="currentColor" d="M2.68 13.032c-3.573 3.505-3.573 9.363 0 12.936L13.032 36.32c3.505 3.573 9.363 3.573 12.936 0L36.32 25.968c3.573-3.573 3.573-9.431 0-12.936L25.968 2.68c-3.573-3.573-9.431-3.573-12.936 0zm12.211 1.935c2.507-2.521 6.582-2.544 9.104-.038s2.544 6.582.038 9.104-6.582 2.544-9.104.038-2.544-6.582-.038-9.104"></path><path fill="currentColor" d="M268.379 39q-6.322 0-10.35-4.108-4.002-4.134-4.002-10.483 0-6.296 4.002-10.43 4-4.135 10.163-4.135 6.028 0 9.817 3.734 3.814 3.735 3.814 9.497v2.8h-24.248v-4.054h17.633q-.187-2.747-2.054-4.508-1.868-1.76-4.962-1.76-3.28-.001-5.388 2.374-2.108 2.373-2.108 6.375 0 4.188 2.348 6.695 2.347 2.481 5.895 2.481 1.68 0 2.934-.453a8.5 8.5 0 0 0 2.321-1.307q1.041-.854 2.268-2.614l4.694 2.96q-1.707 2.748-3.494 4.135a12.7 12.7 0 0 1-3.975 2.081q-2.187.72-5.308.72m-33.496 0q-5.575 0-9.283-4.028-3.681-4.029-3.681-10.484 0-6.43 3.761-10.51 3.76-4.108 9.47-4.108 2.8 0 5.175 1.2 2.4 1.174 3.628 3.148l.026-.08V0h7.016v38.2h-6.722v-4.722l.64.8-.694.133q-1.28 2.108-3.788 3.361Q237.924 39 234.883 39m1.627-6.002q3.308 0 5.495-2.428t2.188-6.135q0-3.762-2.214-6.109-2.214-2.374-5.469-2.374-3.28 0-5.522 2.347-2.214 2.348-2.214 6.163 0 3.76 2.214 6.162 2.214 2.374 5.522 2.374M205.811 39q-6.376 0-10.537-4.161-4.161-4.188-4.161-10.404 0-6.321 4.161-10.456 4.188-4.135 10.537-4.135 6.348 0 10.537 4.161 4.188 4.161 4.188 10.43 0 6.216-4.188 10.404Q212.186 39 205.811 39m0-6.162q3.307 0 5.575-2.374 2.267-2.374 2.267-6.055 0-3.707-2.294-6.056-2.267-2.347-5.548-2.347-3.308 0-5.575 2.374-2.268 2.348-2.268 6.029t2.241 6.055q2.268 2.374 5.602 2.374M162.586 38.2V10.644h6.802v5.015l-.8-.987h.906q1.308-2.187 3.762-3.494 2.48-1.335 5.228-1.334 4.615 0 7.256 2.8 2.667 2.776 2.667 7.603V38.2h-
247.069V21.794q0-2.854-1.387-4.401t-4.134-1.547q-2.614 0-4.402 1.974-1.76 1.974-1.76 4.881V38.2zm-30.181 0V0h6.962v14.698h.134q1.2-2.187 3.574-3.521 2.375-1.335 5.229-1.334 4.615 0 7.255 2.828 2.668 2.801 2.668 7.522V38.2h-7.069V21.794q0-2.827-1.387-4.402-1.387-1.573-4.055-1.573-2.587 0-4.428 2.027-1.814 2.027-1.814 4.962v15.391zm-14.416.8q-2.882 0-5.015-.64-2.108-.614-3.761-1.84-1.654-1.228-2.668-2.695l-.987-1.467 4.695-3.174.773 1.067a9.1 9.1 0 0 0 1.788 1.814 8.2 8.2 0 0 0 2.32 1.2q1.308.4 3.068.4 2.161 0 3.441-.8 1.308-.8 1.307-2.294 0-1.36-1.147-2.108-1.12-.747-5.068-1.654-5.335-1.253-7.656-3.334-2.32-2.107-2.321-5.362 0-3.76 3.148-6.002 3.148-2.267 7.923-2.267 2.454 0 4.348.507t3.388 1.493q1.493.988 2.454 2.188l.987 1.2-4.482 3.255-.667-.774a7.4 7.4 0 0 0-1.627-1.387 6.4 6.4 0 0 0-2.054-.88 9.5 9.5 0 0 0-2.401-.294q-1.974 0-3.201.8-1.2.774-1.2 1.921 0 1.254 1.12 2.027 1.147.748 5.229 1.681 5.334 1.227 7.629 3.308 2.294 2.055 2.294 5.308 0 4.029-3.228 6.43Q123.217 39 117.989 39M87.61 39q-4.508 0-7.335-2.454-2.828-2.481-2.828-6.482 0-4.188 3.254-6.669t8.483-2.48q2.082 0 4.028.426 1.974.427 3.361 1.12v-1.6q0-2.588-1.813-4.082-1.788-1.493-4.615-1.493-1.628 0-2.801.373a8.7 8.7 0 0 0-2.188.987q-.987.614-1.84 1.414l-.854.8-4.081-3.788 1.307-1.173a18.7 18.7 0 0 1 2.934-2.108q1.601-.933 3.601-1.44t4.589-.507q5.868 0 9.229 2.88 3.361 2.882 3.361 8.084V38.2h-6.749v-5.922l1.654 2.187h-1.76q-1.308 2.055-3.655 3.308Q90.545 39 87.611 39m1.814-4.988q3.148 0 5.149-2.187 2-2.215 2-5.309v-.08q-1.12-.693-2.72-1.094a13 13 0 0 0-3.388-.426q-2.828 0-4.562 1.2-1.734 1.173-1.734 3.521 0 2.028 1.468 3.201t3.787 1.174M49 38.2V0h6.962v14.698h.134q1.2-2.187 3.574-3.521 2.375-1.335 5.229-1.334 4.615 0 7.255 2.828 2.668 2.801 2.668 7.522V38.2h-7.07V21.794q0-2.827-1.386-4.402-1.387-1.573-4.055-1.573-2.587 0-4.428 2.027-1.815 2.027-1.814 4.962v15.391z"></path></svg></a></div></div></div></footer></main><!--$--><!--/$-->
24<script src="/_next/static/chunks/webpack-55b36f0cd6c208fe.js" id="_R_" async=""></script>
24<script>(self.__next_f=self.__next_f||[]).push([0])</script>
24<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[16174,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"2810\",\"static/chunks/2810-6b74d77b4b0dc790.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"7177\",\"static/chunks/app/layout-6ae7b4b583d4bba3.js\"],\"ThemeProvider\"]\n3:I[82180,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"2810\",\"static/chunks/2810-6b74d77b4b0dc790.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"7177\",\"static/chunks/app/layout-6ae7b4b583d4bba3.js\"],\"TooltipProvider\"]\n4:I[63851,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"2810\",\"static/chunks/2810-6b74d77b4b0dc790.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"7177\",\"static/chunks/app/layout-6ae7b4b583d4bba3.js\"],\"UrqlProvider\"]\n5:I[82714,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"2810\",\"static/chunks/2810-6b74d77b4b0dc790.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"7177\",\"static/chunks/app/layout-6ae7b4b583d4bba3.js\"],\"ConsentManager\"]\n6:I[9766,[],\"\"]\n7:I[98924,[],\"\"]\n8:I[33293,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"4345\",\"static/chunks/app/not-found-b861935655c5698b.js\"],\"default\"]\n9:I[21447,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"2810\",\"static/chunks/2810-6b74d77b4b0dc790.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"7177\",\"static/chunks/app/layout-6ae7b4b583d4bba3.js\"],\"Integrations\"]\na:I[35514,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"2810\",\"static/chunks/2810-6b74d77b4b0dc790.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"7177\",\"static/chunks/app/layout-6ae7b4b583d4bba3.js\"],\"Analytics\"]\nc:I[24431,[],\"OutletBoundary\"]\ne:I[15278,[],\"AsyncMetadataOutlet\"]\n10:I[24431,[],\"ViewportBoundary\"]\n12:I[24431,[],\"MetadataBoundary\"]\n13:\"$Sreact.suspense\"\n15:I[57150,[],\"\"]\n:HL[\"/_next/static/media/22a5144ee8d83bca-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/72a2a501b11d0ccb.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/8934b430a4adeb19-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/8e9860b6e62d6359-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/c4b700dcb2187787-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/0d16c72050851854.css\",\"style\"]\n:HL[\"/_next/static/css/7ffcc02a3c67389b.css\",\"style\"]\n:HL[\"/_next/static/css/c20e76e7d11dec32.css\",\"style\"]\n:HL[\"/_next/static/css/59fefb2212bd5b60.css\",\"style\"]\n0:{\"P\":null,\"b\":\"RrCGzNVHUG674hJ_sjvms\",\"p\":\"\",\"c\":[\"\",\"?x-host=blog.greenroots.info\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__?{\\\"x-host\\\":\\\"blog.greenroots.info\\\"}\",{}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/0d16c72050851854.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/7ffcc02a3c67389b.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/c20e76e7d11dec32.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"3\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/59fefb2212bd5b60.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"script\",null,{\"type\":\"text"])</script>
24<script>self.__next_f.push([1,"/javascript\",\"dangerouslySetInnerHTML\":{\"__html\":\"window.addEventListener('message',function(e){var d=e.data;if(!d||d.__hnWidget!==1||typeof d.h!=='number'||d.h\u003c=0)return;var f=document.querySelectorAll('.hn-widget-frame');for(var i=0;i\u003cf.length;i++){if(f[i].contentWindow===e.source){f[i].style.height=d.h+'px';break;}}});\"}}]}],[\"$\",\"body\",null,{\"className\":\"__variable_c2612a __variable_246ccd __variable_3069d5 bg-background dark:bg-background\",\"children\":[\"$\",\"$L2\",null,{\"attribute\":\"class\",\"defaultTheme\":\"system\",\"enableSystem\":true,\"disableTransitionOnChange\":true,\"children\":[\"$\",\"$L3\",null,{\"children\":[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$L5\",null,{\"children\":[[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L8\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}],[\"$\",\"$L9\",null,{}],[\"$\",\"$La\",null,{}]]}]}]}]}]}]]}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[\"$Lb\",null,[\"$\",\"$Lc\",null,{\"children\":[\"$Ld\",[\"$\",\"$Le\",null,{\"promise\":\"$@f\"}]]}]]}],{},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L10\",null,{\"children\":\"$L11\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L12\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$13\",null,{\"fallback\":null,\"children\":\"$L14\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$15\",[]],\"s\":false,\"S\":false}\n11:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nd:null\n16:I[80622,[],\"IconMark\"]\nf:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"GreenRoots Blog -  A Blog by Tapas Adhikary\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Articles about Tech, JavaScript, Web Technologies, and Career development. \"}],[\"$\",\"meta\",\"2\",{\"name\":\"google-site-verification\",\"content\":\"9ZqvoIYW8QVrrbKmTvaMKPom67fXWhS9OGuc1AByxJg\"}],[\"$\",\"meta\",\"3\",{\"name\":\"monetization\",\"content\":\"$$ilp.uphold.com/mExiJU8rNMp2\"}],[\"$\",\"link\",\"4\",{\"rel\":\"canonical\",\"href\":\"https://blog.greenroots.info\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:title\",\"content\":\"GreenRoots Blog -  A Blog by Tapas Adhikary\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:description\",\"content\":\"Articles about Tech, JavaScript, Web Technologies, and Career development. \"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:url\",\"content\":\"https://blog.greenroots.info\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:site_name\",\"content\":\"GreenRoots Blog -  A Blog by Tapas Adhikary\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:image\",\"content\":\"https://blog.greenroots.info/api/og/home?og=eyJ0aXRsZSI6IkdyZWVuUm9vdHMlMjBCbG9nJTIwLSUyMCUyMEElMjBCbG9nJTIwYnklMjBUYXBhcyUyMEFkaGlrYXJ5IiwiaXNEZWZhdWx0TW9kZURhcmsiOmZhbHNlLCJwaG90byI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNzYzMjA2OTA2OTYzL2ZmNDExNjE5LTQ1MDAtNDAzNS04NTEyLWFiNjE3OTQ0NDk0NS5wbmc/dz01MDAmaD01MDAmZml0PWNyb3AmY3JvcD1lbnRyb3B5JmF1dG89Y29tcHJlc3MsZm9ybWF0JmZvcm1hdD13ZWJwIiwibG9nbyI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNTcxODIyMjY2MjEwL1dvVV9tc0tRay5wbmciLCJsb2dvRGFyayI6bnVsbCwiaXNUZWFtIjp0cnVlLCJkb21haW4iOiJibG9nLmdyZWVucm9vdHMuaW5mbyIsIm1ldGEiOiJFZHVjYXRvciUyMCU3QyUyMFlvdVR1YmVyJTIwJTdDJTIwQnVpbGRpbmclMjBSZWFjdFBsYXklMjAlN0MlMjBMZXQncyUyMENvbm5lY3QlMEEiLCJmb2xsb3dlcnMiOjMzMjEwLCJhcnRpY2xlcyI6MCwiZmF2aWNvbiI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNTYwODU1NjgzMTM3Lzg1WHRCRERhMi5wbmcifQ==\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:creator\",\"content\":\"https://twitter.com/tapasadhikary\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:title\",\"content\":\"GreenRoots Blog -  A Blog by Tapas Adhikary\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:description\",\"content\":\"Articles about Tech, JavaScript, Web T"])</script>
24<script>self.__next_f.push([1,"echnologies, and Career development. \"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:image\",\"content\":\"https://blog.greenroots.info/api/og/home?og=eyJ0aXRsZSI6IkdyZWVuUm9vdHMlMjBCbG9nJTIwLSUyMCUyMEElMjBCbG9nJTIwYnklMjBUYXBhcyUyMEFkaGlrYXJ5IiwiaXNEZWZhdWx0TW9kZURhcmsiOmZhbHNlLCJwaG90byI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNzYzMjA2OTA2OTYzL2ZmNDExNjE5LTQ1MDAtNDAzNS04NTEyLWFiNjE3OTQ0NDk0NS5wbmc/dz01MDAmaD01MDAmZml0PWNyb3AmY3JvcD1lbnRyb3B5JmF1dG89Y29tcHJlc3MsZm9ybWF0JmZvcm1hdD13ZWJwIiwibG9nbyI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNTcxODIyMjY2MjEwL1dvVV9tc0tRay5wbmciLCJsb2dvRGFyayI6bnVsbCwiaXNUZWFtIjp0cnVlLCJkb21haW4iOiJibG9nLmdyZWVucm9vdHMuaW5mbyIsIm1ldGEiOiJFZHVjYXRvciUyMCU3QyUyMFlvdVR1YmVyJTIwJTdDJTIwQnVpbGRpbmclMjBSZWFjdFBsYXklMjAlN0MlMjBMZXQncyUyMENvbm5lY3QlMEEiLCJmb2xsb3dlcnMiOjMzMjEwLCJhcnRpY2xlcyI6MCwiZmF2aWNvbiI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNTYwODU1NjgzMTM3Lzg1WHRCRERhMi5wbmcifQ==\"}],[\"$\",\"link\",\"18\",{\"rel\":\"icon\",\"href\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1560855683137/85XtBDDa2.png\"}],[\"$\",\"$L16\",\"19\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n14:\"$f:metadata\"\n17:I[652,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"5001\",\"static/chunks/5001-fae0bebdd93f95e3.js\",\"2423\",\"static/chunks/2423-c8b1388240338d7d.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"652\",\"static/chunks/652-f40dcb480b4e356f.js\",\"730\",\"static/chunks/730-8191af9e9424b148.js\",\"8974\",\"static/chunks/app/page-cc18ae1a3a7a5ed8.js\"],\"BlogHeader\"]\nb:[\"$\",\"main\",null,{\"id\":\"main-content\",\"className\":\"min-h-screen bg-background dark:bg-background\",\"children\":[[\"$\",\"$L17\",null,{\"publication\":{\"__typename\":\"Publication\",\"id\":\"5cb472db602e12c87a71898d\",\"url\":\"https://blog.greenroots.info\",\"canonicalURL\":\"https://blog.greenroots.info\",\"urlPattern\":\"simple\",\"title\":\"GreenRoots Blog -  A Blog by Tapas Adhikary\",\"displayTitle\":\"GreenRoots Blog -  A Blog by Tapas Adhikary\",\"hasBadges\":true,\"descriptionSEO\":\"Articles about Tech, JavaScript, Web Technologies, and Career development. \",\"seo\":{\"title\":null,\"description\":\"Articles about Tech, JavaScript, Web Technologies, and Career development. \",\"__typename\":\"SEO\"},\"publicMembers\":{\"totalDocuments\":1,\"__typename\":\"PublicMembers\"},\"about\":{\"html\":\"\u003cp\u003e\u003cstrong\u003eEducator\u003c/strong\u003e | \u003ca href=\\\"https://www.youtube.com/tapasadhikary?sub_confirmation=1\\\"\u003eYouTuber\u003c/a\u003e | \u003ca href=\\\"https://reactplay.io\\\"\u003eBuilding ReactPlay\u003c/a\u003e | \u003ca href=\\\"https://twitter.com/tapasadhikary\\\"\u003eLet's Connect\u003c/a\u003e\u003c/p\u003e\\n\",\"text\":\"Educator | YouTuber | Building ReactPlay | Let's Connect\\n\",\"__typename\":\"Content\",\"markdown\":\"**Educator** | [YouTuber](https://www.youtube.com/tapasadhikary?sub_confirmation=1) | [Building ReactPlay](https://reactplay.io) | [Let's Connect](https://twitter.com/tapasadhikary)\"},\"features\":{\"proTeam\":{\"isEnabled\":false,\"__typename\":\"ProTeamFeature\"},\"newsletter\":{\"isEnabled\":true,\"__typename\":\"NewsletterFeature\"},\"viewCount\":{\"isEnabled\":true,\"__typename\":\"ViewCountFeature\"},\"readTime\":{\"isEnabled\":true,\"__typename\":\"ReadTimeFeature\"},\"textSelectionSharer\":{\"isEnabled\":false,\"__typename\":\"TextSelectionSharerFeature\"},\"gptBotCrawling\":{\"__typename\":\"GPTBotCrawlingFeature\",\"isEnabled\":true},\"headlessCMS\":{\"isEnabled\":false,\"__typename\":\"HeadlessCMSFeature\"},\"__typename\":\"PublicationFeatures\"},\"aeoSettings\":{\"isEnabled\":false,\"llmsTxtEnabled\":true,\"crawlers\":{\"gptBot\":true,\"claudeBot\":true,\"perplexityBot\":true,\"googleExtended\":true,\"ccBot\":true,\"__typename\":\"AeoCrawlerSettings\"},\"__typename\":\"PublicationAeoSettings\"},\"metaTags\":\"\u003cmeta name=\\\"google-site-verification\\\" content=\\\"9ZqvoIYW8QVrrbKmTvaMKPom67fXWhS9OGuc1AByxJg\\\" /\u003e\\n\u003cmeta name=\\\"monetization\\\" content=\\\"$ilp.uphold.com/mExiJU8rNMp2\\\"\u003e\",\"ogMetaData\":{\"image\":null,\"__typename\":\"OpenGra
24phMetaData\"},\"author\":{\"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"name\":\"Tapas Adhikary\",\"username\":\"atapas\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode"])</script>
24<script>self.__next_f.push([1,"/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"preferences\":{\"__typename\":\"PublicationPreferences\",\"logo\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1571822266210/WoU_msKQk.png\",\"darkMode\":{\"__typename\":\"DarkModePreferences\",\"logo\":null,\"enabled\":false},\"navbarItems\":[{\"__typename\":\"PublicationNavbarItem\",\"id\":\"647f24a11147de02efa76f55\",\"label\":\"Collab\",\"url\":null,\"type\":\"page\",\"series\":null,\"page\":{\"__typename\":\"StaticPage\",\"id\":\"647f22611147de02efa76ebd\",\"slug\":\"collab\"}},{\"__typename\":\"PublicationNavbarItem\",\"id\":\"647f24791147de02efa76f1c\",\"label\":\"Open Source\",\"url\":null,\"type\":\"series\",\"series\":{\"__typename\":\"Series\",\"id\":\"6336554bfa20fa4bc8e549a6\",\"slug\":\"git-github-open-source\"},\"page\":null},{\"__typename\":\"PublicationNavbarItem\",\"id\":\"647f247f1147de02efa76f2a\",\"label\":\"Promises\",\"url\":null,\"type\":\"series\",\"series\":{\"__typename\":\"Series\",\"id\":\"610368709036db5b3513b66f\",\"slug\":\"javascript-promises\"},\"page\":null},{\"__typename\":\"PublicationNavbarItem\",\"id\":\"647f24871147de02efa76f35\",\"label\":\"React\",\"url\":null,\"type\":\"series\",\"series\":{\"__typename\":\"Series\",\"id\":\"6451c56b02f36ce6e3008981\",\"slug\":\"react\"},\"page\":null},{\"__typename\":\"PublicationNavbarItem\",\"id\":\"647f248d1147de02efa76f41\",\"label\":\"Blogging\",\"url\":null,\"type\":\"series\",\"series\":{\"__typename\":\"Series\",\"id\":\"5fb4be1cb589f1618af9e4d1\",\"slug\":\"blogging-tips-and-tricks\"},\"page\":null},{\"__typename\":\"PublicationNavbarItem\",\"id\":\"6451ced902f36ce6e3008a58\",\"label\":\"Support Me\",\"url\":\"https://blog.greenroots.info/sponsor\",\"type\":\"link\",\"series\":null,\"page\":null},{\"__typename\":\"PublicationNavbarItem\",\"id\":\"647f24951147de02efa76f4f\",\"label\":\"Tips and Tricks\",\"url\":null,\"type\":\"series\",\"series\":{\"__typename\":\"Series\",\"id\":\"6018de706f4ec96a5b77a31b\",\"slug\":\"learn-with-tips-tricks\"},\"page\":null},{\"__typename\":\"PublicationNavbarItem\",\"id\":\"6451cee102f36ce6e3008a62\",\"label\":\"GitHub Sponsors\",\"url\":null,\"type\":\"page\",\"series\":null,\"page\":{\"__typename\":\"StaticPage\",\"id\":\"628e48f419bda58ac7fb13c5\",\"slug\":\"github-sponsors\"}},{\"__typename\":\"PublicationNavbarItem\",\"id\":\"6451cee802f36ce6e3008a6d\",\"label\":\"Hacking\",\"url\":null,\"type\":\"series\",\"series\":{\"__typename\":\"Series\",\"id\":\"603717f70c99f77f2f8a67a0\",\"slug\":\"hacking\"},\"page\":null},{\"__typename\":\"PublicationNavbarItem\",\"id\":\"604632b1d0457f4d5c58333a\",\"label\":\"About\",\"url\":null,\"type\":\"page\",\"series\":null,\"page\":{\"__typename\":\"StaticPage\",\"id\":\"5f12dc1fb8ea603b4afa19e3\",\"slug\":\"about\"}},{\"__typename\":\"PublicationNavbarItem\",\"id\":\"6971a005fedb374630eb18e1\",\"label\":\"40 Days of JavaScript\",\"url\":null,\"type\":\"series\",\"series\":{\"__typename\":\"Series\",\"id\":\"67b7f39a2e8c327103f3f3f9\",\"slug\":\"40-days-of-javascript\"},\"page\":null}],\"enabledPages\":{\"__typename\":\"EnabledPages\",\"badges\":false,\"newsletter\":false,\"members\":false},\"layout\":\"magazine\",\"disableFooterBranding\":false,\"isSubscriptionModalDisabled\":false},\"favicon\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1560855683137/85XtBDDa2.png\",\"headerColor\":\"#fbfff5\",\"integrations\":{\"fbPixelID\":\"\",\"fathomSiteID\":\"\",\"fathomCustomDomainEnabled\":false,\"fathomCustomDomain\":\"\",\"hotjarSiteID\":\"2056755\",\"matomoSiteID\":null,\"matomoURL\":\"\",\"gaTrackingID\":\"G-Q12G7XEZEH\",\"gTagManagerID\":null,\"plausibleAnalyticsEnabled\":false,\"wmPaymentPointer\":\"$$ilp.uphold.com/mExiJU8rNMp2\",\"koalaPublicKey\":null,\"msClarityID\":null,\"openPanelClientId\":null,\"consentManagement\":{\"enabled\":false,\"version\":1,\"privacyPolicyURL\":null,\"__typename\":\"ConsentManagement\"},\"__typename\":\"PublicationIntegrations\"},\"imprintV2\":{\"__typename\":\"ImprintV2\",\"html\":\"\u003ch4\u003eLearn from Video Tutorials ✨\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003e▶️ \u003ca href=\\\"https://www.youtube.com/tapasadhikary?sub_confirmation=1\\\"\u003eMy YouTube Channel\u003c/a\u003e\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003eBlogs I enjoy reading 👇\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003e\u003ca href=\\\"https://lo-victoria.com/\\\"\u003eVictoria Lo's Blog\u003c/a\u003e | \u003ca href=\\\"https://daily-dev-tips.com/\\\"\u003eChris's Daily Dev Tips\u003c/a\u003e | \u003ca href=\\\"https://markodenic.com/blog/\\\"\u003eMarko Denic's Post\u003c/a\u003e\u003c/li\u003e\\n\u003c/ul\u003e\\n\"},\"postsCount\":{\"totalDocuments"])</script>
24<script>self.__next_f.push([1,"\":186,\"__typename\":\"PostConnection\"},\"isTeam\":true,\"links\":{\"twitter\":\"https://twitter.com/tapasadhikary\",\"instagram\":\"https://instagram.com/tapascript\",\"github\":\"https://github.com/atapas\",\"website\":\"https://tapasadhikary.com\",\"hashnode\":\"https://hashnode.com/@atapas\",\"youtube\":\"https://www.youtube.com/channel/UCaYr5yxgOyk599Mnb3TGh-g\",\"dailydev\":\"https://app.daily.dev/atapas\",\"linkedin\":\"https://www.linkedin.com/in/tapasadhikary\",\"mastodon\":\"https://fosstodon.org/@tapasadhikary\",\"facebook\":null,\"bluesky\":null,\"__typename\":\"PublicationLinks\"},\"domainInfo\":{\"__typename\":\"DomainInfo\",\"hashnodeSubdomain\":\"atapas\",\"domain\":{\"__typename\":\"Domain\",\"host\":\"blog.greenroots.info\",\"ready\":true},\"wwwPrefixedDomain\":null},\"redirectionRules\":[{\"source\":\"/the-definitive-guide-to-javascript-debugging-2021-edition\",\"destination\":\"/the-definitive-guide-to-javascript-debugging\",\"type\":301,\"__typename\":\"RedirectionRule\"},{\"source\":\"/the-definitive-guide-to-javascript-debugging-2023-edition\",\"destination\":\"/the-definitive-guide-to-javascript-debugging\",\"type\":301,\"__typename\":\"RedirectionRule\"},{\"source\":\"/top-10-qa-automation-tools-for-startups-in-2025\",\"destination\":\"/top-10-qa-automation-tools-for-startups-in-2026\",\"type\":301,\"__typename\":\"RedirectionRule\"}],\"customRules\":[],\"totalRecommendedPublications\":4,\"allowContributorEdits\":false,\"followersCount\":33210,\"pinnedPost\":null,\"seriesList\":{\"edges\":[{\"node\":{\"id\":\"5da2fc27c749c7736167602e\",\"name\":\"A blend of Redux and ReactJs - State Management Made Easy!\",\"slug\":\"a-blend-of-redux-and-reactjs-state-management-made-easy\",\"coverImage\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1570962554553/kLt0uqkI_.png\",\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"},{\"node\":{\"id\":\"5ed51d7d6f01b6ea4e952a03\",\"name\":\"JavaScript: Cracking the Nuts\",\"slug\":\"javascript-cracking-the-nuts\",\"coverImage\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1591186364565/fbtziudAx.jpeg\",\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"},{\"node\":{\"id\":\"5f3d0888456c173201125ebe\",\"name\":\"Jamstack for All\",\"slug\":\"jamstack\",\"coverImage\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1620893562844/-kI3jdygb.png\",\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"},{\"node\":{\"id\":\"5f5e24f113599a5f2e33fd8b\",\"name\":\"Go Serverless\",\"slug\":\"go-serverless\",\"coverImage\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1600005470291/r1u_3mC4E.png\",\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"},{\"node\":{\"id\":\"5fb4be1cb589f1618af9e4d1\",\"name\":\"Blogging Tips and Tricks\",\"slug\":\"blogging-tips-and-tricks\",\"coverImage\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1662521259636/qXpS5ENrIS.png\",\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"},{\"node\":{\"id\":\"6018de706f4ec96a5b77a31b\",\"name\":\"Learn with Tips and Tricks\",\"slug\":\"learn-with-tips-tricks\",\"coverImage\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1622441881988/ayJ9Nrzec.png\",\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"},{\"node\":{\"id\":\"603717f70c99f77f2f8a67a0\",\"name\":\"Hacking\",\"slug\":\"hacking\",\"coverImage\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1620915951482/YAfTjnYKs.png\",\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"},{\"node\":{\"id\":\"60d18380a6a3a25dadf62799\",\"name\":\"Web Security\",\"slug\":\"web-security\",\"coverImage\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1641284023104/FImyTa5Xr.png\",\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"},{\"node\":{\"id\":\"610368709036db5b3513b66f\",\"name\":\"Demystifying  JavaScript Promises - A New Way to Learn\",\"slug\":\"javascript-promises\",\"coverImage\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1627613156902/9LvEtdfxa.png\",\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"},{\"node\":{\"id\":\"61272e4d22e1ba252a87e79c\",\"name\":\"Build with Next.js\",\"slug\":\"build-with-next-js\",\"coverImage\":null,\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"}
24,{\"node\":{\"id\":\"6336554bfa20fa4bc8e549a6\",\"name\":\"Git GitHub Open Source\",\"slug\":\"git-github-open-source\",\"coverImage\":null,\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"},{\"node\":{\"id\":\"6451c56b02f36ce6e3008981\",\"name\":\"ReactJS\",\"slug\":\"re"])</script>
24<script>self.__next_f.push([1,"act\",\"coverImage\":null,\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"},{\"node\":{\"id\":\"67b7f39a2e8c327103f3f3f9\",\"name\":\"40 Days of JavaScript\",\"slug\":\"40-days-of-javascript\",\"coverImage\":null,\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"},{\"node\":{\"id\":\"6847f7928d33d23913686249\",\"name\":\"Tidbits by tapaScript\",\"slug\":\"tapascript-tidbits\",\"coverImage\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1749546865527/b02fc533-0a65-47df-a15f-bf3605a0167c.png\",\"__typename\":\"Series\"},\"__typename\":\"SeriesEdge\"}],\"__typename\":\"SeriesConnection\"},\"members\":{\"edges\":[{\"node\":{\"id\":\"674553641b8c712f1378ff29\",\"role\":\"author\",\"user\":{\"id\":\"5c9bb4026656f09759cdc1f0\",\"name\":\"Tapas Adhikary\",\"username\":\"atapas\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"__typename\":\"User\"},\"__typename\":\"PublicationMember\"},\"__typename\":\"PublicationMemberEdge\"}],\"__typename\":\"PublicationMemberConnection\"}},\"posts\":[{\"__typename\":\"Post\",\"id\":\"6a5ee7753965d5190bb0fc57\",\"title\":\"Goodbye, Slow-Motion Tortoise: A Deep Dive into SSR Streaming\",\"slug\":\"a-deep-dive-into-ssr-streaming-with-react\",\"publishedAt\":\"2026-07-21T03:28:53.859Z\",\"cuid\":\"cmru3gn5w00010akm3hnx6x4t\",\"url\":\"https://blog.greenroots.info/a-deep-dive-into-ssr-streaming-with-react\",\"subtitle\":\"Traditional SSR is great, but it has a massive buffering problem. Let's look into the SSR Streaming and learn how it could be a game changer.\",\"brief\":\"In the early days of the web, we were used to waiting. But today, modern users demand instant feedback. Yet, many of our applications still suffer from what I call the “slow-motion tortoise 🐢” runnin\",\"readTimeInMinutes\":10,\"views\":229,\"tags\":[{\"id\":\"56744723958ef13879b95434\",\"slug\":\"reactjs\",\"name\":\"React\",\"__typename\":\"Tag\"},{\"id\":\"584879f0c0aaf085e2012086\",\"slug\":\"nextjs\",\"name\":\"Next.js\",\"__typename\":\"Tag\"},{\"id\":\"63a4756fd1e499a9b8b33e29\",\"slug\":\"tanstack\",\"name\":\"tanstack\",\"__typename\":\"Tag\"},{\"id\":\"56744722958ef13879b94f1b\",\"slug\":\"web-development\",\"name\":\"Web Development\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94cad\",\"slug\":\"javascript\",\"name\":\"JavaScript\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"username\":\"atapas\",\"name\":\"Tapas Adhikary\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/uploads/covers/5c9bb4026656f09759cdc1f0/86b649a0-8157-4a5b-a337-15f267809632.png\",\"isPortrait\":false,\"isAttributionHidden\":false}},{\"__typename\":\"Post\",\"id\":\"698aad8ca954355667faecc4\",\"title\":\"Mastering React Design Patterns for Building Maintainable Forms\",\"slug\":\"react-design-patterns-for-building-maintainable-forms\",\"publishedAt\":\"2026-02-10T04:01:16.239Z\",\"cuid\":\"cmlg2q4lr000102l1gwfka4gt\",\"url\":\"https://blog.greenroots.info/react-design-patterns-for-building-maintainable-forms\",\"subtitle\":\"Learn how to build maintainable, reusable forms in React using design patterns like custom hooks, c
24ompound components, and context for scalable CRUD\",\"brief\":\"Managing forms in React applications can become complex and error-prone as your app grows. Yet, leveraging the right design patterns can drastically simplify this process, making your forms more reusable, scalable, and easier to maintain. In this com...\",\"readTimeInMinutes\":6,\"views\":642,\"tags\":[{\"id\":\"56744723958ef13879b95434\",\"slug\":\"reactjs\",\"name\":\"React\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b955a9\",\"slug\":\"beginners\",\"name\":\"Beginner Developers\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94cad\",\"slug\":\"javascript\",\"name\":\"JavaScript\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94c7e\",\"slug\":\"programming\",\"name\":\"General Programming\",\"__typename\":\"Tag\"},{\"id\":\"5f22b52283e4e9440619af83\",\"slug\":\"codenewbies\",\"name\":\"#codenewbies\",\"__typename\":\"Tag\"}],\"author\":{\""])</script>
24<script>self.__next_f.push([1,"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"username\":\"atapas\",\"name\":\"Tapas Adhikary\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1770695507863/3fc0d0b3-e9de-482f-9afb-f8e2cd153339.png\",\"isPortrait\":false,\"isAttributionHidden\":false}},{\"__typename\":\"Post\",\"id\":\"697a04549209c33467e84027\",\"title\":\"JavaScript Variables Explained Clearly: Values, Types, and How Data Really Works\",\"slug\":\"javascript-variables-explained-values-references\",\"publishedAt\":\"2026-01-28T12:43:00.554Z\",\"cuid\":\"cmky0n0i1000002jpdatjd828\",\"url\":\"https://blog.greenroots.info/javascript-variables-explained-values-references\",\"subtitle\":\"Learn how JavaScript variables work, including let vs const, primitive and reference types, pass by value, and how JavaScript stores data in memory.\",\"brief\":\"Day 02 of 40 Days of JavaScript is where JavaScript starts to feel real. Today’s focus is on variables, how values are stored, and why JavaScript behaves the way it does when data changes.\\nIf variables are not clear, everything that follows—functions...\",\"readTimeInMinutes\":5,\"views\":193,\"tags\":[{\"id\":\"56744721958ef13879b94cad\",\"slug\":\"javascript\",\"name\":\"JavaScript\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b955a9\",\"slug\":\"beginners\",\"name\":\"Beginner Developers\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94c7e\",\"slug\":\"programming\",\"name\":\"General Programming\",\"__typename\":\"Tag\"},{\"id\":\"5f22b52283e4e9440619af83\",\"slug\":\"codenewbies\",\"name\":\"#codenewbies\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"username\":\"atapas\",\"name\":\"Tapas Adhikary\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1769602498621/c041e5a8-7b99-4fd3-9b33-643d93a4c6e2.png\",\"isPortrait\":false,\"isAttributionHidden\":false}},{\"__typename\":\"Post\",\"id\":\"69719f7821265452b7b3adce\",\"title\":\"JavaScript Explained From Scratch: How the Web Becomes Interactive\",\"slug\":\"javascript-explained-from-scratch\",\"publishedAt\":\"2026-01-22T03:54:32.175Z\",\"cuid\":\"cmkox4a5r000602jlfrk6b05v\",\"url\":\"https://blog.greenroots.info/javascript-explained-from-scratch\",\"subtitle\":\"A beginner-friendly introduction to JavaScript covering what it is, how it works, and how to set up your JavaScript environment\",\"brief\":\"If you’ve ever wondered how buttons become clickable, how animations react to user actions, or how websites feel alive, JavaScript is the answer.\\nThis article is based on Day 01 of the 40 Days of JavaScript journey, where we lay the foundation for le...\",\"readTimeInMinutes\":5,\"views\":179,\"tags\":[{\"id\":\"56744721958ef13879b94cad\",\"slug\":\"javascript\",\"name\":\"JavaScript\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b955a9\",\"slug\":\"beginners\",\"name\":\"Beginner Developers\",\"__typename\":\"Tag\"},{\"id\":\"5f22b52283e4e9440619af83\",\"slug\":\"codenewbies\",\"name\":\"#codenewbies\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94c7e\",\"slug\":\"programming\",\"name\":\"General Programming\",\"__typename\":\"Tag\"},{\"id\":\"56744722958ef13879b94f1b\",\"slug\":\"web-development\",\"name\":\"Web Development\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"username\":\"atapas\",\"name\":\"Tapas Adhikary\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1769052331247/1b119ae7-b985-4c89-a579-490662cf65de.png\",\"isPortrait\":false,\"isAttributionHidden\":false}}
24,{\"__typename\":\"Post\",\"id\":\"6"])</script>
24<script>self.__next_f.push([1,"8480b9fb9cb417f4415e5e0\",\"title\":\"Tidbit 01: How Does Event Loop Handle Promises? Ever Thought?\",\"slug\":\"how-does-event-loop-handle-promises-ever-thought\",\"publishedAt\":\"2025-06-10T10:40:31.765Z\",\"cuid\":\"cmbqe3vh1000602l1di2aey6y\",\"url\":\"https://blog.greenroots.info/how-does-event-loop-handle-promises-ever-thought\",\"subtitle\":\"Learn how the promises are handled internally using event loop. This concept is essentials to debug and work with async programming.\",\"brief\":\"Ever wondered how JavaScript knows when to run your .then() block? Or why your console.log(\\\"done\\\") appear before a resolved promise result? Let’s break it down in this quick TidBit!\\nWhat is a Promise?\\nA Promise is JavaScript’s way of saying:\\n\\n“I’ll g...\",\"readTimeInMinutes\":2,\"views\":480,\"tags\":[{\"id\":\"56744721958ef13879b94cad\",\"slug\":\"javascript\",\"name\":\"JavaScript\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b952af\",\"slug\":\"webdev\",\"name\":\"webdev\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b955a9\",\"slug\":\"beginners\",\"name\":\"Beginner Developers\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94c7e\",\"slug\":\"programming\",\"name\":\"General Programming\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"username\":\"atapas\",\"name\":\"Tapas Adhikary\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1750328438994/7a6e7c3f-5c35-4377-a0ab-ac48faff9cf9.png\",\"isPortrait\":false,\"isAttributionHidden\":false}},{\"__typename\":\"Post\",\"id\":\"6840108a230e334c8a1c6be0\",\"title\":\"Top 10 QA Automation Tools for Startups in 2026\",\"slug\":\"top-10-qa-automation-tools-for-startups-in-2026\",\"publishedAt\":\"2025-06-04T09:23:22.943Z\",\"cuid\":\"cmbhqpjun000209l58mj068qu\",\"url\":\"https://blog.greenroots.info/top-10-qa-automation-tools-for-startups-in-2026\",\"subtitle\":null,\"brief\":\"The startup landscape is at a critical inflection point for QA testing. While the demand for quality software has never been higher, the State of Testing Report by PractiTest reveals a concerning skills gap: 42% of testers don't feel comfortable writ...\",\"readTimeInMinutes\":20,\"views\":1477,\"tags\":[{\"id\":\"56744721958ef13879b94b5b\",\"slug\":\"startups\",\"name\":\"Startups\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b9549b\",\"slug\":\"testing\",\"name\":\"Testing\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b9535d\",\"slug\":\"automation\",\"name\":\"automation\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94e0c\",\"slug\":\"tools\",\"name\":\"tools\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94c7e\",\"slug\":\"programming\",\"name\":\"General Programming\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b9488e\",\"slug\":\"ai\",\"name\":\"AI\",\"__typename\":\"Tag\"},{\"id\":\"6347ba4bad721d4c5133e3c2\",\"slug\":\"ai-tools\",\"name\":\"#ai-tools\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"username\":\"atapas\",\"name\":\"Tapas Adhikary\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1768198971563/3498069d-e9bb-40e1-80ad-f58b0da08e0e.jpeg\",\"isPortrait\":false,\"isAttributionHidden\":false}},{\"__typename\":\"Post\",\"id\":\"66f14e9b5a0bbc66c36a9f32\",\"title\":\"Exploring Advanced JavaScript Features: A Deep Dive into ECMAScript 2023 Updates\",\"slug\":\"exploring-advanced-javascript-features-ecmascript-2023\",\"publishedAt\":\"2024-09-23T11:18:51.908Z\",\"cuid\":\"cm1ewzoxw000a0al4b55a5gy3\",\"url\":\"https://blog.greenroots.info/exploring-advanced-javascript-features-ecmascript-2023\",\"subtitle\":\"Learn about the addition of latest features in ECMAScript 2023.\",\"brief\":\"ECMAScript, also known as the backbone of JavaScript, has come a long way since its birth at Netscape in 1995. Within two years, it was s"])</script>
24<script>self.__next_f.push([1,"tandardized as ECMAScript 1.\\nIt only took ECMAScript 4 years to reach its third generation. By 1999, it had gaine...\",\"readTimeInMinutes\":6,\"views\":473,\"tags\":[{\"id\":\"56744721958ef13879b94c7e\",\"slug\":\"programming\",\"name\":\"General Programming\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94cad\",\"slug\":\"javascript\",\"name\":\"JavaScript\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b955a9\",\"slug\":\"beginners\",\"name\":\"Beginner Developers\",\"__typename\":\"Tag\"},{\"id\":\"5f22b52283e4e9440619af83\",\"slug\":\"codenewbies\",\"name\":\"#codenewbies\",\"__typename\":\"Tag\"},{\"id\":\"56744722958ef13879b9511f\",\"slug\":\"ecmascript\",\"name\":\"ecmascript\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"username\":\"atapas\",\"name\":\"Tapas Adhikary\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1727083502183/473d42e3-500f-4782-9762-89fdbe5334d8.png\",\"isPortrait\":false,\"isAttributionHidden\":false}},{\"__typename\":\"Post\",\"id\":\"66e814818a8f502cfca0818b\",\"title\":\"Effective Ways to Manage Shadcn Dialog Box: 3 Tips with Code\",\"slug\":\"shadcn-dialog-with-form-three-tips\",\"publishedAt\":\"2024-09-16T11:20:33.086Z\",\"cuid\":\"cm14wywce000e08l8249a7vkn\",\"url\":\"https://blog.greenroots.info/shadcn-dialog-with-form-three-tips\",\"subtitle\":\"How to Seamlessly Combine shadcn/ui Dialogs with your UI components like forms for Optimal Use, let's learn with a project and code examples.\",\"brief\":\"Recently I encountered a couple of challenging use cases with the shadcn/ui dialog box with forms as its content. As I learned to tackle them, here is what I learned to share with you, hoping that it helps you as well.\\nFirst, the shadcn dialog box co...\",\"readTimeInMinutes\":12,\"views\":9946,\"tags\":[{\"id\":\"584879f0c0aaf085e2012086\",\"slug\":\"nextjs\",\"name\":\"Next.js\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b95434\",\"slug\":\"reactjs\",\"name\":\"React\",\"__typename\":\"Tag\"},{\"id\":\"648f789cf9b78f110e1dcb05\",\"slug\":\"shadcn\",\"name\":\"shadcn\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94c7e\",\"slug\":\"programming\",\"name\":\"General Programming\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b955a9\",\"slug\":\"beginners\",\"name\":\"Beginner Developers\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"username\":\"atapas\",\"name\":\"Tapas Adhikary\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1726476807909/31999c4c-3498-4cd3-a0ca-b6e732a62088.png\",\"isPortrait\":false,\"isAttributionHidden\":false}},{\"__typename\":\"Post\",\"id\":\"668bd00b1c0dd730ebc759cd\",\"title\":\"Why the with() method of JavaScript Array is a gem?\",\"slug\":\"javascript-array-method-with-immutability\",\"publishedAt\":\"2024-07-08T11:39:55.067Z\",\"cuid\":\"clycwu69n000g08mfgm6b7bkh\",\"url\":\"https://blog.greenroots.info/javascript-array-method-with-immutability\",\"subtitle\":\"Discover the new with() method in JavaScript Arrays from ECMAScript 2023 with examples and use cases.\",\"brief\":\"JavaScript array methods offer plenty to web developers already. The methods like map(), reduce(), filter() , some(), every(), and many more have helped build our JavaScript muscles for better logic and algorithms.\\nThe with() method is a relatively n...\",\"readTimeInMinutes\":5,\"views\":16145,\"tags\":[{\"id\":\"56744721958ef13879b94c7e\",\"slug\":\"programming\",\"name\":\"General Programming\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b955a9\",\"slug\":\"beginners\",\"name\":\"Beginner Developers\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94cad\",\"slug\":\"javascript\",\"name\":\"JavaScript\",\"__typename\":\"Tag\"},{\"id\":\"5f22b52283e4e9440619af83\",\"slug\":\"codenewbies\",\"name\":\"#codenewbies\",\"__typename\":\"Tag\"},{\"id\":\"578e290c"])</script>
24<script>self.__next_f.push([1,"5460288cdeb6f187\",\"slug\":\"array\",\"name\":\"array\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"username\":\"atapas\",\"name\":\"Tapas Adhikary\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1719997775222/99f6bdf9-f735-4480-8120-1e699128f213.png\",\"isPortrait\":false,\"isAttributionHidden\":false}},{\"__typename\":\"Post\",\"id\":\"666982c3b04588a259543adf\",\"title\":\"Next.js and Next-Auth V5: Guide to Social Logins(OAuth)\",\"slug\":\"nextjs-and-next-auth-v5-guide-to-social-logins\",\"publishedAt\":\"2024-06-12T11:13:07.672Z\",\"cuid\":\"clxbqfkns000n09lfa6jq5c6c\",\"url\":\"https://blog.greenroots.info/nextjs-and-next-auth-v5-guide-to-social-logins\",\"subtitle\":\"Using Next-Auth V5 for Google and GitHub OAUTH Login in a Next.js app: A complete guide\",\"brief\":\"Authentication and Authorization are the implicit needs for any user-facing application. Using authentication users let the application and underlying services know who they are, and if they are the legitimate people to get access to the system. Ther...\",\"readTimeInMinutes\":15,\"views\":9507,\"tags\":[{\"id\":\"584879f0c0aaf085e2012086\",\"slug\":\"nextjs\",\"name\":\"Next.js\",\"__typename\":\"Tag\"},{\"id\":\"62b316f0b8204992cc91cabc\",\"slug\":\"nextauthjs\",\"name\":\"nextauth.js\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94c7e\",\"slug\":\"programming\",\"name\":\"General Programming\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b955a9\",\"slug\":\"beginners\",\"name\":\"Beginner Developers\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b95434\",\"slug\":\"reactjs\",\"name\":\"React\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"username\":\"atapas\",\"name\":\"Tapas Adhikary\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1718002089699/9f2248ca-6914-4806-9c83-58fcdcc86eb9.png\",\"isPortrait\":false,\"isAttributionHidden\":false}},{\"__typename\":\"Post\",\"id\":\"65fa7d8b47dd1688cc6292a3\",\"title\":\"What is Authentication and Authorization - Explain like I am five\",\"slug\":\"what-is-authentication-and-authorization\",\"publishedAt\":\"2024-03-20T06:09:15.149Z\",\"cuid\":\"cltzel8ct000f09kzakzz1cvq\",\"url\":\"https://blog.greenroots.info/what-is-authentication-and-authorization\",\"subtitle\":\"Learn the concept of authentication and authorization from this visual tutorial. You will find it easy to grasp the concepts to build things further.\",\"brief\":\"Full-stack development is not just about making the front end talk to the back end, and vice-versa. You need to keep additional peripherals in mind to put yourself in the shoes of a full-stack developer.\\nA full-stack developer should be equipped with...\",\"readTimeInMinutes\":8,\"views\":1110,\"tags\":[{\"id\":\"56744721958ef13879b94c7e\",\"slug\":\"programming\",\"name\":\"General Programming\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b955a9\",\"slug\":\"beginners\",\"name\":\"Beginner Developers\",\"__typename\":\"Tag\"},{\"id\":\"5c3855846ac22ee647d8f5ae\",\"slug\":\"full-stack-development\",\"name\":\"Full Stack Development\",\"__typename\":\"Tag\"},{\"id\":\"5f22b52283e4e9440619af83\",\"slug\":\"codenewbies\",\"name\":\"#codenewbies\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94b00\",\"slug\":\"authentication\",\"name\":\"authentication\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"username\":\"atapas\",\"name\":\"Tapas Adhikary\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1710238617433/"])</script>
24<script>self.__next_f.push([1,"03d1813f-828a-4e1a-8a9e-07645a39e2ea.png\",\"isPortrait\":false,\"isAttributionHidden\":false}},{\"__typename\":\"Post\",\"id\":\"65ebdf81bd52c7a23822c972\",\"title\":\"How to upload and preview images in ReactJS?\",\"slug\":\"how-to-upload-and-preview-images-in-reactjs\",\"publishedAt\":\"2024-03-09T04:03:13.440Z\",\"cuid\":\"cltjk8sdc00020al5gsqg9kjj\",\"url\":\"https://blog.greenroots.info/how-to-upload-and-preview-images-in-reactjs\",\"subtitle\":\"Uploading images and previewing is a common use case in a web application. Learn how to do it using ReactJS and TailwindCSS.\",\"brief\":\"Uploading and previewing images are fundamental requirements in any modern user-centric application. Be it Facebook, Instagram, WhatsApp, Twitter, LinkedIn, whatever you name, you have it there.\\nIn this article, we will learn how to handle image uplo...\",\"readTimeInMinutes\":12,\"views\":22659,\"tags\":[{\"id\":\"56744723958ef13879b95434\",\"slug\":\"reactjs\",\"name\":\"React\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94c7e\",\"slug\":\"programming\",\"name\":\"General Programming\",\"__typename\":\"Tag\"},{\"id\":\"56744723958ef13879b955a9\",\"slug\":\"beginners\",\"name\":\"Beginner Developers\",\"__typename\":\"Tag\"},{\"id\":\"56744721958ef13879b94cad\",\"slug\":\"javascript\",\"name\":\"JavaScript\",\"__typename\":\"Tag\"},{\"id\":\"5f22b52283e4e9440619af83\",\"slug\":\"codenewbies\",\"name\":\"#codenewbies\",\"__typename\":\"Tag\"}],\"author\":{\"__typename\":\"User\",\"id\":\"5c9bb4026656f09759cdc1f0\",\"username\":\"atapas\",\"name\":\"Tapas Adhikary\",\"profilePicture\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1763206906963/ff411619-4500-4035-8512-ab6179444945.png?w=500\u0026h=500\u0026fit=crop\u0026crop=entropy\u0026auto=compress,format\u0026format=webp\",\"followersCount\":33134},\"coverImage\":{\"__typename\":\"CoverImage\",\"url\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1709727428297/b80b7034-7896-47b1-a31e-cad44f33f9b4.png\",\"isPortrait\":false,\"isAttributionHidden\":false}}],\"host\":\"blog.greenroots.info\"}],\"$L18\",\"$L19\",\"$L1a\"]}]\n1b:I[57254,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"5001\",\"static/chunks/5001-fae0bebdd93f95e3.js\",\"2423\",\"static/chunks/2423-c8b1388240338d7d.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"652\",\"static/chunks/652-f40dcb480b4e356f.js\",\"730\",\"static/chunks/730-8191af9e9424b148.js\",\"8974\",\"static/chunks/app/page-cc18ae1a3a7a5ed8.js\"],\"PostsList\"]\n18:[\"$\",\"div\",null,{\"className\":\"\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-full mx-auto xl:max-w-[80rem] 2xl:max-w-[90rem] px-4 sm:px-12 md:px-18 lg:px-16 xl:px-10\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-8 pt-2 sm:pt-10\",\"children\":[\"$\",\"section\",null,{\"className\":\"pb-16\",\"children\":[\"$\",\"div\",null,{\"className\":\"space-y-6 w-full mx-auto\",\"children\":[\"$\",\"$L1b\",null,{\"initialPosts\":[\"$b:props:children:0:props:posts:0\",\"$b:props:children:0:props:posts:1\",\"$b:props:children:0:props:posts:2\",\"$b:props:children:0:props:posts:3\",\"$b:props:children:0:props:posts:4\",\"$b:props:children:0:props:posts:5\",\"$b:props:children:0:props:posts:6\",\"$b:props:children:0:props:posts:7\",\"$b:props:children:0:props:posts:8\",\"$b:props:children:0:props:posts:9\",\"$b:props:children:0:props:posts:10\"],\"initialCursor\":\"11\",\"initialHasNextPage\":true,\"pinnedPostId\":null,\"aboutHtml\":\"\u003cp\u003e\u003cstrong\u003eEducator\u003c/strong\u003e | \u003ca href=\\\"https://www.youtube.com/tapasadhikary?sub_confirmation=1\\\"\u003eYouTuber\u003c/a\u003e | \u003ca href=\\\"https://reactplay.io\\\"\u003eBuilding ReactPlay\u003c/a\u003e | \u003ca href=\\\"https://twitter.com/tapasadhikary\\\"\u003eLet's Connect\u003c/a\u003e\u003c/p\u003e\\n\",\"links\":\"$b:props:children:0:props:publication:links\",\"aboutAvatarUrl\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1560855683137/85XtBDDa2.png\",\"aboutAvatarFallback\":\"G\",\"totalPostsCount\":186,\"aboutHeading\":\"GreenRoots Blog -  A Blog by Tapas Adhikary\",\"publication\":\"$b:props:children:0:props:publication\",\"isTeam\":true,\"showHashnodeIcon\":true,\"layout\":\"magazine\",\"isHashnodeSubdomain\":false}]}]}]}]}]}]\n1c:T66e,{\"@context\":\"https://schema.org\",\"@type\":\"Blog\",\"name\":\"GreenRoots Blog -  A Blog by Tapas Adhikary\",\"url\":\"https://blog.greenroots.info\",\"description\":\"Educator | Yo"])</script>
24<script>self.__next_f.push([1,"uTuber | Building ReactPlay | Let's Connect\\n\",\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"url\":\"https://blog.greenroots.info\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"GreenRoots Blog -  A Blog by Tapas Adhikary\",\"url\":\"https://blog.greenroots.info\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https://blog.greenroots.info/api/og/home?og=eyJ0aXRsZSI6IkdyZWVuUm9vdHMlMjBCbG9nJTIwLSUyMCUyMEElMjBCbG9nJTIwYnklMjBUYXBhcyUyMEFkaGlrYXJ5IiwiaXNEZWZhdWx0TW9kZURhcmsiOmZhbHNlLCJwaG90byI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNzYzMjA2OTA2OTYzL2ZmNDExNjE5LTQ1MDAtNDAzNS04NTEyLWFiNjE3OTQ0NDk0NS5wbmc/dz01MDAmaD01MDAmZml0PWNyb3AmY3JvcD1lbnRyb3B5JmF1dG89Y29tcHJlc3MsZm9ybWF0JmZvcm1hdD13ZWJwIiwibG9nbyI6Imh0dHBzOi8vY2RuLmhhc2hub2RlLmNvbS9yZXMvaGFzaG5vZGUvaW1hZ2UvdXBsb2FkL3YxNTcxODIyMjY2MjEwL1dvVV9tc0tRay5wbmciLCJpc1RlYW0iOnRydWUsImRvbWFpbiI6ImJsb2cuZ3JlZW5yb290cy5pbmZvIiwibWV0YSI6IkVkdWNhdG9yJTIwJTdDJTIwWW91VHViZXIlMjAlN0MlMjBCdWlsZGluZyUyMFJlYWN0UGxheSUyMCU3QyUyMExldCdzJTIwQ29ubmVjdCUwQSIsImZvbGxvd2VycyI6MzMyMTAsImFydGljbGVzIjowLCJmYXZpY29uIjoiaHR0cHM6Ly9jZG4uaGFzaG5vZGUuY29tL3Jlcy9oYXNobm9kZS9pbWFnZS91cGxvYWQvdjE1NjA4NTU2ODMxMzcvODVYdEJERGEyLnBuZyJ9\"},\"sameAs\":[\"https://x.com/tapasadhikary\",\"https://instagram.com/tapascript\",\"https://github.com/atapas\",\"https://tapasadhikary.com\",\"https://hashnode.com/@atapas\",\"https://www.youtube.com/channel/UCaYr5yxgOyk599Mnb3TGh-g\",\"https://www.linkedin.com/in/tapasadhikary\",\"https://fosstodon.org/@tapasadhikary\"]}19:[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$1c\"}}]\n1d:I[52619,[\"4554\",\"static/chunks/4554-984b480a9db5f3fe.js\",\"7563\",\"static/chunks/7563-4dfa0994a9b0e37c.js\",\"5001\",\"static/chunks/5001-fae0bebdd93f95e3.js\",\"2423\",\"static/chunks/2423-c8b1388240338d7d.js\",\"9216\",\"static/chunks/9216-9272709ba40c1cfd.js\",\"3091\",\"static/chunks/3091-bf1537ff6571a1bd.js\",\"652\",\"static/chunks/652-f40dcb480b4e356f.js\",\"730\",\"static/chunks/730-8191af9e9424b148.js\",\"8974\",\"static/chunks/app/page-cc18ae1a3a7a5ed8.js\"],\"\"]\n1a:[\"$\",\"footer\",null,{\"className\":\"px-4 pt-8 pb-20 sm:px-8 text-muted-foreground\",\"aria-label\":\"Footer\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-full max-w-4xl mx-auto\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex flex-col items-center gap-4 text-center text-sm\",\"children\":[[\"$\",\"section\",null,{\"id\":\"impressum\",\"className\":\"w-full max-w-2xl pt-3 text-left text-sm text-muted-foreground text-center [\u0026_*]:text-center [\u0026_*]:mx-auto\",\"aria-label\":\"Impressum\",\"children\":[[\"$\",\"div\",null,{\"className\":\"prose prose-sm prose-stone dark:prose-invert max-w-none text-muted-foreground prose-a:text-muted-foreground prose-a:no-underline prose-a:transition prose-a:hover:text-foreground [\u0026_ul]:list-none [\u0026_ol]:list-none\",\"dangerouslySetInnerHTML\":{\"__html\":\"\u003ch4\u003eLearn from Video Tutorials ✨\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003e▶️ \u003ca href=\\\"https://www.youtube.com/tapasadhikary?sub_confirmation=1\\\" target=\\\"_blank\\\" rel=\\\"noopener ugc\\\"\u003eMy YouTube Channel\u003c/a\u003e\u003c/li\u003e\\n\u003c/ul\u003e\\n\u003ch4\u003eBlogs I enjoy reading 👇\u003c/h4\u003e\\n\u003cul\u003e\\n\u003cli\u003e\u003ca href=\\\"https://lo-victoria.com/\\\" target=\\\"_blank\\\" rel=\\\"noopener ugc\\\"\u003eVictoria Lo's Blog\u003c/a\u003e | \u003ca href=\\\"https://daily-dev-tips.com/\\\" target=\\\"_blank\\\" rel=\\\"noopener ugc\\\"\u003eChris's Daily Dev Tips\u003c/a\u003e | \u003ca href=\\\"https://markodenic.com/blog/\\\" target=\\\"_blank\\\" rel=\\\"noopener ugc\\\"\u003eMarko Denic's Post\u003c/a\u003e\u003c/li\u003e\\n\u003c/ul\u003e\"}}],[\"$\",\"div\",null,{\"className\":\"my-6 h-px w-full bg-border\",\"aria-hidden\":\"true\"}]]}],[\"$\",\"p\",null,{\"className\":\"font-medium\",\"children\":[[\"$\",\"time\",null,{\"dateTime\":\"2026\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-sans\",\"children\":\"©\"}],\" \",2026]}],\" \",\"GreenRoots Blog -  A Blog by Tapas Adhikary\"]}],[\"$\",\"nav\",null,{\"aria-label\":\"Footer navigation\",\"children\":[\"$\",\"ul\",null,{\"className\":\"flex flex-wrap justify-center gap-4 text-sm tracking-wide\",\"children\":[[\"$\",\"li\",\"/archive\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/archive\",\"className\":\"transition hover:text-foreground\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Archive\"}]}],[\"$\",\"li\",\"/recommendations\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/recommendations\",\""])</script>
24<script>self.__next_f.push([1,"className\":\"transition hover:text-foreground\",\"target\":\"$undefined\",\"rel\":\"$undefined\",\"children\":\"Recommendations\"}]}],[\"$\",\"li\",\"https://hashnode.com/privacy-policy\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"https://hashnode.com/privacy-policy\",\"className\":\"transition hover:text-foreground\",\"target\":\"_blank\",\"rel\":\"noopener\",\"children\":\"Privacy\"}]}],[\"$\",\"li\",\"https://hashnode.com/terms\",{\"children\":[\"$\",\"$L1d\",null,{\"href\":\"https://hashnode.com/terms\",\"className\":\"transition hover:text-foreground\",\"target\":\"_blank\",\"rel\":\"noopener\",\"children\":\"Terms\"}]}]]}]}],[\"$\",\"div\",null,{\"className\":\"pt-8 flex justify-center gap-6\",\"children\":[[\"$\",\"$L1d\",null,{\"href\":\"/sitemap.xml\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"flex items-center gap-2 text-sm transition hover:text-foreground\",\"title\":\"Sitemap\",\"children\":[[\"$\",\"i\",null,{\"className\":\"fa-regular fa-sitemap\"}],[\"$\",\"span\",null,{\"children\":\"Sitemap\"}]]}],[\"$\",\"$L1d\",null,{\"href\":\"/rss.xml\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"flex items-center gap-2 text-sm transition hover:text-foreground\",\"title\":\"RSS Feed\",\"children\":[[\"$\",\"i\",null,{\"className\":\"fa-regular fa-rss\"}],[\"$\",\"span\",null,{\"children\":\"RSS\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"pt-10 text-center\",\"children\":[\"$\",\"$L1d\",null,{\"href\":\"https://hashnode.com/?utm_source=https%3A%2F%2Fblog.greenroots.info\u0026utm_medium=referral\u0026utm_campaign=blog_footer_logo\u0026utm_content=logo\",\"target\":\"_blank\",\"rel\":\"noopener\",\"aria-label\":\"Visit Hashnode (opens in a new tab)\",\"children\":[\"$\",\"svg\",null,{\"fill\":\"none\",\"viewBox\":\"0 0 282 39\",\"aria-hidden\":\"true\",\"className\":\"h-6 w-auto min-w-[9.5rem] text-muted-foreground transition hover:text-foreground\",\"children\":[[\"$\",\"path\",null,{\"fill\":\"currentColor\",\"d\":\"M2.68 13.032c-3.573 3.505-3.573 9.363 0 12.936L13.032 36.32c3.505 3.573 9.363 3.573 12.936 0L36.32 25.968c3.573-3.573 3.573-9.431 0-12.936L25.968 2.68c-3.573-3.573-9.431-3.573-12.936 0zm12.211 1.935c2.507-2.521 6.582-2.544 9.104-.038s2.544 6.582.038 9.104-6.582 2.544-9.104.038-2.544-6.582-.038-9.104\"}],\"$L1e\"]}],\"className\":\"inline-flex items-center justify-center gap-2 whitespace-nowrap font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [\u0026_svg]:pointer-events-none [\u0026_svg]:size-4 [\u0026_svg]:shrink-0 hover:bg-accent hover:text-accent-foreground h-10 rounded-md text-xl px-5 py-4\",\"ref\":null}]}]]}]}]}]\n1f:Tc98,M268.379 39q-6.322 0-10.35-4.108-4.002-4.134-4.002-10.483 0-6.296 4.002-10.43 4-4.135 10.163-4.135 6.028 0 9.817 3.734 3.814 3.735 3.814 9.497v2.8h-24.248v-4.054h17.633q-.187-2.747-2.054-4.508-1.868-1.76-4.962-1.76-3.28-.001-5.388 2.374-2.108 2.373-2.108 6.375 0 4.188 2.348 6.695 2.347 2.481 5.895 2.481 1.68 0 2.934-.453a8.5 8.5 0 0 0 2.321-1.307q1.041-.854 2.268-2.614l4.694 2.96q-1.707 2.748-3.494 4.135a12.7 12.7 0 0 1-3.975 2.081q-2.187.72-5.308.72m-33.496 0q-5.575 0-9.283-4.028-3.681-4.029-3.681-10.484 0-6.43 3.761-10.51 3.76-4.108 9.47-4.108 2.8 0 5.175 1.2 2.4 1.174 3.628 3.148l.026-.08V0h7.016v38.2h-6.722v-4.722l.64.8-.694.133q-1.28 2.108-3.788 3.361Q237.924 39 234.883 39m1.627-6.002q3.308 0 5.495-2.428t2.188-6.135q0-3.762-2.214-6.109-2.214-2.374-5.469-2.374-3.28 0-5.522 2.347-2.214 2.348-2.214 6.163 0 3.76 2.214 6.162 2.214 2.374 5.522 2.374M205.811 39q-6.376 0-10.537-4.161-4.161-4.188-4.161-10.404 0-6.321 4.161-10.456 4.188-4.135 10.537-4.135 6.348 0 10.537 4.161 4.188 4.161 4.188 10.43 0 6.216-4.188 10.404Q212.186 39 205.811 39m0-6.162q3.307 0 5.575-2.374 2.267-2.374 2.267-6.055 0-3.707-2.294-6.056-2.267-2.347-5.548-2.347-3.308 0-5.575 2.374-2.268 2.348-2.268 6.029t2.241 6.055q2.268 2.374 5.602 2.374M162.586 38.2V10.644h6.802v5.015l-.8-.987h.906q1.308-2.187 3.762-3.494 2.48-1.335 5.228-1.334 4.615 0 7.256 2.8 2.667 2.776 2.667 7.603V38.2h-
247.069V21.794q0-2.854-1.387-4.401t-4.134-1.547q-2.614 0-4.402 1.974-1.76 1.974-1.76 4.881V38.2zm-30.181 0V0h6.962v14.698h.134q1.2-2.187 3.574-3.521 2.375-1.335 5.229-1.334 4.615 0 7.255 2.828 2.668 2.801 2.668 7.522V38.2h-7.069V21.794q0-2.827-1.387-4.402-1.387-1.573-4.055-1"])</script>
24<script>self.__next_f.push([1,".573-2.587 0-4.428 2.027-1.814 2.027-1.814 4.962v15.391zm-14.416.8q-2.882 0-5.015-.64-2.108-.614-3.761-1.84-1.654-1.228-2.668-2.695l-.987-1.467 4.695-3.174.773 1.067a9.1 9.1 0 0 0 1.788 1.814 8.2 8.2 0 0 0 2.32 1.2q1.308.4 3.068.4 2.161 0 3.441-.8 1.308-.8 1.307-2.294 0-1.36-1.147-2.108-1.12-.747-5.068-1.654-5.335-1.253-7.656-3.334-2.32-2.107-2.321-5.362 0-3.76 3.148-6.002 3.148-2.267 7.923-2.267 2.454 0 4.348.507t3.388 1.493q1.493.988 2.454 2.188l.987 1.2-4.482 3.255-.667-.774a7.4 7.4 0 0 0-1.627-1.387 6.4 6.4 0 0 0-2.054-.88 9.5 9.5 0 0 0-2.401-.294q-1.974 0-3.201.8-1.2.774-1.2 1.921 0 1.254 1.12 2.027 1.147.748 5.229 1.681 5.334 1.227 7.629 3.308 2.294 2.055 2.294 5.308 0 4.029-3.228 6.43Q123.217 39 117.989 39M87.61 39q-4.508 0-7.335-2.454-2.828-2.481-2.828-6.482 0-4.188 3.254-6.669t8.483-2.48q2.082 0 4.028.426 1.974.427 3.361 1.12v-1.6q0-2.588-1.813-4.082-1.788-1.493-4.615-1.493-1.628 0-2.801.373a8.7 8.7 0 0 0-2.188.987q-.987.614-1.84 1.414l-.854.8-4.081-3.788 1.307-1.173a18.7 18.7 0 0 1 2.934-2.108q1.601-.933 3.601-1.44t4.589-.507q5.868 0 9.229 2.88 3.361 2.882 3.361 8.084V38.2h-6.749v-5.922l1.654 2.187h-1.76q-1.308 2.055-3.655 3.308Q90.545 39 87.611 39m1.814-4.988q3.148 0 5.149-2.187 2-2.215 2-5.309v-.08q-1.12-.693-2.72-1.094a13 13 0 0 0-3.388-.426q-2.828 0-4.562 1.2-1.734 1.173-1.734 3.521 0 2.028 1.468 3.201t3.787 1.174M49 38.2V0h6.962v14.698h.134q1.2-2.187 3.574-3.521 2.375-1.335 5.229-1.334 4.615 0 7.255 2.828 2.668 2.801 2.668 7.522V38.2h-7.07V21.794q0-2.827-1.386-4.402-1.387-1.573-4.055-1.573-2.587 0-4.428 2.027-1.815 2.027-1.814 4.962v15.391z1e:[\"$\",\"path\",null,{\"fill\":\"currentColor\",\"d\":\"$1f\"}]\n"])</script>
24</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.