<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Tushar Gugnani</title>
    <description>The latest articles on Forem by Tushar Gugnani (@tushargugnani).</description>
    <link>https://forem.com/tushargugnani</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F203743%2F6f789b68-467e-43c5-b962-b3fbf5124cb7.png</url>
      <title>Forem: Tushar Gugnani</title>
      <link>https://forem.com/tushargugnani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tushargugnani"/>
    <language>en</language>
    <item>
      <title>The Ultimate Black Friday 2025 Deals for Developers</title>
      <dc:creator>Tushar Gugnani</dc:creator>
      <pubDate>Mon, 13 Oct 2025 16:29:43 +0000</pubDate>
      <link>https://forem.com/tushargugnani/the-ultimate-black-friday-2025-deals-for-developers-4k4c</link>
      <guid>https://forem.com/tushargugnani/the-ultimate-black-friday-2025-deals-for-developers-4k4c</guid>
      <description>&lt;p&gt;🖥️ The Ultimate Black Friday 2025 Deals for Developers: Score Big Savings on Tools, Hardware, and Learning Resources&lt;/p&gt;

&lt;p&gt;Black Friday 2025 is approaching fast — and if you're a &lt;strong&gt;developer, designer, or tech enthusiast&lt;/strong&gt;, this is your golden opportunity to upgrade your toolkit without breaking the bank. From cutting-edge development tools to powerful hardware, this year's deals are shaping up to be exceptional.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 Why Black Friday 2025 Matters for Developers
&lt;/h2&gt;

&lt;p&gt;This year’s &lt;strong&gt;Black Friday 2025&lt;/strong&gt; aligns perfectly with end-of-year budget planning for many teams. Whether you’re a freelancer investing in your skills or a team lead optimizing infrastructure, you can expect &lt;strong&gt;50–70% off&lt;/strong&gt; on some of the best tools, platforms, and resources you already use daily.&lt;/p&gt;




&lt;h2&gt;
  
  
  💻 Essential Categories to Watch This Black Friday 2025
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Programming &amp;amp; Development Tools&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  🧱 Laravel Ecosystem
&lt;/h4&gt;

&lt;p&gt;If you build with PHP’s most popular framework, don’t miss:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://blackfridaydeals.dev/deals/laravel" rel="noopener noreferrer"&gt;Laravel Deals&lt;/a&gt; — discounts on Laracasts, CodeCourse, premium packages, and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ⚛️ JavaScript &amp;amp; Frontend
&lt;/h4&gt;

&lt;p&gt;The JS ecosystem is packed with incredible offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blackfridaydeals.dev/deals/javascript" rel="noopener noreferrer"&gt;Javascript Deals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blackfridaydeals.dev/deals/reactjs" rel="noopener noreferrer"&gt;React.js Deals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blackfridaydeals.dev/deals/nextjs" rel="noopener noreferrer"&gt;Next.js Deals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blackfridaydeals.dev/deals/tailwindcss" rel="noopener noreferrer"&gt;TailwindCSS Themes &amp;amp; Templates&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  🐍 Python &amp;amp; AI Development
&lt;/h4&gt;

&lt;p&gt;With AI dominating 2025, keep an eye on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blackfridaydeals.dev/deals/python" rel="noopener noreferrer"&gt;Python Deals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blackfridaydeals.dev/deals/ai-code-assistants" rel="noopener noreferrer"&gt;AI Code Assistants&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;🎨 Design &amp;amp; Creative Tools&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Designers aren’t left out! You’ll find deep discounts on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blackfridaydeals.dev/deals/figma" rel="noopener noreferrer"&gt;Figma Plugins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blackfridaydeals.dev/deals/framer" rel="noopener noreferrer"&gt;Framer Templates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Design systems, mockup packs, and creative bundles.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;💻 Hardware &amp;amp; Equipment&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Perfect time to upgrade your setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blackfridaydeals.dev/deals/laptops" rel="noopener noreferrer"&gt;Laptop Deals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blackfridaydeals.dev/deals/printers" rel="noopener noreferrer"&gt;Printers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blackfridaydeals.dev/deals/monitor" rel="noopener noreferrer"&gt;External monitors&lt;/a&gt;, mechanical keyboards, and ergonomic gear.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;📚 Learning &amp;amp; Career Development&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Invest in yourself this Black Friday:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Massive 60-70% off &lt;strong&gt;online programming courses&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Huge discounts on &lt;strong&gt;technical books&lt;/strong&gt; and learning bundles.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Must-Have Tools &amp;amp; Services to Watch
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IDE &amp;amp; Code Editors:&lt;/strong&gt; Premium licenses and extensions up to 60% off.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API &amp;amp; Hosting Services:&lt;/strong&gt; &lt;a href="https://blackfridaydeals.dev/deals/hosting" rel="noopener noreferrer"&gt;Hosting Deals&lt;/a&gt; with credits and discounted plans.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Productivity Tools:&lt;/strong&gt; Project management and time tracking apps at record-low prices.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security &amp;amp; DevOps:&lt;/strong&gt; Get enterprise-level tools at indie-friendly rates.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile &amp;amp; Cross-Platform:&lt;/strong&gt; Huge markdowns on Flutter, iOS, and Android tools.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌍 Where to Find the Best Developer Deals
&lt;/h2&gt;

&lt;p&gt;Instead of chasing deals across dozens of sites, start with curated lists built specifically for devs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://blackfridaydeals.dev" rel="noopener noreferrer"&gt;&lt;strong&gt;BlackFridayDeals.dev&lt;/strong&gt;&lt;/a&gt; — Focused entirely on &lt;strong&gt;developer, design, and tech deals&lt;/strong&gt;. Updated daily, sorted by category, and tracks expiry dates.
&lt;/li&gt;
&lt;li&gt;🧠 &lt;a href="https://github.com/trungdq88/Awesome-Black-Friday-Cyber-Monday" rel="noopener noreferrer"&gt;&lt;strong&gt;Awesome Black Friday &amp;amp; Cyber Monday&lt;/strong&gt;&lt;/a&gt; — Massive GitHub list of tech-related deals.
&lt;/li&gt;
&lt;li&gt;🔒 &lt;a href="https://github.com/0x90n/InfoSec-Black-Friday" rel="noopener noreferrer"&gt;&lt;strong&gt;InfoSec Black Friday&lt;/strong&gt;&lt;/a&gt; — Best for cybersecurity tools, training, and resources.
&lt;/li&gt;
&lt;li&gt;💡 &lt;a href="https://realsaasdeals.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Real SaaS Deals&lt;/strong&gt;&lt;/a&gt; — Great for startups and SaaS founders.
&lt;/li&gt;
&lt;li&gt;🎨 &lt;a href="https://indiegoodies.com/blackfriday" rel="noopener noreferrer"&gt;&lt;strong&gt;Indie Goodies&lt;/strong&gt;&lt;/a&gt; — Focuses on indie software and creative tools.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🗓️ Black Friday 2025 Timeline
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Date&lt;/th&gt;
&lt;th&gt;Event&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nov 20–24&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pre-Black Friday&lt;/td&gt;
&lt;td&gt;Early bird software &amp;amp; course deals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nov 28 (Friday)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Black Friday&lt;/td&gt;
&lt;td&gt;Hardware, laptops, and accessories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nov 29 (Saturday)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Small Business Saturday&lt;/td&gt;
&lt;td&gt;Indie tools &amp;amp; SaaS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dec 1 (Monday)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cyber Monday&lt;/td&gt;
&lt;td&gt;Software &amp;amp; developer platforms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dec 2–5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cyber Week&lt;/td&gt;
&lt;td&gt;Extended offers &amp;amp; final chance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🎉 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Black Friday 2025 is more than just a shopping spree — it’s an investment in your career. Whether you’re upgrading your workflow, improving your setup, or expanding your skills, smart planning can save you hundreds (or thousands) for the year ahead.&lt;/p&gt;

