<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Abdul Ghani]]></title><description><![CDATA[A Passionate Software Engineer, Tech geek and a Blogger. I love building software that solves real-world problems and adds value to society through technology ⚡]]></description><link>https://blog.abdulghani.tech</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 07:53:26 GMT</lastBuildDate><atom:link href="https://blog.abdulghani.tech/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Wedding Invitation Videos Are the Future — And MagicInvite.in Makes It Effortless]]></title><description><![CDATA[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.
And while printed wedding ca...]]></description><link>https://blog.abdulghani.tech/wedding-invitation-video-magicinvite</link><guid isPermaLink="true">https://blog.abdulghani.tech/wedding-invitation-video-magicinvite</guid><category><![CDATA[wedding]]></category><category><![CDATA[Digital Invites Weddings]]></category><category><![CDATA[wedding planner]]></category><category><![CDATA[Invitation]]></category><category><![CDATA[video]]></category><category><![CDATA[wedding invitation ]]></category><dc:creator><![CDATA[Abdul Ghani]]></dc:creator><pubDate>Fri, 11 Jul 2025 16:44:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1752252046434/30a8bf35-4427-4bd9-a1eb-c451274823eb.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>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.</p>
<p>And while printed wedding cards still have their charm, they’re quickly being replaced by something that’s faster, more engaging, and far easier to share: Wedding invitation videos.</p>
<p>Lately, I came across a tool called <a target="_blank" href="http://MagicInvite.in">MagicInvite.in</a> — and after trying it, I can confidently say it’s one of the easiest and most polished ways to create wedding invite videos without hiring a designer or learning video editing yourself.</p>
<h1 id="heading-why-wedding-invitation-videos-are-taking-over">Why Wedding Invitation Videos Are Taking Over?</h1>
<p>If you’ve ever planned a wedding or helped someone through it, you know how much coordination goes into even the smallest things — especially invitations.</p>
<p>Now add these realities:</p>
<p>Everyone’s on WhatsApp and Instagram.</p>
<p>People expect video, not just static images.</p>
<p>You often need to invite folks last-minute or virtually.</p>
<p>A <a target="_blank" href="https://magicinvite.in/wedding-invitation-video">wedding video invitation</a> checks all the boxes:</p>
<p>💬 Shareable instantly</p>
<p>🎵 Emotionally expressive (music, visuals, motion)</p>
<p>🕒 Fast to create — sometimes within minutes</p>
<p>🌍 Environmentally friendly — no paper waste</p>
<p>💸 Often much cheaper than printed invites or designers</p>
<h1 id="heading-what-is-magicinvite">What Is MagicInvite?</h1>
<p><a target="_blank" href="http://MagicInvite.in">MagicInvite.in</a> is a website that helps you create personalized wedding invitation videos online, using ready-made templates designed for Indian weddings. The process is entirely browser-based, mobile-friendly, and incredibly simple:</p>
<ol>
<li><p>Choose a video template (Hindu wedding, Nikah, South Indian, Rajasthani, engagement, etc.)</p>
</li>
<li><p>Enter your event details (names, venue, time, RSVP, optional photos)</p>
</li>
<li><p>Generate and download the video instantly</p>
</li>
</ol>
<p>That’s it. You get a high-quality video optimized for WhatsApp, Instagram Reels, Stories, and other digital platforms.</p>
<h1 id="heading-what-makes-magicinvite-different">What Makes MagicInvite Different?</h1>
<p>There are other ways to make wedding invitation videos — including Canva, hiring a freelancer, or using generic invitation apps. But MagicInvite focuses on speed, cultural relevance, and simplicity, which sets it apart.</p>
<p>✅ Designed for Indian Celebrations</p>
<p>Many platforms offer Western-style templates, but MagicInvite templates are created specifically for Indian weddings — with culturally appropriate fonts, colors, and background music.</p>
<p>✅ Instant Video Rendering</p>
<p>There’s no drag-and-drop editor. Just fill out your event details, and the system generates the final animated video for you — no design skills required.</p>
<p>✅ Mobile-Friendly</p>
<p>You can complete the entire process from your phone in 5–10 minutes. No apps to install, no complicated steps.</p>
<p>✅ Affordable Pricing</p>
<p>Most templates are priced between ₹299–₹999. Compare that to traditional invites or freelance designers, and it’s a no-brainer.</p>
<h1 id="heading-how-magicinvite-compares">How MagicInvite Compares?</h1>
<p>Here’s a practical breakdown of how MagicInvite stacks up against the usual options people consider:</p>
<h3 id="heading-canva">🟡 Canva</h3>
<p>Canva is a popular design tool, but not really built for animated wedding videos. You’ll still need to:</p>
<ol>
<li><p>Choose and modify a template manually</p>
</li>
<li><p>Adjust timing, transitions, music</p>
</li>
<li><p>Export the final video (which isn’t always optimized for WhatsApp)</p>
</li>
<li><p>Know basic design principles</p>
</li>
</ol>
<p>Also, Canva templates don’t cater specifically to Indian weddings, and their animations tend to feel generic.</p>
<h3 id="heading-hiring-a-designer">🟡 Hiring a Designer</h3>
<ol>
<li><p>This works well if you want something completely custom, but:</p>
</li>
<li><p>Turnaround time is longer (5–7 days or more)</p>
</li>
<li><p>Revisions can add delays</p>
</li>
<li><p>Costs typically start at ₹3000–₹5000 for basic videos</p>
</li>
</ol>
<p>You need to explain your requirements clearly and coordinate back-and-forth</p>
<h3 id="heading-other-generic-platforms">🟡 Other Generic Platforms</h3>
<p>Many online invitation makers exist, but few focus on Indian audiences. Some:</p>
<ol>
<li><p>Turnaround time is longer (2–4 days or more)</p>
</li>
<li><p>Lack regional language or religious customization</p>
</li>
<li><p>Have clunky UI or outdated templates</p>
</li>
<li><p>No Free Preview available.</p>
</li>
<li><p>Upsell heavily for basic features</p>
</li>
</ol>
<h3 id="heading-why-magicinvite-feels-just-right">Why MagicInvite Feels Just Right ✅</h3>
<p>Here’s what stood out to me:</p>
<p><strong>🎥 It works right away</strong> — no design, no guesswork, no back-and-forth.</p>
<p><strong>🕒 It saves time</strong> — I created a wedding invite video in under 10 minutes.</p>
<p><strong>❤️ It’s free</strong> - It offers a free preview video instantly</p>
<p><strong>📱 It’s built for mobile</strong> — you can do everything from your phone.</p>
<p><strong>🎨 It feels personal</strong> — the animations, music, and fonts are culturally on point.</p>
<p>Plus, the fact that you can preview everything before paying makes it feel trustworthy and transparent.</p>
<h1 id="heading-not-just-for-weddings">Not Just for Weddings</h1>
<p>Even though the name is MagicInvite, it’s not limited to weddings. The platform also supports:</p>
<ol>
<li><p>Engagement announcements</p>
</li>
<li><p>Nikah and Aqeeqah ceremonies</p>
</li>
<li><p>Baby showers and naming ceremonies</p>
</li>
<li><p>Save-the-date videos</p>
</li>
<li><p>Reception invites</p>
</li>
<li><p>And many more events and styles</p>
</li>
</ol>
<p>New templates are being added frequently, covering different styles, communities, and languages.</p>
<h1 id="heading-final-thoughts">Final Thoughts</h1>
<p>If you’re looking for a clean, fast, and reliable way to create a wedding invitation video, I genuinely think <a target="_blank" href="http://MagicInvite.in">MagicInvite.in</a> is one of the best options out there right now — especially for Indian weddings.</p>
<p>You don’t need design experience. You don’t need to wait days. And you don’t need to spend thousands.</p>
<p>It’s the kind of tool that just quietly solves a real-world problem — and does it well.</p>
<p>🎥 Try it out here → <a target="_blank" href="https://magicinvite.in/wedding-invitation-video">https://magicinvite.in/wedding-invitation-video</a></p>
]]></content:encoded></item><item><title><![CDATA[How to Upgrade React-Native version from 0.57.0 to 0.62.2 🚀]]></title><description><![CDATA[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

Tl;dr: it's a cumbersome process if you don't follow it correctly.

Why upgrade to newer versions of React Na...]]></description><link>https://blog.abdulghani.tech/upgrade-react-native-version</link><guid isPermaLink="true">https://blog.abdulghani.tech/upgrade-react-native-version</guid><category><![CDATA[React Native]]></category><dc:creator><![CDATA[Abdul Ghani]]></dc:creator><pubDate>Mon, 15 Jun 2020 07:11:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1653030510515/cguv571cm.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>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</p>
<blockquote>
<p>Tl;dr: it's a cumbersome process if you don't follow it correctly.</p>
</blockquote>
<p>Why upgrade to newer versions of React Native? 🙄</p>
<h3 id="heading-major-reasons-for-upgrading-to-react-native-v0622">Major reasons for upgrading to React Native v0.62.2</h3>
<ul>
<li>Speed boost! ✔</li>
<li>Fast refresh / live-reload ⚡</li>
<li>Hermes support (compiles the js code to binary, which helps in less startup time, faster response, and smaller app size)</li>
<li>First-class support for <a target="_blank" href="https://fbflipper.com/">flipper</a> (an awesome debugging tool for react-native)</li>
<li>Support for React hooks 🙌</li>
<li>Other Bug fixes. 🐞</li>
</ul>
<p>Well, the newer versions of React native ( &gt;0.60) has a <a target="_blank" href="https://github.com/react-native-community/rn-diff-purge/blob/master/README.md">utility tool</a> to upgrade easily. It uses git under the hood to upgrade your React native under the hood. But coming to older versions of react-native (&lt;0.60) this support doesn't work quite well. And in most cases, it requires you to manually upgrade.</p>
<p>So, to upgrade from 0.57.0 to 0.62.2 you need to first upgrade it to 0.58.6 and then 0.59.10 after this you're okay to upgrade to 0.62 or higher. This is my personal experience. Because jumping directly to the latest version had many confusions and thus failures. So, I recommend upgrading it in parts.</p>
<p><strong>Here's the actual upgrade process of React native from 0.57.0 to 0.62.2
</strong></p>
<ol>
<li>Delete your node_modules folder</li>
<li>Go to <a target="_blank" href="https://react-native-community.github.io/upgrade-helper/">this page</a> and select your current version and the target version (increase each version at a time)</li>
<li>Click "Show me how to upgrade" button</li>
<li>Now scroll down and manually check the changes shown in the diff.</li>
<li>Try to replicate the same in your code</li>
<li>Now install all the packages using yarn install or npm i</li>
<li>Clean the project using gradlew clean</li>
<li>Do a build either by yarn android or android studio.</li>
<li>If the build is successful try to run the app in your device else there's a problem with the changed files, check diff again and repeat the steps 1 to 8.</li>
</ol>
<p>That's it. You now have the latest React Native version. You've successfully upgraded from 0.57.0 to 0.62.2 🎉</p>
<p>Let me know if you face any problems or if you have any better ways to do it. 😊</p>
]]></content:encoded></item><item><title><![CDATA[TheCoronaVirus Android App built using React-Native ⚛️ in Just A Day 🤯]]></title><description><![CDATA[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...]]></description><link>https://blog.abdulghani.tech/the-coronavirus-app</link><guid isPermaLink="true">https://blog.abdulghani.tech/the-coronavirus-app</guid><category><![CDATA[Android]]></category><category><![CDATA[React Native]]></category><category><![CDATA[covid]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[Abdul Ghani]]></dc:creator><pubDate>Sun, 10 May 2020 07:01:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1653029315477/nhNULn-zs.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>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 and being from React.js background I quickly grasped the basic concepts and decided to build an app for covid-19 using React Native</p>
<p>Finally, After going through react native's documentation and navigating through some problems during builds, I was able to build this in a day. Yes, just a day and I launched it. ⚡️</p>
<p>As soon as I launched it, I received immense support from my friends, colleagues, and community. ❤️ They were happy to use this app for tracking covid-19 cases, getting help, accessing resources, etc.</p>
<p>Here's what the app offers.</p>
<h3 id="heading-features">Features:</h3>
<ul>
<li>You can track the statistics in real-time. ⏱</li>
<li>Sort the data by states and dates like today, or yesterday. 📆</li>
<li>Even there’s a self-assessment helper for COVID-19. 🩺</li>
<li>Other important things like which helpline number to call in case of emergency. 🆘</li>
<li>Also, I’ve provided the WhatsApp support number too. 💬</li>
</ul>
<p><a target="_blank" href="https://github.com/abdulghanitech/theCoronaApp/raw/master/outputApk/theCoronaApp.apk"><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1653029048306/GbXWCw2iE.png" alt="Apk-button.png" class="image--center mx-auto" /></a></p>
<p>And!!! The best part is I've made it open source. 🌼</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/abdulghanitech/theCoronaApp">https://github.com/abdulghanitech/theCoronaApp</a></div>
]]></content:encoded></item><item><title><![CDATA[A Real-Time Water Tank Level 💧 System with Push Notifications 🔔]]></title><description><![CDATA[So, 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...]]></description><link>https://blog.abdulghani.tech/water-tank-level-system-iot</link><guid isPermaLink="true">https://blog.abdulghani.tech/water-tank-level-system-iot</guid><category><![CDATA[iot]]></category><category><![CDATA[app development]]></category><category><![CDATA[automation]]></category><dc:creator><![CDATA[Abdul Ghani]]></dc:creator><pubDate>Fri, 10 Apr 2020 06:36:36 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/zjCc0l9l1cI/upload/v1653028571776/ae7eD2hB7.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>So, 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 turn the motor on when it’s necessary.😅</p>
<p>Solution 💡: Built an IoT solution that uses a NodeMcu and an Ultra Sonic sensor which measures the level of water in the tank. It sends data to my hosted server which in turn sends data to a mobile app. Using this app we can see the level of the tank, percentage, liters of water in real-time. We, also get notifications on mobile when the water is low or it’s full.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://youtu.be/ZswAx93W86I">https://youtu.be/ZswAx93W86I</a></div>
<p>It’s a tiny thing, but made an impact on using IoT stuff. Gonna make it more robust now.</p>
]]></content:encoded></item><item><title><![CDATA[How I automated subscribing to 1000+ YouTube channels using JavaScript]]></title><description><![CDATA[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. 🤷‍♂️
Init...]]></description><link>https://blog.abdulghani.tech/youtube-auto-subscriber-automation</link><guid isPermaLink="true">https://blog.abdulghani.tech/youtube-auto-subscriber-automation</guid><category><![CDATA[JavaScript]]></category><category><![CDATA[automation]]></category><dc:creator><![CDATA[Abdul Ghani]]></dc:creator><pubDate>Thu, 13 Feb 2020 05:36:36 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/uDTzfsGJihw/upload/v1653024527987/GQl1CIY12.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>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. 🤷‍♂️</p>
<p>Initially, I started by manually clicking the subscribe button for every channel that was there in my old account. It was time-consuming and a boring task.</p>
<p>And then I got the idea to use my JavaScript skills to automate this task. So, I quickly wrote a small script (it took me less than an hour) to automate this task. 😁</p>
<h3 id="heading-heres-how-it-looks-in-action">Here’s how it looks in action ⚡️</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1653024786804/NmrdJA_td.gif" alt="youtube-auto-subscriber.gif" class="image--center mx-auto" /></p>
<h3 id="heading-the-javascript">The JavaScript ✨</h3>
<pre><code>const allChannelsBox <span class="hljs-operator">=</span> document.querySelectorAll(<span class="hljs-string">"#channel"</span>);
let totalUnsubscribedChannels <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
let count <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
let sleep <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
<span class="hljs-comment">//for counting totalUnsubscribedChannels</span>
allChannelsBox.forEach(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">channel, index</span>) </span>{
    <span class="hljs-keyword">if</span> (channel.children[<span class="hljs-number">1</span>].innerText <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"SUBSCRIBE"</span>) {
        totalUnsubscribedChannels<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
    }
});
<span class="hljs-comment">//for clicking all unsubscribed Channels</span>
allChannelsBox.forEach(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">channel, index</span>) </span>{
    <span class="hljs-keyword">if</span> (channel.children[<span class="hljs-number">1</span>].innerText <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"SUBSCRIBE"</span>) {
        setTimeout(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
            count<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
            console.log(
                <span class="hljs-string">"Current Channel -&gt;"</span> <span class="hljs-operator">+</span>
                    channel.children[<span class="hljs-number">0</span>].children[<span class="hljs-string">"title"</span>].innerText
            );
            channel.children[<span class="hljs-number">1</span>].children[<span class="hljs-number">0</span>].children[<span class="hljs-number">0</span>].click();
            console.log(
                <span class="hljs-string">"Subscribed! 😎"</span> <span class="hljs-operator">+</span>
                    count <span class="hljs-operator">+</span>
                    <span class="hljs-string">"out of"</span> <span class="hljs-operator">+</span>
                    totalUnsubscribedChannels <span class="hljs-operator">+</span>
                    <span class="hljs-string">"channels"</span>
            );
        }, sleep);
        sleep <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-number">30000</span>;
    }
});
</code></pre><p>That’s it. I know this is a very small thing. But to me applying my knowledge to solve problems is something I really love. I totally enjoyed the coding part.❤️</p>
<p>Here’s the <a target="_blank" href="https://github.com/abdulghanitech/YoutubeChannelSubscriber">GitHub link</a> to it. Please feel free to fork or raise a pull request. Any contribution or suggestions are welcome.😊</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://github.com/abdulghanitech/YoutubeChannelSubscriber">https://github.com/abdulghanitech/YoutubeChannelSubscriber</a></div>
]]></content:encoded></item></channel></rss>