PageSourceSearch

https://abdulghani.tech/blog

html abdulghani.tech collected 2026-10-08 06:57:58 UTC 55,241 bytes, 7 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, maximum-scale=1, user-scalable=no"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/90594d6b6e9df53c.css" data-precedence="next"/><link rel="preload" href="/_next/static/chunks/webpack-545a04b40cf9caf0.js" as="script" fetchPriority="low"/>
1<script src="/_next/static/chunks/fd9d1056-f0c4958f854e5904.js" async=""></script>
1<script src="/_next/static/chunks/864-0524872001da03ee.js" async=""></script>
1<script src="/_next/static/chunks/main-app-8f13c08947745519.js" async=""></script>
1<title>Abdul Ghani - Senior Software Engineer</title><meta name="description" content="Personal website of Abdul Ghani, a Senior Software Engineer specializing in full-stack development with expertise in JavaScript and front-end technologies."/><link rel="manifest" href="/manifest.json"/><meta name="keywords" content="Software Engineer,Full Stack Developer,JavaScript,React,Next.js"/><meta name="theme-color" content="#1e40af"/><meta name="robots" content="index, follow"/><meta name="googlebot" content="index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"/><meta name="google-site-verification" content="your-google-verification-code"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Abdul Ghani"/><meta name="apple-mobile-web-app-status-bar-style" content="default"/><meta property="og:title" content="Abdul Ghani - Senior Software Engineer"/><meta property="og:description" content="Personal website of Abdul Ghani, a Senior Software Engineer specializing in full-stack development with expertise in JavaScript and front-end technologies."/><meta property="og:url" content="https://abdulghani.tech"/><meta property="og:site_name" content="Abdul Ghani"/><meta property="og:locale" content="en_US"/><meta property="og:image" content="https://images.unsplash.com/photo-1555066931-4365d14bab8c"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="Abdul Ghani - Senior Software Engineer"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:creator" content="@abdulghanitech"/><meta name="twitter:title" content="Abdul Ghani - Senior Software Engineer"/><meta name="twitter:description" content="Personal website of Abdul Ghani, a Senior Software Engineer specializing in full-stack development with expertise in JavaScript and front-end technologies."/><meta name="twitter:image" content="https://images.unsplash.com/photo-1555066931-4365d14bab8c"/><link rel="icon" href="/favicon.svg" type="image/svg+xml"/><link rel="apple-touch-icon" href="/icons/icon-192x192.png"/><meta name="next-size-adjust"/>
1<script src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js" noModule=""></script>
1</head><body class="__className_f367f3">
1<script>!function(){try{var d=document.documentElement,c=d.classList;c.remove('light','dark');var e=localStorage.getItem('theme');if('system'===e||(!e&&true)){var t='(prefers-color-scheme: dark)',m=window.matchMedia(t);if(m.media!==t||m.matches){d.style.colorScheme = 'dark';c.add('dark')}else{d.style.colorScheme = 'light';c.add('light')}}else if(e){c.add(e|| '')}if(e==='light'||e==='dark')d.style.colorScheme=e}catch(e){}}()</script>
1<div class="min-h-screen flex flex-col"><header class="sticky top-0 z-50 w-full border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60"><div class="container mx-auto px-4"><div class="flex h-16 items-center justify-between"><div class="flex items-center"><a class="flex items-center space-x-2" href="/"><svg class="transition-opacity hover:opacity-80" width="32" height="27.515151515151516" viewBox="0 0 264 227" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M125.5 11.25C122.26 16.89 115.96 27.8 111.5 35.5C107.03 43.2 97.5 59.62 90.32 72C83.15 84.37 64.55 116.55 48.99 143.5C33.43 170.45 16.26 200.15 10.82 209.5C5.39 218.85 0.96 226.61 0.97 226.75C0.99 226.89 11.01 227 23.25 226.99L45.5 226.98C51.03 217.31 75.28 175.35 102.96 127.5C130.63 79.65 153.47 40.05 153.69 39.5C153.92 38.95 149.24 30.06 143.3 19.74C137.36 9.42 132.25 0.98 131.94 0.99C131.63 0.99 128.73 5.61 125.5 11.25ZM150.99 117.25C149.71 119.59 144.92 127.91 140.34 135.75C135.75 143.59 132 150.45 132 151C132 151.64 140 152 154 152C166.1 152 176 152.34 176 152.75C175.99 153.16 180.45 161.15 185.89 170.5L195.79 187.5L109.88 188.5C93.15 217.17 88.45 225.84 88.65 226.25C88.84 226.66 128.15 227 176 227C223.85 227 263.01 226.89 263.02 226.75C263.03 226.61 258.19 218.16 252.27 207.96C246.35 197.76 231.6 172.23 219.5 151.22L197.5 113.04L153.3 113"></path></svg><span class="font-bold">Abdul Ghani</span></a></div><nav class="hidden md:flex items-center justify-between space-x-6 text-sm font-medium"><div class="flex items-center space-x-6"><a class="transition-colors hover:text-foreground/80 text-foreground/60" href="/">Home</a><a class="transition-colors hover:text-foreground/80 text-foreground/60" href="/about">About</a><a class="transition-colors hover:text-foreground/80 text-foreground/60" href="/projects">Projects</a><a class="transition-colors hover:text-foreground/80 text-foreground" href="/blog">Blog</a><a class="transition-colors hover:text-foreground/80 text-foreground/60" href="/contact">Contact</a></div></nav><div class="flex items-center space-x-4"><button class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:bg-accent hover:text-accent-foreground h-10 w-10"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun h-5 w-5 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon absolute h-5 w-5 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg><span class="sr-only">Toggle theme</span></button><button class="inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:bg-accent hover:text-accent-foreground h-10 w-10 md:hidden"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu h-5 w-5"><line x1="4" x2="20" y1="12" y2="12"></line><line x1="4" x2="20" y1="6" y2="6"></line><line x1="4" x2="20" y1="18" y2="18"></line></svg><span class="sr-only">
1Toggle menu</span></button></div></div></div></header><main class="flex-grow"><div class="container mx-auto px-4 py-16"><div class="max-w-4xl mx-auto"><h1 class="text-4xl font-bold mb-6">Blog</h1><p class="text-lg text-muted-foreground mb-12">Thoughts, insights, and experiences from my journey in software development.</p><div class="space-y-8"><div class="rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden"><a href="https://blog.abdulghani.tech/wedding-invitation-video-magicinvite" target="_blank" rel="noopener noreferrer" class="block hover:no-underline"><div class="flex flex-col md:flex-row"><div class="w-full md:w-1/3 aspect-video md:aspect-square relative"><img alt="Wedding Invitation Videos Are the Future — And MagicInvite.in Makes It Effortless" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" 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/v1752252046434/30a8bf35-4427-4bd9-a1eb-c451274823eb.png"/></div><div class="p-6 flex-1"><div class="flex items-center gap-4 text-sm text-muted-foreground mb-3"><span class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calendar mr-1 h-4 w-4"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path></svg>July 11, 2025</span><div class="flex flex-wrap gap-2"><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">wedding</span><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">Digital Invites Weddings</span><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">wedding planner</span><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">Invitation</span><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">video</span><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">wedding invitation </span></div></div><h2 class="text-xl font-semibold mb-2 hover:text-primary transition-colors">Wedding Invitation Videos Are the Future — And MagicInvite.in Makes It Effortless</h2><p class="text-muted-foreground mb-4">Weddings today aren’t just about rituals and venues — they’re also about storytelling. Couples want to share their journey with friends and family in meaningful ways, and the wedding invitation is often the first chapter.
2And while printed wedding ca...</p><div class="flex items-center text-primary font-medium">Read more<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 h-4 w-4"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></div></div></div></a></div><div class="rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden"><a href="https://blog.abdulghani.tech/upgrade-react-native-version" target="_blank" rel="noopener noreferrer" class="block hover:no-underline"><div class="flex flex-col md:flex-row"><div class="w-full md:w-1/3 aspect-video md:aspect-square relative"><img alt="How to Upgrade React-Native version from 0.57.0 to 0.62.2 🚀" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" 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/v1653030510515/cguv571cm.png"/></div><div class="p-6 flex-1"><div class="flex items-center gap-4 text-sm text-muted-foreground mb-3"><span class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calendar mr-1 h-4 w-4"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path></svg>June 15, 2020</span><div class="flex flex-wrap gap-2"><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">React Native</span></div></div><h2 class="text-xl font-semibold mb-2 hover:text-primary transition-colors">How to Upgrade React-Native version from 0.57.0 to 0.62.2 🚀</h2><p class="text-muted-foreground mb-4">This article will guide you through the process of upgrading your React native version from a lower version possibly less than 0.59 to 0.62
3
4Tl;dr: it&#x27;s a cumbersome process if you don&#x27;t follow it correctly.
5
6Why upgrade to newer versions of React Na...</p><div class="flex items-center text-primary font-medium">Read more<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 h-4 w-4"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></div></div></div></a></div><div class="rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden"><a href="https://blog.abdulghani.tech/the-coronavirus-app" target="_blank" rel="noopener noreferrer" class="block hover:no-underline"><div class="flex flex-col md:flex-row"><div class="w-full md:w-1/3 aspect-video md:aspect-square relative"><img alt="TheCoronaVirus Android App built using React-Native ⚛️ in Just A Day 🤯" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" 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/v1653029315477/nhNULn-zs.jpg"/></div><div class="p-6 flex-1"><div class="flex items-center gap-4 text-sm text-muted-foreground mb-3"><span class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calendar mr-1 h-4 w-4"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path></svg>May 10, 2020</span><div class="flex flex-wrap gap-2"><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">Android</span><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">React Native</span><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">covid</span><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">Open Source</span></div></div><h2 class="text-xl font-semibold mb-2 hover:text-primary transition-colors">TheCoronaVirus Android App built using React-Native ⚛️ in Just A Day 🤯</h2><p class="text-muted-foreground mb-4">So, I was observing the chaos created by the covid-19 pandemic and thought to do something to help the community. Fortunately, I came across React-Native, an amazing technology to create cross-platform mobile apps. I went through its documentation an...</p><div class="flex items-center text-primary font-medium">Read more<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 h-4 w-4"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></div></div></div></a></div><div class="rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden"><a href="https://blog.abdulghani.tech/water-tank-level-system-iot" target="_blank" rel="noopener noreferrer" class="block hover:no-underline"><div class="flex flex-col md:flex-row"><div class="w-full md:w-1/3 aspect-video md:aspect-square relative"><img alt="A Real-Time Water Tank Level 💧 System with Push Notifications 🔔" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" 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/unsplash/zjCc0l9l1cI/upload/v1653028571776/ae7eD2hB7.jpeg"/></div><div class="p-6 flex-1"><div class="flex items-center gap-4 text-sm text-muted-foreground mb-3"><span class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calendar mr-1 h-4 w-4"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path></svg>April 10, 2020</span><div class="flex flex-wrap gap-2"><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">iot</span><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">app development</span><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">automation</span></div></div><h2 class="text-xl font-semibold mb-2 hover:text-primary transition-colors">A Real-Time Water Tank Level 💧 System with Push Notifications 🔔</h2><p class="text-muted-foreground mb-4">
6So, I was taking a shower and you know what it stopped 😐 (had to call somebody to turn the motor on). So, I thought to tackle this problem. I brainstormed a bit and then came up with an idea of measuring the tank level. So, that I won’t forget to tu...</p><div class="flex items-center text-primary font-medium">Read more<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 h-4 w-4"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></div></div></div></a></div><div class="rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden"><a href="https://blog.abdulghani.tech/youtube-auto-subscriber-automation" target="_blank" rel="noopener noreferrer" class="block hover:no-underline"><div class="flex flex-col md:flex-row"><div class="w-full md:w-1/3 aspect-video md:aspect-square relative"><img alt="How I automated subscribing to 1000+ YouTube channels using JavaScript" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" 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/unsplash/uDTzfsGJihw/upload/v1653024527987/GQl1CIY12.jpeg"/></div><div class="p-6 flex-1"><div class="flex items-center gap-4 text-sm text-muted-foreground mb-3"><span class="flex items-center"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calendar mr-1 h-4 w-4"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path></svg>February 13, 2020</span><div class="flex flex-wrap gap-2"><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">JavaScript</span><span class="inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap">automation</span></div></div><h2 class="text-xl font-semibold mb-2 hover:text-primary transition-colors">How I automated subscribing to 1000+ YouTube channels using JavaScript</h2><p class="text-muted-foreground mb-4">So, I had a new google account and I wanted all my old channels which I had subscribed to in my old account. The simple way was to just open the account’s channel page and subscribe to all the channels one by one by manually clicking them. 🤷‍♂️
7Init...</p><div class="flex items-center text-primary font-medium">Read more<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link ml-2 h-4 w-4"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></div></div></div></a></div></div></div></div></main><footer class="border-t"><div class="container mx-auto px-4"><div class="flex flex-col md:flex-row items-center justify-between py-6 md:py-8 gap-4"><div class="flex items-center gap-2"><svg class="opacity-80" width="24" height="20.636363636363637" viewBox="0 0 264 227" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="M125.5 11.25C122.26 16.89 115.96 27.8 111.5 35.5C107.03 43.2 97.5 59.62 90.32 72C83.15 84.37 64.55 116.55 48.99 143.5C33.43 170.45 16.26 200.15 10.82 209.5C5.39 218.85 0.96 226.61 0.97 226.75C0.99 226.89 11.01 227 23.25 226.99L45.5 226.98C51.03 217.31 75.28 175.35 102.96 127.5C130.63 79.65 153.47 40.05 153.69 39.5C153.92 38.95 149.24 30.06 143.3 19.74C137.36 9.42 132.25 0.98 131.94 0.99C131.63 0.99 128.73 5.61 125.5 11.25ZM150.99 117.25C149.71 119.59 144.92 127.91 140.34 135.75C135.75 143.59 132 150.45 132 151C132 151.64 140 152 154 152C166.1 152 176 152.34 176 152.75C175.99 153.16 180.45 161.15 185.89 170.5L195.79 187.5L109.88 188.5C93.15 217.17 88.45 225.84 88.65 226.25C88.84 226.66 128.15 227 176 227C223.85 227 263.01 226.89 263.02 226.75C263.03 226.61 258.19 218.16 252.27 207.96C246.35 197.76 231.6 172.23 219.5 151.22L197.5 113.04L153.3 113"></path></svg><p class="text-sm text-muted-foreground">Built with passion by Abdul Ghani</p></div><div class="flex items-center space-x-4"><a target="_blank" rel="noopener noreferrer" class="text-muted-foreground hover:text-primary transition-colors" href="https://github.com/abdulghanitech"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-github h-5 w-5"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"></path><path d="M9 18c-4.51 2-5-2-7-2"></path></svg><span class="sr-only">GitHub</span></a><a target="_blank" rel="noopener noreferrer" class="text-muted-foreground hover:text-primary transition-colors" href="https://linkedin.com/in/abdulghanitech"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-linkedin h-5 w-5"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect width="4" height="12" x="2" y="9"></rect><circle cx="4" cy="4" r="2"></circle></svg><span class="sr-only">LinkedIn</span></a><a target="_blank" rel="noopener noreferrer" class="text-muted-foreground hover:text-primary transition-colors" href="https://x.com/abdulghanitech"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-twitter h-5 w-5"><path d="M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z"></path></svg><span class="sr-only">Twitter</span></a></div></div></div></footer></div>
7<script src="/_next/static/chunks/webpack-545a04b40cf9caf0.js" async=""></script>
7<script>(self.__next_f=self.__next_f||[]).push([0])</script>
7<script>self.__next_f.push([1,"1:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:HL[\"/_next/static/css/90594d6b6e9df53c.css\",\"style\"]\n0:\"$L3\"\n"])</script>
7<script>self.__next_f.push([1,"4:I{\"id\":6054,\"chunks\":[\"272:static/chunks/webpack-545a04b40cf9caf0.js\",\"971:static/chunks/fd9d1056-f0c4958f854e5904.js\",\"864:static/chunks/864-0524872001da03ee.js\"],\"name\":\"\",\"async\":false}\n6:I{\"id\":1729,\"chunks\":[\"272:static/chunks/webpack-545a04b40cf9caf0.js\",\"971:static/chunks/fd9d1056-f0c4958f854e5904.js\",\"864:static/chunks/864-0524872001da03ee.js\"],\"name\":\"\",\"async\":false}\n7:I{\"id\":4657,\"chunks\":[\"724:static/chunks/724-1b4b6c688ab722ef.js\",\"813:static/chunks/813-6c9720793505ad8a.js\",\"185:static/chunks"])</script>
7<script>self.__next_f.push([1,"/app/layout-2b5eb15ab8309d31.js\"],\"name\":\"ThemeProvider\",\"async\":false}\n8:I{\"id\":8259,\"chunks\":[\"724:static/chunks/724-1b4b6c688ab722ef.js\",\"813:static/chunks/813-6c9720793505ad8a.js\",\"185:static/chunks/app/layout-2b5eb15ab8309d31.js\"],\"name\":\"Navigation\",\"async\":false}\n9:I{\"id\":1443,\"chunks\":[\"272:static/chunks/webpack-545a04b40cf9caf0.js\",\"971:static/chunks/fd9d1056-f0c4958f854e5904.js\",\"864:static/chunks/864-0524872001da03ee.js\"],\"name\":\"\",\"async\":false}\na:I{\"id\":8639,\"chunks\":[\"272:static/chunks/webpack"])</script>
7<script>self.__next_f.push([1,"-545a04b40cf9caf0.js\",\"971:static/chunks/fd9d1056-f0c4958f854e5904.js\",\"864:static/chunks/864-0524872001da03ee.js\"],\"name\":\"\",\"async\":false}\nd:I{\"id\":127,\"chunks\":[\"724:static/chunks/724-1b4b6c688ab722ef.js\",\"813:static/chunks/813-6c9720793505ad8a.js\",\"185:static/chunks/app/layout-2b5eb15ab8309d31.js\"],\"name\":\"Logo\",\"async\":false}\ne:I{\"id\":4724,\"chunks\":[\"724:static/chunks/724-1b4b6c688ab722ef.js\",\"813:static/chunks/813-6c9720793505ad8a.js\",\"185:static/chunks/app/layout-2b5eb15ab8309d31.js\"],\"name\":\"\",\"asyn"])</script>
7<script>self.__next_f.push([1,"c\":false}\n"])</script>
7<script>self.__next_f.push([1,"3:[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/90594d6b6e9df53c.css\",\"precedence\":\"next\"}]],[\"$\",\"$L4\",null,{\"buildId\":\"mcx3TBMLhOFHhz1Y1Rw49\",\"assetPrefix\":\"\",\"initialCanonicalUrl\":\"/blog\",\"initialTree\":[\"\",{\"children\":[\"blog\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialHead\":[false,\"$L5\"],\"globalErrorComponent\":\"$6\",\"children\":[null,[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"__className_f367f3\",\"children\":[\"$\",\"$L7\",null,{\"attribute\":\"class\",\"defaultTheme\":\"system\",\"enableSystem\":true,\"children\":[\"$\",\"div\",null,{\"className\":\"min-h-screen flex flex-col\",\"children\":[[\"$\",\"$L8\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-grow\",\"children\":[\"$\",\"$L9\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"loading\":\"$undefined\",\"loadingStyles\":\"$undefined\",\"hasLoading\":false,\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[],\"childProp\":{\"current\":[\"$\",\"$L9\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"blog\",\"children\"],\"loading\":\"$undefined\",\"loadingStyles\":\"$undefined\",\"hasLoading\":false,\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"template\":[\"$\",\"$La\",null,{}],\"templateStyles\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"childProp\":{\"current\":[\"$Lb\",\"$Lc\",null],\"segment\":\"__PAGE__\"},\"styles\":[]}],\"segment\":\"blog\"},\"styles\":[]}]}],[\"$\",\"footer\",null,{\"className\":\"border-t\",\"children\":[\"$\",\"div\",null,{\"className\":\"container mx-auto px-4\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex flex-col md:flex-row items-center justify-between py-6 md:py-8 gap-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"$Ld\",null,{\"size\":24,\"className\":\"opacity-80\"}],[\"$\",\"p\",null,{\"className\":\"text-sm text-muted-foreground\",\"children\":\"Built with passion by Abdul Ghani\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center space-x-4\",\"children\":[[\"$\",\"$Le\",\"GitHub\",{\"href\":\"https://github.com/abdulghanitech\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"text-muted-foreground hover:text-primary transition-colors\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-github h-5 w-5\",\"children\":[[\"$\",\"path\",\"tonef\",{\"d\":\"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4\"}],[\"$\",\"path\",\"9comsn\",{\"d\":\"M9 18c-4.51 2-5-2-7-2\"}],\"$undefined\"]}],[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"GitHub\"}]]}],[\"$\",\"$Le\",\"LinkedIn\",{\"href\":\"https://linkedin.com/in/abdulghanitech\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"text-muted-foreground hover:text-primary transition-colors\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\"
7:24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-linkedin h-5 w-5\",\"children\":[[\"$\",\"path\",\"c2jq9f\",{\"d\":\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"}],[\"$\",\"rect\",\"mk3on5\",{\"width\":\"4\",\"height\":\"12\",\"x\":\"2\",\"y\":\"9\"}],[\"$\",\"circle\",\"bt5ra8\",{\"cx\":\"4\",\"cy\":\"4\",\"r\":\"2\"}],\"$undefined\"]}],[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"LinkedIn\"}]]}],[\"$\",\"$Le\",\"Twitter\",{\"href\":\"https://x.com/abdulghanitech\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"text-muted-foreground hover:text-primary transition-colors\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-twitter h-5 w-5\",\"children\":[[\"$\",\"path\",\"pff0z6\",{\"d\":\"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z\"}],\"$undefined\"]}],[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":\"Twitter\"}]]}]]}]]}]}]}]]}]}]}]}],null]}]]\n"])</script>
7<script>self.__next_f.push([1,"5:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"1\",{\"children\":\"Abdul Ghani - Senior Software Engineer\"}],[\"$\",\"meta\",\"2\",{\"name\":\"description\",\"content\":\"Personal website of Abdul Ghani, a Senior Software Engineer specializing in full-stack development with expertise in JavaScript and front-end technologies.\"}],[\"$\",\"link\",\"3\",{\"rel\":\"manifest\",\"href\":\"/manifest.json\"}],[\"$\",\"meta\",\"4\",{\"name\":\"keywords\",\"content\":\"Software Engineer,Full Stack Developer,JavaScript,React,Next.js\"}],[\"$\",\"meta\",\"5\",{\"name\":\"theme-color\",\"content\":\"#1e40af\"}],[\"$\",\"meta\",\"6\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}],[\"$\",\"meta\",\"7\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"8\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"meta\",\"9\",{\"name\":\"google-site-verification\",\"content\":\"your-google-verification-code\"}],[\"$\",\"meta\",\"10\",{\"name\":\"apple-mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"11\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Abdul Ghani\"}],[\"$\",\"meta\",\"12\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"default\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:title\",\"content\":\"Abdul Ghani - Senior Software Engineer\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:description\",\"content\":\"Personal website of Abdul Ghani, a Senior Software Engineer specializing in full-stack development with expertise in JavaScript and front-end technologies.\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:url\",\"content\":\"https://abdulghani.tech\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:site_name\",\"content\":\"Abdul Ghani\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:image\",\"content\":\"https://images.unsplash.com/photo-1555066931-4365d14bab8c\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"20\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"21\",{\"property\":\"og:image:alt\",\"content\":\"Abdul Ghani - Senior Software Engineer\"}],[\"$\",\"meta\",\"22\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:creator\",\"content\":\"@abdulghanitech\"}],[\"$\",\"meta\",\"25\",{\"name\":\"twitter:title\",\"content\":\"Abdul Ghani - Senior Software Engineer\"}],[\"$\",\"meta\",\"26\",{\"name\":\"twitter:description\",\"content\":\"Personal website of Abdul Ghani, a Senior Software Engineer specializing in full-stack development with expertise in JavaScript and front-end technologies.\"}],[\"$\",\"meta\",\"27\",{\"name\":\"twitter:image\",\"content\":\"https://images.unsplash.com/photo-1555066931-4365d14bab8c\"}],[\"$\",\"link\",\"28\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"29\",{\"rel\":\"apple-touch-icon\",\"href\":\"/icons/icon-192x192.png\"}],[\"$\",\"meta\",\"30\",{\"name\":\"next-size-adjust\"}]]\n"])</script>
7<script>self.__next_f.push([1,"b:null\n"])</script>
7<script>self.__next_f.push([1,"f:I{\"id\":6964,\"chunks\":[\"964:static/chunks/964-dc19a07886782c90.js\",\"404:static/chunks/app/blog/page-9fc6dc68fb21ac26.js\"],\"name\":\"Image\",\"async\":false}\n"])</script>
7<script>self.__next_f.push([1,"c:[\"$\",\"div\",null,{\"className\":\"container mx-auto px-4 py-16\",\"children\":[\"$\",\"div\",null,{\"className\":\"max-w-4xl mx-auto\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-4xl font-bold mb-6\",\"children\":\"Blog\"}],[\"$\",\"p\",null,{\"className\":\"text-lg text-muted-foreground mb-12\",\"children\":\"Thoughts, insights, and experiences from my journey in software development.\"}],[\"$\",\"div\",null,{\"className\":\"space-y-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://blog.abdulghani.tech/wedding-invitation-video-magicinvite\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"block hover:no-underline\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex flex-col md:flex-row\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-full md:w-1/3 aspect-video md:aspect-square relative\",\"children\":[\"$\",\"$Lf\",null,{\"src\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1752252046434/30a8bf35-4427-4bd9-a1eb-c451274823eb.png\",\"alt\":\"Wedding Invitation Videos Are the Future — And MagicInvite.in Makes It Effortless\",\"fill\":true,\"className\":\"object-cover\"}]}],[\"$\",\"div\",null,{\"className\":\"p-6 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-4 text-sm text-muted-foreground mb-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-calendar mr-1 h-4 w-4\",\"children\":[[\"$\",\"path\",\"1cmpym\",{\"d\":\"M8 2v4\"}],[\"$\",\"path\",\"4m81vk\",{\"d\":\"M16 2v4\"}],[\"$\",\"rect\",\"1hopcy\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],[\"$\",\"path\",\"8toen8\",{\"d\":\"M3 10h18\"}],\"$undefined\"]}],\"July 11, 2025\"]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2\",\"children\":[[\"$\",\"span\",\"wedding\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"wedding\"}],[\"$\",\"span\",\"Digital Invites Weddings\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"Digital Invites Weddings\"}],[\"$\",\"span\",\"wedding planner\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"wedding planner\"}],[\"$\",\"span\",\"Invitation\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"Invitation\"}],[\"$\",\"span\",\"video\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"video\"}],[\"$\",\"span\",\"wedding invitation \",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"wedding invitation \"}]]}]]}],[\"$\",\"h2\",null,{\"className\":\"text-xl font-semibold mb-2 hover:text-primary transition-colors\",\"children\":\"Wedding Invitation Videos Are the Future — And MagicInvite.in Makes It Effortless\"}],[\"$\",\"p\",null,{\"className\":\"text-muted-foreground mb-4\",\"children\":\"Weddings today aren’t just about rituals and venues — they’re also about storytelling. Couples want to share their journey with friends and family in meaningful ways, and the wedding invitation is often the first chapter.\\nAnd while printed wedding ca...\"}],[\"$\",\"div\",null,{\"className\":\"flex items-center text-primary font-medium\",\"children\":[\"Read more\",[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\"
7:24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-external-link ml-2 h-4 w-4\",\"children\":[[\"$\",\"path\",\"1q9fwt\",{\"d\":\"M15 3h6v6\"}],[\"$\",\"path\",\"gplh6r\",{\"d\":\"M10 14 21 3\"}],[\"$\",\"path\",\"a6xqqp\",{\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}],\"$undefined\"]}]]}]]}]]}]}]}],[\"$\",\"div\",null,{\"className\":\"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://blog.abdulghani.tech/upgrade-react-native-version\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"block hover:no-underline\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex flex-col md:flex-row\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-full md:w-1/3 aspect-video md:aspect-square relative\",\"children\":[\"$\",\"$Lf\",null,{\"src\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1653030510515/cguv571cm.png\",\"alt\":\"How to Upgrade React-Native version from 0.57.0 to 0.62.2 🚀\",\"fill\":true,\"className\":\"object-cover\"}]}],[\"$\",\"div\",null,{\"className\":\"p-6 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-4 text-sm text-muted-foreground mb-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-calendar mr-1 h-4 w-4\",\"children\":[[\"$\",\"path\",\"1cmpym\",{\"d\":\"M8 2v4\"}],[\"$\",\"path\",\"4m81vk\",{\"d\":\"M16 2v4\"}],[\"$\",\"rect\",\"1hopcy\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],[\"$\",\"path\",\"8toen8\",{\"d\":\"M3 10h18\"}],\"$undefined\"]}],\"June 15, 2020\"]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2\",\"children\":[[\"$\",\"span\",\"React Native\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"React Native\"}]]}]]}],[\"$\",\"h2\",null,{\"className\":\"text-xl font-semibold mb-2 hover:text-primary transition-colors\",\"children\":\"How to Upgrade React-Native version from 0.57.0 to 0.62.2 🚀\"}],[\"$\",\"p\",null,{\"className\":\"text-muted-foreground mb-4\",\"children\":\"This article will guide you through the process of upgrading your React native version from a lower version possibly less than 0.59 to 0.62\\n\\nTl;dr: it's a cumbersome process if you don't follow it correctly.\\n\\nWhy upgrade to newer versions of React Na...\"}],[\"$\",\"div\",null,{\"className\":\"flex items-center text-primary font-medium\",\"children\":[\"Read more\",[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-external-link ml-2 h-4 w-4\",\"children\":[[\"$\",\"path\",\"1q9fwt\",{\"d\":\"M15 3h6v6\"}],[\"$\",\"path\",\"gplh6r\",{\"d\":\"M10 14 21 3\"}],[\"$\",\"path\",\"a6xqqp\",{\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}],\"$undefined\"]}]]}]]}]]}]}]}],[\"$\",\"div\",null,{\"className\":\"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://blog.abdulghani.tech/the-coronavirus-app\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"block hover:no-underline\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex flex-col md:flex-row\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-full md:w-1/3 aspect-video md:aspect-square relative\",\"children\":[\"$\",\"$Lf\",null,{\"src\":\"https://cdn.hashnode.com/res/hashnode/image/upload/v1653029315477/nhNULn-zs.jpg\",\"alt\":\"TheCoronaVirus Android App built using React-Native ⚛️ in Just A Day 🤯\",\"fill\":true,\"className\":\"object-cover\"}]}],[\"$\",\"div\",null,{\"className\":\"p-6 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-4 text-sm text-muted-foreground mb-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\"
7:24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-calendar mr-1 h-4 w-4\",\"children\":[[\"$\",\"path\",\"1cmpym\",{\"d\":\"M8 2v4\"}],[\"$\",\"path\",\"4m81vk\",{\"d\":\"M16 2v4\"}],[\"$\",\"rect\",\"1hopcy\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],[\"$\",\"path\",\"8toen8\",{\"d\":\"M3 10h18\"}],\"$undefined\"]}],\"May 10, 2020\"]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2\",\"children\":[[\"$\",\"span\",\"Android\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"Android\"}],[\"$\",\"span\",\"React Native\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"React Native\"}],[\"$\",\"span\",\"covid\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"covid\"}],[\"$\",\"span\",\"Open Source\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"Open Source\"}]]}]]}],[\"$\",\"h2\",null,{\"className\":\"text-xl font-semibold mb-2 hover:text-primary transition-colors\",\"children\":\"TheCoronaVirus Android App built using React-Native ⚛️ in Just A Day 🤯\"}],[\"$\",\"p\",null,{\"className\":\"text-muted-foreground mb-4\",\"children\":\"So, I was observing the chaos created by the covid-19 pandemic and thought to do something to help the community. Fortunately, I came across React-Native, an amazing technology to create cross-platform mobile apps. I went through its documentation an...\"}],[\"$\",\"div\",null,{\"className\":\"flex items-center text-primary font-medium\",\"children\":[\"Read more\",[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-external-link ml-2 h-4 w-4\",\"children\":[[\"$\",\"path\",\"1q9fwt\",{\"d\":\"M15 3h6v6\"}],[\"$\",\"path\",\"gplh6r\",{\"d\":\"M10 14 21 3\"}],[\"$\",\"path\",\"a6xqqp\",{\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}],\"$undefined\"]}]]}]]}]]}]}]}],[\"$\",\"div\",null,{\"className\":\"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://blog.abdulghani.tech/water-tank-level-system-iot\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"block hover:no-underline\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex flex-col md:flex-row\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-full md:w-1/3 aspect-video md:aspect-square relative\",\"children\":[\"$\",\"$Lf\",null,{\"src\":\"https://cdn.hashnode.com/res/hashnode/image/unsplash/zjCc0l9l1cI/upload/v1653028571776/ae7eD2hB7.jpeg\",\"alt\":\"A Real-Time Water Tank Level 💧 System with Push Notifications 🔔\",\"fill\":true,\"className\":\"object-cover\"}]}],[\"$\",\"div\",null,{\"className\":\"p-6 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-4 text-sm text-muted-foreground mb-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-calendar mr-1 h-4 w-4\",\"children\":[[\"$\",\"path\",\"1cmpym\",{\"d\":\"M8 2v4\"}],[\"$\",\"path\",\"4m81vk\",{\"d\":\"M16 2v4\"}],[\"$\",\"rect\",\"1hopcy\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],[\"$\",\"path\",\"8toen8\",{\"d\":\"M3 10h18\"}],\"$undefined\"]}],\"April 10, 2020\"]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2\",\"children\":[[\"$\",\"span\",\"iot\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"iot\"}],[\"$\",\"span\",\"app development\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"app development\"}],[\"$\",\"span\",\"automation\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"automation\"}]]}]]}],[\"$\",\"h2\",null,{\"className\":\"text-xl font-semibold mb-2 hover:text-primary transition-colors\",\"children\":\"A Real-Time Water Tank Level 💧 System with Push Notifications 🔔\"}],[\"$\",\"p\",null,{\"className\":\"text-muted-foreground mb-4\",\"children\":\"So, I was taking a shower and you know 
7what it stopped 😐 (had to call somebody to turn the motor on). So, I thought to tackle this problem. I brainstormed a bit and then came up with an idea of measuring the tank level. So, that I won’t forget to tu...\"}],[\"$\",\"div\",null,{\"className\":\"flex items-center text-primary font-medium\",\"children\":[\"Read more\",[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-external-link ml-2 h-4 w-4\",\"children\":[[\"$\",\"path\",\"1q9fwt\",{\"d\":\"M15 3h6v6\"}],[\"$\",\"path\",\"gplh6r\",{\"d\":\"M10 14 21 3\"}],[\"$\",\"path\",\"a6xqqp\",{\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}],\"$undefined\"]}]]}]]}]]}]}]}],[\"$\",\"div\",null,{\"className\":\"rounded-lg border bg-card text-card-foreground shadow-sm overflow-hidden\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://blog.abdulghani.tech/youtube-auto-subscriber-automation\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"block hover:no-underline\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex flex-col md:flex-row\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-full md:w-1/3 aspect-video md:aspect-square relative\",\"children\":[\"$\",\"$Lf\",null,{\"src\":\"https://cdn.hashnode.com/res/hashnode/image/unsplash/uDTzfsGJihw/upload/v1653024527987/GQl1CIY12.jpeg\",\"alt\":\"How I automated subscribing to 1000+ YouTube channels using JavaScript\",\"fill\":true,\"className\":\"object-cover\"}]}],[\"$\",\"div\",null,{\"className\":\"p-6 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-4 text-sm text-muted-foreground mb-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-calendar mr-1 h-4 w-4\",\"children\":[[\"$\",\"path\",\"1cmpym\",{\"d\":\"M8 2v4\"}],[\"$\",\"path\",\"4m81vk\",{\"d\":\"M16 2v4\"}],[\"$\",\"rect\",\"1hopcy\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],[\"$\",\"path\",\"8toen8\",{\"d\":\"M3 10h18\"}],\"$undefined\"]}],\"February 13, 2020\"]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-2\",\"children\":[[\"$\",\"span\",\"JavaScript\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"JavaScript\"}],[\"$\",\"span\",\"automation\",{\"className\":\"inline-flex items-center px-2 py-0.5 bg-secondary text-secondary-foreground rounded-md text-xs leading-tight whitespace-nowrap\",\"children\":\"automation\"}]]}]]}],[\"$\",\"h2\",null,{\"className\":\"text-xl font-semibold mb-2 hover:text-primary transition-colors\",\"children\":\"How I automated subscribing to 1000+ YouTube channels using JavaScript\"}],[\"$\",\"p\",null,{\"className\":\"text-muted-foreground mb-4\",\"children\":\"So, I had a new google account and I wanted all my old channels which I had subscribed to in my old account. The simple way was to just open the account’s channel page and subscribe to all the channels one by one by manually clicking them. 🤷‍♂️\\nInit...\"}],[\"$\",\"div\",null,{\"className\":\"flex items-center text-primary font-medium\",\"children\":[\"Read more\",[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-external-link ml-2 h-4 w-4\",\"children\":[[\"$\",\"path\",\"1q9fwt\",{\"d\":\"M15 3h6v6\"}],[\"$\",\"path\",\"gplh6r\",{\"d\":\"M10 14 21 3\"}],[\"$\",\"path\",\"a6xqqp\",{\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}],\"$undefined\"]}]]}]]}]]}]}]}]]}]]}]}]\n"])</script>
7</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.