&lt;p&gt;Start your wishlist, set deal alerts, and check &lt;a href="https://blackfridaydeals.dev" rel="noopener noreferrer"&gt;&lt;strong&gt;BlackFridayDeals.dev&lt;/strong&gt;&lt;/a&gt; daily for verified, developer-focused discounts.  &lt;/p&gt;

&lt;p&gt;Your &lt;strong&gt;future self — and your wallet — will thank you.&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Best Black Friday Deals for Developers and Designers 2024</title>
      <dc:creator>Tushar Gugnani</dc:creator>
      <pubDate>Fri, 25 Oct 2024 05:56:49 +0000</pubDate>
      <link>https://forem.com/tushargugnani/best-black-friday-deals-for-developers-and-designers-2024-2mah</link>
      <guid>https://forem.com/tushargugnani/best-black-friday-deals-for-developers-and-designers-2024-2mah</guid>
      <description>&lt;p&gt;As Black Friday 2024 approaches, developers and designers are in for some exciting deals that can save big on tools, frameworks, and software essential for their projects. Whether you are looking to level up your skills, upgrade your workflow, or snag the latest design assets, this year’s Black Friday will not disappoint.&lt;/p&gt;

&lt;p&gt;One of the best ways to keep up with these offers is by using &lt;a href="https://blackfridaydeals.dev" rel="noopener noreferrer"&gt;blackfridaydeals.dev&lt;/a&gt;, a curated platform specifically designed for developers and designers. The site is packed with exclusive discounts on tools like Laravel, NextJS, TailwindCSS, and much more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Must-Have Deals for Developers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Laravel Tools&lt;/strong&gt;&lt;br&gt;
If you're working with Laravel, this Black Friday will have amazing deals on some popular tools. Look out for packages like Beyond Code Full Stack Bundle, which includes essential tools like Tinkerwell and Invoker at a steep discount​&lt;br&gt;
​&lt;br&gt;
. Other offers may include Laravel-focused courses and extensions that help streamline your development process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blackfridaydeals.dev/deals/laravel" rel="noopener noreferrer"&gt;Black Friday 2024 Laravel Deals&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TailwindCSS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Front-end developers will be pleased to know that TailKit, a popular UI component library for TailwindCSS, is offering up to 40% off​&lt;/p&gt;

&lt;p&gt;. This is an excellent chance to get a comprehensive kit that makes building responsive, sleek designs a breeze.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blackfridaydeals.dev/deals/tailwindcss" rel="noopener noreferrer"&gt;Black Friday 2024 TailwindCSS Deals&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NextJS &amp;amp; React&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modern web frameworks like NextJS and React are also part of the Black Friday bonanza. From in-depth courses to premium templates, you can save on products that help speed up your full-stack development​&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blackfridaydeals.dev/deals/nextjs" rel="noopener noreferrer"&gt;Black Friday 2024 NextJS Deals&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ruby on Rails&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rails developers can also find deals on e-books, tools, and resources to refine their skills and optimize their applications. Keep an eye out for discounts on resources designed to enhance Rails performance​&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blackfridaydeals.dev/deals/ruby-on-rails" rel="noopener noreferrer"&gt;Black Friday 2024 Ruby on Rails Deals&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools for Designers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Designers aren’t left out, either. Black Friday 2024 brings discounts on a wide range of tools that enhance creativity:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Figma Assets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re a Figma user, you’ll find discounts on UI kits and design systems, making it a great time to expand your toolkit. Deals on platforms like Figma are essential for collaborative design teams​&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blackfridaydeals.dev/deals/figma" rel="noopener noreferrer"&gt;Black Friday 2024 Figma Deals. &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mac Apps for Creators&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For Mac users, expect deals on apps specifically geared toward creators, from design software to productivity boosters. Mac-specific bundles can give you access to essential tools at a fraction of the price​&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI-Powered Design Tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI-powered design tools are trending, and Black Friday 2024 will likely feature discounts on tools like AI-assisted design software and SaaS platforms that help automate tedious tasks​&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More Deals on SaaS and Developer Tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apart from framework-specific deals, SaaS tools that are key for project management, cloud hosting, and collaboration will also see substantial price cuts. Whether it’s software for managing databases, hosting services, or tools like Docker and Git, blackfridaydeals.dev offers a one-stop shop to find and compare these deals​&lt;/p&gt;

&lt;p&gt;How to Maximize Your Savings&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bookmark Deals Early&lt;/strong&gt;: Some deals will launch before Black Friday, so it’s wise to keep an eye on sites like blackfridaydeals.dev to stay ahead of the crowd.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bundle Discounts&lt;/strong&gt;: Many products offer bundle deals, especially in areas like design assets and development toolkits, where you can save more by purchasing a package deal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set a Budget&lt;/strong&gt;: While the deals are tempting, it’s important to prioritize and only buy tools that will add value to your workflow.&lt;br&gt;
For the latest updates and to make sure you don’t miss out, check out blackfridaydeals.dev, where you can find up-to-the-minute information on all the best Black Friday deals for developers and designers.&lt;/p&gt;

</description>
      <category>blackfriday</category>
      <category>deals</category>
      <category>webdev</category>
    </item>
    <item>
      <title>8 Free Illustration Resources for Developers and Designers</title>
      <dc:creator>Tushar Gugnani</dc:creator>
      <pubDate>Sat, 16 Mar 2024 07:43:52 +0000</pubDate>
      <link>https://forem.com/tushargugnani/8-free-illustration-resources-for-developers-and-designers-2k19</link>
      <guid>https://forem.com/tushargugnani/8-free-illustration-resources-for-developers-and-designers-2k19</guid>
      <description>&lt;p&gt;🎨 Excited to share some top illustration resources for developers and designers! 🧵&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8qra5fryg7yrvak8cst.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp8qra5fryg7yrvak8cst.png" alt="Best Open Source Free Illustrations" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First up, unDraw. Perfect for adding that creative touch to your projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://undraw.co"&gt;https://undraw.co&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🖌️ Next, check out StorySet. Their customisable unique style can really make your designs stand out.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://storyset.com"&gt;https://storyset.com&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;🌈 For a splash of color, Ultima offers vibrant illustrations that can brighten any design. &lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;a href="https://ultima.storytale.io/"&gt;https://ultima.storytale.io/&lt;/a&gt;
&lt;/h2&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;✍️ If you're looking for hand-drawn charm, Illustrations by OpenPeeps has got you covered. &lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;a href="https://www.openpeeps.com/"&gt;https://openpeeps.com/&lt;/a&gt;
&lt;/h2&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;📚 For those who appreciate a classic touch, Scale  provides timeless illustrations.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;a href="https://scale.flexiple.com/illustrations/single/"&gt;https://scale.flexiple.com/illustrations/single/&lt;/a&gt;
&lt;/h2&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🖥️ &lt;a href="https://itg.digital"&gt;https://itg.digital&lt;/a&gt; offers custom builder, you can build your custom stories within minute.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;a href="https://itg.digital"&gt;https://itg.digital&lt;/a&gt;
&lt;/h2&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🎨 For a wide variety of styles, Delesign is a must-visit.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;a href="https://delesign.com/free-designs/graphics/"&gt;Delesign&lt;/a&gt;
&lt;/h2&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🌟 Last but not least, &lt;a href="http://Illustrations.co"&gt;http://Illustrations.co&lt;/a&gt; is great for finding unique and creative illustrations.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;a href="http://Illustrations.co"&gt;http://Illustrations.co&lt;/a&gt;
&lt;/h2&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are looking for more illustration resources? Head over to &lt;a href="https://thehome.dev/resources/design-illustrations"&gt;TheHome&lt;/a&gt; to explore a curated list of tools, courses, and more for developers and designers.&lt;/p&gt;

</description>
      <category>illustrations</category>
      <category>webdev</category>
      <category>design</category>
      <category>resources</category>
    </item>
    <item>
      <title>2022 Best Black Friday deals for Developers</title>
      <dc:creator>Tushar Gugnani</dc:creator>
      <pubDate>Tue, 08 Nov 2022 17:48:49 +0000</pubDate>
      <link>https://forem.com/tushargugnani/2022-best-black-friday-deals-for-developers-3eci</link>
      <guid>https://forem.com/tushargugnani/2022-best-black-friday-deals-for-developers-3eci</guid>
      <description>&lt;p&gt;🎉 It's that time of the year again, where you get a one time chance to get huge discounts on the products you always wanted to buy but always kept putting it on hold looking at the price.&lt;/p&gt;

&lt;p&gt;👨‍💻 I am compiling a comprehensive list of deals of product and services which are useful for developers and designers. The deals are divided into different categories that include hosting deals, Theme deals, CSS deals, JavaScript deals, Laravel deals etc.&lt;/p&gt;

&lt;p&gt;🗓 Black Friday is on the last Friday of November month, This year that date is &lt;strong&gt;25th of November 2022&lt;/strong&gt;. Usually the Black Friday sale starts a few days prior to the Black Friday day and keeps going on till the next week which also includes the day of Cyber Monday. &lt;/p&gt;

&lt;p&gt;👀 You can find all the deals on this page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://5balloons.info/black-friday-2022"&gt;🔥 2022 Best Black Friday Deals for Developers 🔥&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;😲 Expect discounts ranging from &lt;strong&gt;30% to 80%&lt;/strong&gt; on the products listed.&lt;/p&gt;

&lt;p&gt;📌 You can bookmark this page, as I will keep adding the deals as and when they are announced, and will keep adding more product.&lt;/p&gt;

&lt;p&gt;➕ If you are an Indie Maker who is looking to add your product / service under this page, you can email me or simply put the details of your discounts in the comments section of the page.&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>How I gathered the confidence to publish my first Udemy course</title>
      <dc:creator>Tushar Gugnani</dc:creator>
      <pubDate>Fri, 21 Aug 2020 09:59:59 +0000</pubDate>
      <link>https://forem.com/tushargugnani/how-i-gathered-the-confidence-to-publish-my-first-udemy-course-gcg</link>
      <guid>https://forem.com/tushargugnani/how-i-gathered-the-confidence-to-publish-my-first-udemy-course-gcg</guid>
      <description>&lt;p&gt;Before I dive into the details of the topic of this article. I would like to introduce myself. I am a Full Stack Freelance Developer and mostly a self-learner and an introvert.&lt;/p&gt;

&lt;p&gt;I have worked around my way in the web-world by self-learning and implementing knowledge over the last 10 years and been able to contribute to organizations and open source projects. &lt;/p&gt;

&lt;p&gt;I have been blogging for about the last 4 years and the main purpose of writing blogs is to document the learning and solutions because I tend to forget details after a while. Here is the blog link &lt;a href="https://www.5balloons.info"&gt;5balloons.info&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Being a developer I am used to watching Youtube tutorials and Udemy courses. But one thing was always certain in my mind was &lt;strong&gt;I could never record an online tutorial&lt;/strong&gt; since I don't possess the qualities of fluent speaking and coding at the same time. And thus I never even bothered about recording / Screen Casting anything.&lt;/p&gt;

&lt;p&gt;Alright, so here is how things changed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Speaking at Local Laravel Meetup
&lt;/h3&gt;

&lt;p&gt;During the start of 2019, A new Community got formed in the City I live for Laravel Developers (&lt;a href="https://twitter.com/LaravelNagpur"&gt;LaravelNagpur&lt;/a&gt;) and although I haven't done any public speaking apart from College presentations I grabbed the opportunity of speaking at one of the monthly meetups.&lt;/p&gt;

&lt;p&gt;I chose the topic that I was most comfortable with i.e. &lt;a href="https://laravel.com/docs/7.x/dusk"&gt;Laravel Dusk&lt;/a&gt;, just because I  extensively used it a lot and also wrote some blogs on it.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
    &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__two-pics"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8rOd2Pru--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/D9Po_CkU8AAgd5W.jpg" alt="unknown tweet media content"&gt;
    &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--g6Z_VLlZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1203578445722030080/z3vKMHCT_normal.jpg" alt="Tushar Gugnani profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Tushar Gugnani
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/tushargugnani"&gt;@tushargugnani&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Gave a talk this weekend on "Introduction to Laravel Dusk" and talked about how dusk can be used for automation testing, scraping and creating bots. &lt;a href="https://twitter.com/hashtag/LaravelNagpur"&gt;&lt;/a&gt;&lt;a href="https://twitter.com/hashtag/Laravel"&gt;#Laravel&lt;/a&gt;Nagpur &lt;a href="https://twitter.com/hashtag/Laravel"&gt;#Laravel&lt;/a&gt;  Thank you &lt;a href="https://twitter.com/ranium"&gt;@ranium&lt;/a&gt; for hosting the event. &lt;a href="https://twitter.com/LaravelNagpur"&gt;@LaravelNagpur&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      06:49 AM - 17 Jun 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1140511688916996096" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1140511688916996096" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      4
      &lt;a href="https://twitter.com/intent/like?tweet_id=1140511688916996096" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      8
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;Even though meetups have usually small crowds, I was nervous speaking and coding at the same time at length for about 2 hours.&lt;/p&gt;

&lt;p&gt;Somehow I managed it and this gave me the confidence of speaking about technical topics in public. &lt;/p&gt;

&lt;h3&gt;
  
  
  Speaking at the Meetup Again
&lt;/h3&gt;

&lt;p&gt;With the confidence gained from the last meetup session, I decided to give another shot at speaking and delivered a session on Getting started with TDD in Laravel&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
    &lt;div class="ltag__twitter-tweet__media ltag__twitter-tweet__media__two-pics"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RN42-5Oa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/ECy0uKyUYAA4iVr.jpg" alt="unknown tweet media content"&gt;
    &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--5ZGLZu4u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1232957983841120256/Acor7lVH_normal.jpg" alt="Laravel Nagpur profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Laravel Nagpur
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @laravelnagpur
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      .&lt;a href="https://twitter.com/TusharGugnani"&gt;@TusharGugnani&lt;/a&gt; presenting his talk on TDD at Laravel Nagpur meetup. &lt;br&gt;&lt;br&gt;TDD is something that most developers talk about but for one or the other reason it gets neglected when delivering on shorter timeline. This has to change!&lt;br&gt;&lt;br&gt;&lt;a href="https://twitter.com/laravelphp"&gt;@laravelphp&lt;/a&gt; &lt;a href="https://twitter.com/LaravelLiveIN"&gt;@LaravelLiveIN&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      06:04 AM - 25 Aug 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1165505128285126657" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1165505128285126657" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      10
      &lt;a href="https://twitter.com/intent/like?tweet_id=1165505128285126657" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      16
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
 

&lt;p&gt;I realized that like everything else &lt;strong&gt;public speaking on technical knowledge is a skill&lt;/strong&gt; and if you are confident about what you are telling the audience it isn't that tough.&lt;/p&gt;

&lt;h3&gt;
  
  
  Delivering A Training on JavaScript
&lt;/h3&gt;

&lt;p&gt;Soon after that, I came across an opening at an Organisation where they had a requirement of a trainer who would come and give training sessions on JavaScript to their employees. &lt;/p&gt;

&lt;p&gt;With the confidence gained from speaking at meetups, I gave it a shot and got selected for training Job.&lt;/p&gt;

&lt;p&gt;I delivered around 8 training sessions to the employees who were mostly senior to me and that gave a huge morale boost to my speaking skills on the technical knowledge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recording the Lessons
&lt;/h3&gt;

&lt;p&gt;Once the training gig got over I got an idea of doing a Video Course on Laravel Dusk since there wasn't much help available online on this topic. &lt;/p&gt;

&lt;p&gt;I started recording the lessons on my computer with the minimal setup and QuickTime player as the screencast recorder.&lt;/p&gt;

&lt;p&gt;Initial videos would take me anywhere from 5-6 tries to get started and around &lt;strong&gt;1 to 2 hours of time to record a 15-minute video&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With practice, this got improved and I had around 4.5 hours of content ready to be published.&lt;/p&gt;

&lt;h3&gt;
  
  
  Publishing the Course
&lt;/h3&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wtNdJ1rW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/ERR349jU4AIGSDP.jpg" alt="unknown tweet media content"&gt;
      &lt;/div&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--g6Z_VLlZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1203578445722030080/z3vKMHCT_normal.jpg" alt="Tushar Gugnani profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Tushar Gugnani
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/tushargugnani"&gt;@tushargugnani&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4t6ys1m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      I just launched my 1st Udemy course 'Laravel Dusk Beginner to Advanced'.&lt;br&gt;&lt;br&gt;Free giveaway for the initial few students. The course covers Automation Testing, Scraping and Bot Creation using Dusk. &lt;br&gt;If interested DM to get it for free.&lt;br&gt;&lt;br&gt;&lt;a href="https://t.co/Cac9xXuqgL"&gt;udemy.com/course/laravel…&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;a href="https://twitter.com/hashtag/Laravel"&gt;#Laravel&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/Dusk"&gt;#Dusk&lt;/a&gt; &lt;a href="https://twitter.com/hashtag/Udemy"&gt;#Udemy&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      06:26 AM - 21 Feb 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1230740449364566016" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1230740449364566016" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      14
      &lt;a href="https://twitter.com/intent/like?tweet_id=1230740449364566016" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      20
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
 

&lt;p&gt;I launched my course in February and gave it free to the initial few students. &lt;/p&gt;

&lt;p&gt;Although Udemy doesn't provide much monetary value out of the course sale. I chose Udemy to publish the course just because it's popular and provides an easy interface for the user to interact with the course.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Next
&lt;/h3&gt;

&lt;p&gt;I don't have a plan for recording another course as of now. But this journey has given me enough confidence to speak and screencast about my knowledge in the web development.&lt;/p&gt;

&lt;p&gt;I have started recording some screencasts for tutorials and personal documentation on Youtube &lt;a href="https://www.youtube.com/channel/UCF9DxqXen5oMQCr3fHJWaVA/"&gt;5Balloons Youtube&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  So What's the Big Deal
&lt;/h3&gt;

&lt;p&gt;I wrote out this journey in an article as a reminder to myself that I was able to do something which I never thought I could.&lt;/p&gt;

&lt;p&gt;Secondly, the importance of taking the first step. If you have a local meetup or conference in your city where you could go and deliver a talk; &lt;strong&gt;DO IT&lt;/strong&gt;,  no matter how short it is or how easy the topic is.&lt;/p&gt;

&lt;p&gt;You will learn much more about the topic you are speaking on and also may open new doors for you. &lt;/p&gt;

&lt;p&gt;Let me know in the &lt;strong&gt;comments&lt;/strong&gt; if speaking at meetups was beneficial for you and how?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devlive</category>
      <category>watercooler</category>
      <category>laravel</category>
    </item>
    <item>
      <title>How I Improved my Wordpress Blog to Load SuperFast.</title>
      <dc:creator>Tushar Gugnani</dc:creator>
      <pubDate>Sun, 19 Jul 2020 07:25:18 +0000</pubDate>
      <link>https://forem.com/tushargugnani/how-i-improved-my-wordpress-blog-to-load-superfast-11km</link>
      <guid>https://forem.com/tushargugnani/how-i-improved-my-wordpress-blog-to-load-superfast-11km</guid>
      <description>&lt;p&gt;I have a personal blog where I document my learnings on various web technologies. &lt;/p&gt;

&lt;p&gt;I have been blogging since last 4 years and I recently optimised the blog to load way faster than it did before.&lt;/p&gt;

&lt;p&gt;My Blog was getting getting the PageSpeed score on Google PageSpeed of Around 35 for Mobile and 50 for Desktop. That's pretty bad in terms of user experience and also for SEO in general.&lt;/p&gt;

&lt;p&gt;With some tips and tricks to improve the page speed, the website get's the PageSpeed score more than &lt;strong&gt;90&lt;/strong&gt; for desktop.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Screenshot of Google PageSpeed Score&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fklojwchzvsx1fenhevhx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fklojwchzvsx1fenhevhx.png" alt="Image description" width="300" height="243"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Screenshot of GTMetrix Report&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjqq0s1c47gypiffotytj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjqq0s1c47gypiffotytj.png" alt="Image description" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although there are tons of article on the web on improving the page load times, Many of them are too generalised and doesn't offer practical solutions. &lt;/p&gt;

&lt;p&gt;In this article I am sharing few steps that I took to improve the website page speed. &lt;/p&gt;

&lt;h2&gt;
  
  
  1. Combine and Minify Multiple CSS and JS Files
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem :&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I use different CSS and JS plugins in my blog that includes &lt;em&gt;Bootstrap&lt;/em&gt;, &lt;em&gt;Font-Awesome&lt;/em&gt;, &lt;em&gt;PrismJS&lt;/em&gt;, &lt;em&gt;Modernizr&lt;/em&gt;, &lt;em&gt;AppearJS&lt;/em&gt;, &lt;em&gt;EasingJS&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Previously, There used to be a separate call to the server for each of the Asset and some of the CSS and JS files were not minified.&lt;/p&gt;

&lt;p&gt;I tried different plugins to Minify and Combine the CSS and JS but none of them worked exactly how I wanted it to work and instead the plugins added the overhead on page load speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Solution :&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since I used to Laravel way of doing things. I figured out that &lt;strong&gt;Laravel Mix&lt;/strong&gt; (A wrapper library for WebPack) could work perfectly for my use-case.&lt;/p&gt;

&lt;p&gt;I installed Laravel Mix and Combined and Minified the CSS and JS using it's easy to use API.&lt;/p&gt;

&lt;p&gt;This is the simple code to combine and minify all CSS and JS inside &lt;code&gt;webpack.mix.js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;mix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing/framework/googlefonts/lora.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing-child/assets/framework/bootstrap-4/css/bootstrap.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing/pluginstyle.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing/style.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing-child/style.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing-child/assets/css/prism.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing-child/assets/css/jquery.mCustomScrollbar.min.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing-child/assets/css/fontawesome-5.min.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing/css/all.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


&lt;span class="nx"&gt;mix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;scripts&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing/js/modernizr.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing/js/lazysizes.min.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing-child/assets/framework/bootstrap-4/js/bootstrap.min.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing/js/conditionaljs/appear.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing/js/conditionaljs/easing.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing/js/conditionaljs/basic_script.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing-child/assets/js/prism.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing-child/assets/js/jquery.mCustomScrollbar.concat.min.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing/assets/js/custom-child.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;writing/js/all.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code compresses and joins all CSS and JS into a single file named &lt;code&gt;all.css&lt;/code&gt; and &lt;code&gt;all.js&lt;/code&gt; for javascript.&lt;/p&gt;

&lt;p&gt;Inside the functions.php of Wordpress Theme, Wherein all the scripts and stylesheets gets enqueued. I now have a two entries one for my CSS and one JS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nf"&gt;wp_enqueue_style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'all'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;get_template_directory_uri&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'/css/all.css'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nf"&gt;wp_enqueue_script&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'all'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;get_template_directory_uri&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'/js/all.js'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Sweet&lt;/strong&gt;, &lt;em&gt;Isn't It&lt;/em&gt;?&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Removed Unwanted CSS &amp;amp; JS
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem :&lt;/em&gt;&lt;/strong&gt; Shipping unused JavaScript or CSS is a common problem in web development. Paid Themes in Wordpress Includes CSS and JS for each and every customer and customisation possible.&lt;/p&gt;

&lt;p&gt;The theme I was using was having tons of lines of CSS and JS for the Sidebar's, Widgets and Components which I was never going to use in my Blog.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Solution:&lt;/em&gt;&lt;/strong&gt; Unfortunately there is no easy solution for this. I spend some hours looking at the CSS and JS Files and manually removing the code which I knew my blog is never going to utilise.&lt;/p&gt;

&lt;p&gt;One Tool that I found useful is &lt;a href="https://uncss-online.com/" rel="noopener noreferrer"&gt;UnCSS-Online&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This tool is simple, copy and paste your page's HTML source code and along with that paste the CSS which you want to purify.&lt;/p&gt;

&lt;p&gt;This online tool will detect and let you know what part of CSS is being unused, so that you know if it's safe to remove it.&lt;/p&gt;

&lt;p&gt;Another Tool that I used is a built-in Tool in Google Chrome Browser to check the &lt;a href="https://developers.google.com/web/tools/chrome-devtools/coverage" rel="noopener noreferrer"&gt;Code Coverage&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here are the steps to check your Code Coverage. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your website in Google Chrome.&lt;/li&gt;
&lt;li&gt;Open Developers Tool and Navigate to Sources Tab.&lt;/li&gt;
&lt;li&gt;Click on the Coverage Link on the Footer Panel.&lt;/li&gt;
&lt;li&gt;It will ask to reload the page to start capturing the code coverage.&lt;/li&gt;
&lt;li&gt;Reload the page and you can now see Total Bytes and Used Bytes for all of the CSS and JS files on your page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9t6saxdubxkcqibnpygo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9t6saxdubxkcqibnpygo.png" alt="Alt Text" width="800" height="196"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Uninstalled Unwanted Plugins
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem :&lt;/em&gt;&lt;/strong&gt; All activated Plugins on your Wordpress site contribute to page load times. If you have variety of plugins this is going to cause problems to your PageSpeed. &lt;/p&gt;

&lt;p&gt;The problem with Plugins and Themes for me is that they cater to variety of requirements since they have variety of requirements from their Customers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;When you install a Popular Wordpress Plugin, with it you also install the Code on your website which is a customisation need for other customers and not yours.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Solution :&lt;/em&gt;&lt;/strong&gt; I analysed each of my installed plugins and checked if I really need it and if yes can there be a simpler solution for it that can be done with few lines of Code myself.&lt;/p&gt;

&lt;p&gt;For example : I used a Paid plugin named WP-Rocket (In the hope to speedup the website), Since I did not got the desired results from it. I uninstalled it and wrote a custom code to combine and minify my CSS and JS (Described in Step 1)&lt;/p&gt;

&lt;p&gt;Similarly I used a plugin to Lazy Load the images, instead I included a jQuery library &lt;a href="https://appelsiini.net/projects/lazyload/" rel="noopener noreferrer"&gt;Lazy Load Remastered&lt;/a&gt; to do its job. (Described in Step 5)&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Moved to a Better Host
&lt;/h2&gt;

&lt;p&gt;One of the important factors in improving page load times to is to reduce the &lt;em&gt;Initial Server Response Time&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Initial Server Response Time is Time to First Byte, the time that it takes for a user's browser to receive the first byte of page content.&lt;/p&gt;

&lt;p&gt;Although It depends on a lot of factors and that includes &lt;em&gt;Plugins&lt;/em&gt;, &lt;em&gt;Themes&lt;/em&gt;, &lt;em&gt;Database Size&lt;/em&gt;, &lt;em&gt;Server Specification&lt;/em&gt; etc. &lt;/p&gt;

&lt;p&gt;Improving the response time also depends on the Web Host you choose. My website was hosted on Bluehost and then I shifted to &lt;a href="//siteground.com/index.htm?afcode=8da90033f9c44513ee508964d99222fa"&gt;SiteGround&lt;/a&gt;, With the exact same configuration I found &lt;a href="//siteground.com/index.htm?afcode=8da90033f9c44513ee508964d99222fa"&gt;SiteGround&lt;/a&gt; providing me better response times to the website.&lt;/p&gt;

&lt;p&gt;It takes anywhere from around &lt;strong&gt;150ms to 500ms&lt;/strong&gt; for blank Wordpress System to FireUp, and Google PageSpeed considers anything less than &lt;strong&gt;600ms&lt;/strong&gt; a good server response time. (Refer &lt;a href="https://web.dev/time-to-first-byte" rel="noopener noreferrer"&gt;https://web.dev/time-to-first-byte&lt;/a&gt; ) &lt;/p&gt;

&lt;p&gt;That means that we have a really short window to time to load up Themes and Plugins after Firing up of Wordpress to get into the Green section of Google PageSpeed.&lt;/p&gt;

&lt;p&gt;&lt;a href="//siteground.com/index.htm?afcode=8da90033f9c44513ee508964d99222fa"&gt;SiteGround&lt;/a&gt; does a good job of reducing the initial server response time. &lt;/p&gt;

&lt;p&gt;Here are the screenshot from a fresh website that I hosted on SiteGround that has blank database and uses default theme.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flu2dfsmqssrlqmiqxet1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flu2dfsmqssrlqmiqxet1.png" alt="Alt Text" width="404" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6bwis8hajhskbh0kropq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6bwis8hajhskbh0kropq.png" alt="Alt Text" width="730" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are new to Blogging and Hosting, Here is an in-depth article I wrote to help you get started.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.5balloons.info/beginners-guide-on-starting-your-first-wordpress-blog/" rel="noopener noreferrer"&gt;Beginners Guide to Start Blogging with Wordpress&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Enhanced Theme to Load Faster
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem :&lt;/em&gt;&lt;/strong&gt; I used a paid theme for my Blog and although it served the purpose of Look and Feel. It was bloated with lot of customisation code.&lt;/p&gt;

&lt;p&gt;There was code for Instagram, Pinterest Widget, Code for Collapsable Sidebar, Code for Sidebar Widgets and tons of other things which I don't require&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Solution :&lt;/em&gt;&lt;/strong&gt; Again, there is no easy solution for this. &lt;/p&gt;

&lt;p&gt;I opened the &lt;code&gt;functions.php&lt;/code&gt; file and removed each and every customisation code that I don't require and won't need in the future.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;em&gt;This hampers the ability to update the future releases of the Theme since I directly made the changes in core files. But this is the trade-off I made for better speed and minimal code to maintain.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Removed Wordpress Comments Section
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem :&lt;/em&gt;&lt;/strong&gt; Few of my Posts have around 80 comments on the post. Which is great, but this really slows up the page to fetch Gravatar images, getting comments from the database and also it bloats up the Html DOM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Solution :&lt;/em&gt;&lt;/strong&gt; I am replaced default wordpress comment system in favour of &lt;a href="https://disqus.com/" rel="noopener noreferrer"&gt;Disqus&lt;/a&gt;. Comment migration to Disqus is simple and I have also have installed a plugin to conditionally load the Disqus comments. &lt;/p&gt;

&lt;p&gt;That means if the user really wants to read the comment or add a new comment he can choose to load up the comment section by clicking on a button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1iqy7ls1sa4cgcn48j1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1iqy7ls1sa4cgcn48j1c.png" alt="Alt Text" width="767" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Cleaned Database Tables
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem :&lt;/em&gt;&lt;/strong&gt; I currently have 300 blog posts in my database. Each one of those had some kind of revisions in the database which I was of no use to me. &lt;/p&gt;

&lt;p&gt;Also when you uninstall a plugin, Most of the times it leaves some residue data in the database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Solution :&lt;/em&gt;&lt;/strong&gt; It's great idea to frequently clean up the database.&lt;/p&gt;

&lt;p&gt;There are variety of free plugins that you can install to perform the database cleanup for Free. Once the job is done I removed that plugin as well.  &lt;/p&gt;

&lt;h2&gt;
  
  
  8. Added Asset Cache Policy
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem :&lt;/em&gt;&lt;/strong&gt; Browser doesn't cache the static Assets for longer period if you don't specify the Cache policy. &lt;/p&gt;

&lt;p&gt;That results in refetching the content from the server and leads up to slower website.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Solution :&lt;/em&gt;&lt;/strong&gt; By Specifying the Cache Policy for Static Assets (CSS, JS, Images etc.) you tell the Browser to cache the files for Specific number of days. Browsers will then cache these files on the user’s computer.&lt;/p&gt;

&lt;p&gt;I added cache policy for my Static assets in .htaccess file by utilising the mod_expires module.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;IfModule&lt;/span&gt; &lt;span class="err"&gt;mod_expires.c&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType image/svg "access 1 year"
ExpiresByType image/webp "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType application/javascript "access 1 month"
ExpiresByType application/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 2 days"
&lt;span class="nt"&gt;&amp;lt;/IfModule&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. Reduce Image Size &amp;amp; Lazy Load Images
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem :&lt;/em&gt;&lt;/strong&gt; Too many images of high file size were effecting the page speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Solution :&lt;/em&gt;&lt;/strong&gt; I converted most of my pages images that appear frequently (Logo, Footer Author Image, etc.) to &lt;code&gt;webp&lt;/code&gt; format. webp is desired format for the browser these days and it compresses the image.&lt;/p&gt;

&lt;p&gt;Also I utilised the &lt;a href="https://github.com/tuupola/lazyload" rel="noopener noreferrer"&gt;Lazyload&lt;/a&gt; plugin to load the images only when user scrolls to that position. &lt;/p&gt;

&lt;p&gt;It works absolutely great since in the first user request there are no images to be load and once user starts reading the article the images gets loaded in the background.&lt;/p&gt;

&lt;p&gt;Here is the custom function written to utilise this plugin in Wordpress.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;five_balloons_filter_lazyload_images&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'ratio'&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;is_feed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;intval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;get_query_var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'print'&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;intval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;get_query_var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'printpage'&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;strpos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$_SERVER&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'HTTP_USER_AGENT'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s1"&gt;'Opera Mini'&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nv"&gt;$respReplace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'data-sizes="auto" data-srcset='&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nv"&gt;$matches&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$skip_images_regex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'/class=".*lazyload.*"/'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;$placeholder_image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;apply_filters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'lazysizes_placeholder_image'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;preg_match_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'/&amp;lt;img\s+.*?&amp;gt;/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$matches&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nv"&gt;$search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$replace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$matches&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$imgHTML&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="c1"&gt;// Don't to the replacement if a skip class is provided and the image has the class.&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$skip_images_regex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$imgHTML&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="nv"&gt;$replaceHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;preg_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'/&amp;lt;img(.*?)src=/i'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="s1"&gt;'&amp;lt;img$1src="'&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$placeholder_image&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'" data-src='&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$imgHTML&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="nv"&gt;$replaceHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;preg_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'/srcset=/i'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$respReplace&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replaceHTML&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
                            &lt;span class="nv"&gt;$newClass&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'lazyload '&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

                            &lt;span class="nv"&gt;$pattern&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'/class="([^"]*)"/'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                    &lt;span class="c1"&gt;// Class attribute set.&lt;/span&gt;
                    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$pattern&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replaceHTML&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$matches&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="nv"&gt;$definedClasses&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;explode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$matches&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
                        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nb"&gt;in_array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$newClass&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$definedClasses&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                            &lt;span class="nv"&gt;$definedClasses&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$newClass&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                            &lt;span class="nv"&gt;$replaceHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                                &lt;span class="nv"&gt;$matches&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                                &lt;span class="nb"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'class="%s"'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;implode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;' '&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$definedClasses&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt;
                                &lt;span class="nv"&gt;$replaceHTML&lt;/span&gt;
                            &lt;span class="p"&gt;);&lt;/span&gt;
                        &lt;span class="p"&gt;}&lt;/span&gt;
                    &lt;span class="c1"&gt;// Class attribute not set.&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="nv"&gt;$replaceHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;preg_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'/(\&amp;lt;.+\s)/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'$1class="%s" '&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$newClass&lt;/span&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nv"&gt;$replaceHTML&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;


            &lt;span class="nv"&gt;$replaceHTML&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;noscript&amp;gt;'&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$imgHTML&lt;/span&gt; &lt;span class="mf"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;/noscript&amp;gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="nb"&gt;array_push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$search&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$imgHTML&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="nb"&gt;array_push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$replace&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replaceHTML&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nv"&gt;$content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$search&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$replace&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$content&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;add_filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'the_content'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'five_balloons_filter_lazyload_images'&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  10. Defer Loading of Javascript
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem :&lt;/em&gt;&lt;/strong&gt; By default JavaScript blocks DOM construction and thus delays the time to first render. This adds to the page load time until the javascript is executed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Solution:&lt;/em&gt;&lt;/strong&gt; If the javascript that you are working with isn't critical to load before other DOM elements, &lt;/p&gt;

&lt;p&gt;The loading and execution of javascript may be deferred until after the initial render or other critical parts of the page have finished loading. &lt;/p&gt;

&lt;p&gt;Doing so can help reduce resource contention and improve performance.&lt;/p&gt;

&lt;p&gt;To prevent JavaScript from blocking the parser it's recommend to use the HTML &lt;code&gt;async&lt;/code&gt; or &lt;code&gt;defer&lt;/code&gt; attribute on external scripts. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;my.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the WordPress function I wrote to achieve the same.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cd"&gt;/** Defer parsing of javascript */&lt;/span&gt;
&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;defer_parsing_of_js&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$url&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;is_user_logged_in&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//don't break WP Admin&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kc"&gt;FALSE&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nb"&gt;strpos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.js'&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;strpos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'jquery-'&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;' src'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;' defer src'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$url&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;add_filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'script_loader_tag'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'defer_parsing_of_js'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this function I add defer to all the script tag except &lt;code&gt;jQuery&lt;/code&gt; which is required for my pages to render correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Removed Unwanted External Scripts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Problem :&lt;/em&gt;&lt;/strong&gt; Once I analysed the scripts being loaded in the Network tabs of Developer console. I noticed some scripts which are not useful or aren't relevant for my use-case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Solution :&lt;/em&gt;&lt;/strong&gt; I added custom functions in my &lt;code&gt;functions.php&lt;/code&gt; file of Wordpress to remove those scripts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Remove Gutenberg Block Library CSS from loading on the frontend&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;smartwp_remove_wp_block_library_css&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
 &lt;span class="nf"&gt;wp_dequeue_style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wp-block-library&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
 &lt;span class="nf"&gt;wp_dequeue_style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wp-block-library-theme&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
 &lt;span class="nf"&gt;wp_dequeue_style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wc-block-style&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Remove WooCommerce block CSS&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;add_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wp_enqueue_scripts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;smartwp_remove_wp_block_library_css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;


&lt;span class="cm"&gt;/** Remove Contact Form 7 CSS unless required */&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;rjs_lwp_contactform_css_js&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;global&lt;/span&gt; &lt;span class="nx"&gt;$post&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nf"&gt;is_a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;$post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;WP_Post&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;has_shortcode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;$post&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;post_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contact-form-7&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;wp_enqueue_script&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contact-form-7&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
       &lt;span class="nf"&gt;wp_enqueue_style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contact-form-7&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;wp_dequeue_script&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contact-form-7&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nf"&gt;wp_dequeue_style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;contact-form-7&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;add_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wp_enqueue_scripts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rjs_lwp_contactform_css_js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


&lt;span class="cm"&gt;/** remove WP-Embed */&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;my_deregister_scripts&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
  &lt;span class="nf"&gt;wp_deregister_script&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wp-embed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;add_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wp_footer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;my_deregister_scripts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all about the major steps that I performed to improve the PageSpeed score.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next ?
&lt;/h2&gt;

&lt;p&gt;In terms of page loading time my blog is still not where I want it to be. I have planned out creating a custom minimal theme which fits my UseCase to remove all the unwanted php code, and JS and CSS assets. &lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback / Suggestions ?
&lt;/h2&gt;

&lt;p&gt;Let me know if you find these tips useful. Also, did you have any other such tips that you performed to decrease the page load time and get a good score in Google Page Speed Index.&lt;/p&gt;

&lt;p&gt;Please share it in comments.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How I Built a Twitter Auto-Poster Bot using Laravel</title>
      <dc:creator>Tushar Gugnani</dc:creator>
      <pubDate>Fri, 14 Feb 2020 07:23:55 +0000</pubDate>
      <link>https://forem.com/tushargugnani/how-i-built-a-twitter-auto-poster-bot-using-laravel-5895</link>
      <guid>https://forem.com/tushargugnani/how-i-built-a-twitter-auto-poster-bot-using-laravel-5895</guid>
      <description>&lt;p&gt;In this tutorial, I will demonstrate how I created a twitter-bot for auto-posting on Twitter using the powers of Laravel Zero and Laravel Dusk. &lt;/p&gt;

&lt;p&gt;The Bot is very simple it takes the current weather details for a city from the OpenWeatherMap API, forms a nice tweet out of different variables returned by the API and tweets the weather updates it every hour. &lt;/p&gt;

&lt;p&gt;Here is the twitter account:- &lt;/p&gt;

&lt;p&gt;Let's see how I built it, step by step.&lt;/p&gt;

&lt;p&gt;Step 1: Create a new &lt;a href="https://laravel-zero.com/" rel="noopener noreferrer"&gt;Laravel Zero&lt;/a&gt; Project&lt;/p&gt;

&lt;p&gt;Laravel Zero is built out of Laravel and it's a microframework for building console-based applications. Perfect for our requirements.&lt;/p&gt;

&lt;p&gt;First, download the laravel-zero installer if you don't already have it on your machine&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer global require &lt;span class="s2"&gt;"laravel-zero/installer"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you have the installer, you can create a new project using it&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;laravel-zero new twitterBot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2: Install Laravel-Console-Dusk &lt;/p&gt;

&lt;p&gt;The next step is to install the Laravel-Console-Dusk Dependency on the project by running the following command inside the project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php twitterBot app:install console-dusk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F53kbsap5q5y7yh1voltu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F53kbsap5q5y7yh1voltu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3: Create a New Console Command&lt;/p&gt;

&lt;p&gt;Next, we need to generate a new Laravel Zero Console Command, we will be utilizing this Command as an instruction to our Bot to do the job.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php twitterBot make:command postTweet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fw38k7of8bp2135unjbdt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fw38k7of8bp2135unjbdt.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the code that I wrote for getting current weather updates from OpenWeatherMap API and posting it on twitter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?php&lt;/span&gt;

&lt;span class="kn"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;App\Commands&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Carbon\Carbon&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Support\Str&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Illuminate\Console\Scheduling\Schedule&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;LaravelZero\Framework\Commands\Command&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;PostTweet&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Command&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cd"&gt;/**
     * The signature of the command.
     *
     * @var string
     */&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$signature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'post:tweet'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="cd"&gt;/**
     * The description of the command.
     *
     * @var string
     */&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'This commands posts new tweet on Twitter Timeline'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="cd"&gt;/**
     * Execute the console command.
     *
     * @return mixed
     */&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;handle&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$weather_tweet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getTweetText&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;postTweetOnTwitter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$weather_tweet&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;


    &lt;span class="cd"&gt;/**
     * This function gets current weather info and returns string 
     * 
     * @return string
     */&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;getTweetText&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nv"&gt;$client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;\GuzzleHttp\Client&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nv"&gt;$request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://api.openweathermap.org/data/2.5/weather?id=1262180&amp;amp;units=metric&amp;amp;appid=6c743793a5539486877ce02335831dc3'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nv"&gt;$response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;getBody&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;//Weather Data&lt;/span&gt;
        &lt;span class="nv"&gt;$data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;json_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


        &lt;span class="c1"&gt;//Tweet String&lt;/span&gt;
        &lt;span class="nv"&gt;$weather_tweet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Current Temperature "&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;temp&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="s2"&gt;"°С , &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;wind "&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;wind&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;speed&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="s2"&gt;" m/s. clouds "&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;clouds&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;all&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="s2"&gt;" %,&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;at "&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Carbon&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Asia/Kolkata'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;toDateTimeString&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="s2"&gt;" &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;#Nagpur #NagpurWeather "&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$weather_tweet&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="cd"&gt;/** 
     * Post tweet on twitter using Dusk
     * 
     */&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;postTweetOnTwitter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$tweet&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;browse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$browser&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$tweet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="nv"&gt;$browser&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;visit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://twitter.com/login'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;pause&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


            &lt;span class="nv"&gt;$browser&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'session[username_or_email]'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'twitter_username'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'session[password]'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'twitter_password'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;pause&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'div[role="button"]'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;pause&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

                &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$browser&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;element&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#challenge_response'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
                        &lt;span class="nv"&gt;$browser&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#challenge_response'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'challenge_response'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                                &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#email_challenge_submit'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                                &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;pause&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;

                &lt;span class="c1"&gt;//Post Tweet&lt;/span&gt;
                &lt;span class="nv"&gt;$browser&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;assertSee&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Home'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;pause&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;visit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://twitter.com/compose/tweet'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;pause&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'.public-DraftStyleDefault-block'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;".public-DraftStyleDefault-block"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$tweet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;pause&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;click&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'div[data-testid="tweetButton"]'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;pause&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="cd"&gt;/**
     * Define the command's schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule $schedule
     * @return void
     */&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;schedule&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Schedule&lt;/span&gt; &lt;span class="nv"&gt;$schedule&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;$schedule&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;static&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;everyThirtyMinutes&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The handle() will get invoked on running the following command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php twitterBot post:tweet
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;handle() method is doing two jobs.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;getTweetText(): This method makes a call to OpenWeatherMap API via Guzzle and forms a tweet from the different variables returned by the API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;postTweetOnTwitter(): This method makes use of Dusk to open the browser, login into twitter and post the latest weather update.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's All.&lt;/p&gt;

&lt;p&gt;In the schedule method, we have scheduled the command to run for every thirty minutes. &lt;/p&gt;

&lt;p&gt;Step 4: Deploy on Server and Configure Cron&lt;/p&gt;

&lt;p&gt;As the final part of creating this bot, we want to run this code automatically. The project is deployed on a DigitalOcean Droplet and the following command is added to the list of cron jobs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt; php /home/twitterBot/twitterbot schedule:run &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /dev/null 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the working video of the Bot.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://player.vimeo.com/video/391426116" width="710" height="399"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>twitter</category>
      <category>automation</category>
      <category>dusk</category>
    </item>
  </channel>
</rss>
