<?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>DEV Community: Sabbir Sobhani</title>
    <description>The latest articles on DEV Community by Sabbir Sobhani (@sabbirsobhani).</description>
    <link>https://dev.to/sabbirsobhani</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%2F502140%2F8dd47e1c-26c8-484d-96eb-5efb87c3a766.png</url>
      <title>DEV Community: Sabbir Sobhani</title>
      <link>https://dev.to/sabbirsobhani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sabbirsobhani"/>
    <language>en</language>
    <item>
      <title>Quickly Set Up Kinde Authentication in Next.js: A Step-by-Step Tutorial Series🔐</title>
      <dc:creator>Sabbir Sobhani</dc:creator>
      <pubDate>Thu, 29 Aug 2024 13:32:29 +0000</pubDate>
      <link>https://dev.to/sabbirsobhani/kinde-auth-tutorial-series-integrate-authentication-in-nextjs-applications-506i</link>
      <guid>https://dev.to/sabbirsobhani/kinde-auth-tutorial-series-integrate-authentication-in-nextjs-applications-506i</guid>
      <description>&lt;p&gt;Welcome to my Kinde Authentication Tutorial Series! In this 3-part series, I’ll guide you through the entire process of integrating Kinde’s powerful authentication system with your Next.js application. Whether you’re building a secure web app or looking to enhance your skills, this series covers everything you need to know—from setting up Kinde in your Next.js project to implementing route protection with both in-component logic and middleware.&lt;/p&gt;

&lt;p&gt;What You'll Learn:&lt;/p&gt;

&lt;p&gt;How to Add Kinde Authentication to a Next.js Application (Part 1)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set up Kinde, configure your Next.js app, and add user authentication with ease.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Fd8g-SZ_0sQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Implement In-Component Route Protection in Next.js (Part 2)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn how to protect specific components in your app, ensuring that only authenticated users can access them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/i64-guw5sjc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Secure Next.js Routes with Kinde Middleware (Part 3)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dive deeper into route protection by setting up middleware in Next.js to guard entire routes from unauthorized access.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/FIiAaB9EH5E"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Buy Me a Coffee 🙏: &lt;br&gt;
If this video/article helped you a bit and you'd like to support my work, feel free to buy me a coffee: &lt;a href="https://buymeacoffee.com/sobhani" rel="noopener noreferrer"&gt;https://buymeacoffee.com/sobhani&lt;/a&gt; ☕️ Thanks for keeping me motivated!&lt;/p&gt;

&lt;p&gt;Thank you! If my video tutorial helps you authenticate your Next.js app with minimal steps, I'll be happy. Please share your thoughts in the comments. Also, don't forget to subscribe to my &lt;a href="https://www.youtube.com/@net-bro" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt; channel for more updates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/sabbirsobhani" rel="noopener noreferrer"&gt;X@sabbirsobhani&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/iamsabbirsobhani" rel="noopener noreferrer"&gt;GitHub@iamsabbirsobhani&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/users/7009215/sabbir-sobhani" rel="noopener noreferrer"&gt;StackOverflow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/sobhani" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buymeacoffee.com%2Fbuttons%2Fv2%2Fdefault-yellow.png" alt="Buy Me A Coffee"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kinde</category>
      <category>nextjs</category>
      <category>authen</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Next.js Server-Side vs. Client-Side Components</title>
      <dc:creator>Sabbir Sobhani</dc:creator>
      <pubDate>Sat, 17 Feb 2024 13:02:41 +0000</pubDate>
      <link>https://dev.to/sabbirsobhani/nextjs-server-side-vs-client-side-components-49b4</link>
      <guid>https://dev.to/sabbirsobhani/nextjs-server-side-vs-client-side-components-49b4</guid>
      <description>&lt;p&gt;In Next.js it is very confusing topic for the beginner or intermediate level coders to understand the difference between server and client components. While it is true that official docs provide a clear distinction between them but it is not enough to grasp the topic efficiently. So, this article is for every coders who have been through this concept.&lt;/p&gt;

&lt;p&gt;At first, we have to understand that what is Nextjs? Next.js is a web framework built on top of React.js library. And, React.js library is a library built on top of the JavaScript scripting language. While the core React.js library is primarily intended to create Single Page Application (SPA); means the whole codebase will be rendered to your browser or client side and then React DOM will take control of the entire application, and as a result you can’t find any page loading and it will be feeling like a native application. But, it has a small but effective problem which is hydration! Oops! What is hydration? Al right in web framework term hydration is referred to the process of mixing JavaScript with the actual website code while rendering to the browser.&lt;/p&gt;

&lt;p&gt;Scrawlers only can read web pages which are Server Side, means while the page will load it will have all the necessary MetaData as well as JavaScript without AJAX behavior. In other word only Hydrated/SSR web pages can read Scrawlers.&lt;/p&gt;

&lt;p&gt;In Single Page Application (SPA) hydration takes a bit time to process, so SEO scrawlers while try to access the SPA site for the better indexing it doesn’t find any metadata for the app so it never get indexed by scrawlers. So, coders around the world demand for a framework that will be a React.js app but as well as can be SSR or crawlers readable at the same time. For removing this problem Next.js emerged and evolving!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>FontAwesome Alternatives: Explore These 4 Free Icon Libraries</title>
      <dc:creator>Sabbir Sobhani</dc:creator>
      <pubDate>Thu, 09 Nov 2023 04:56:43 +0000</pubDate>
      <link>https://dev.to/sabbirsobhani/fontawesome-alternatives-explore-these-4-free-icon-libraries-53ll</link>
      <guid>https://dev.to/sabbirsobhani/fontawesome-alternatives-explore-these-4-free-icon-libraries-53ll</guid>
      <description>&lt;p&gt;Icons are among the most important navigational elements of a web application or any kinds of applications. Often, we rely on &lt;code&gt;FontAwesome&lt;/code&gt; an often-overrated icons provider. And, unfortunately, many essential icons are only available for a fee. &lt;/p&gt;

&lt;p&gt;So, here are 4 alternatives of &lt;code&gt;FontAwesome&lt;/code&gt; icon libraries we can use, and these are completely free. You can use these libraries on daily basis with any kinds of frameworks(React, Vue, Angular, Svelte etc.), or static HTML, CSS, JS projects.&lt;/p&gt;

&lt;h1&gt;
  
  
  Google Fonts Icons AkA Material Symbols
&lt;/h1&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%2Fae6oq9ac0dl0009kyh4i.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%2Fae6oq9ac0dl0009kyh4i.png" alt="Image description" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;According to the official docs, Material Symbols are the newest icons consolidating over 3,169 glyphs in a single font file with a wide range of design variants. Symbols are available in three styles and four adjustable variable font styles (fill, weight, grade, and optical size).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link&lt;/strong&gt;: Google &lt;a href="https://fonts.google.com/icons" rel="noopener noreferrer"&gt;Material Symbols&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Heroicons
&lt;/h1&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%2Fhuw2b4ejd2tg2yc923j8.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%2Fhuw2b4ejd2tg2yc923j8.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Buy Me a Coffee 🙏: &lt;br&gt;
If this article helped you a bit and you'd like to support my work, feel free to buy me a coffee: &lt;a href="https://buymeacoffee.com/sobhani" rel="noopener noreferrer"&gt;https://buymeacoffee.com/sobhani&lt;/a&gt; ☕️ Thanks for keeping me motivated!&lt;/p&gt;

&lt;p&gt;According to the &lt;code&gt;Heroicons&lt;/code&gt; it has motto, Beautiful hand-crafted SVG icons, by the makers of Tailwind CSS. Available as basic SVG icons and via first-party React and Vue libraries. Heroicons can be used by any kinds of web apps with or without any framework.&lt;/p&gt;

&lt;p&gt;It has supported mainly three different types of Icon sets:&lt;/p&gt;

&lt;h4&gt;
  
  
  Outline
&lt;/h4&gt;

&lt;p&gt;For primary navigation and marketing sections, with an outlined appearance.&lt;/p&gt;

&lt;h4&gt;
  
  
  Solid
&lt;/h4&gt;

&lt;p&gt;For primary navigation and marketing sections, with a filled appearance.&lt;/p&gt;

&lt;h4&gt;
  
  
  Mini
&lt;/h4&gt;

&lt;p&gt;For smaller elements like buttons, form elements, and to support text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link&lt;/strong&gt;: &lt;a href="https://heroicons.com/" rel="noopener noreferrer"&gt;Heroicons&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Boxicons
&lt;/h1&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%2Fklktn1bstghw6mdhcoml.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%2Fklktn1bstghw6mdhcoml.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&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%2F50xqtwpydwlcjrw3lz4d.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%2F50xqtwpydwlcjrw3lz4d.png" alt="Image description" width="745" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Boxicons&lt;/code&gt; provides High Quality Web Icons. It is simple open source icons carefully crafted for designers &amp;amp; developers. Switching to &lt;code&gt;Boxicons&lt;/code&gt; is easy and can be done in few steps. There are more features than just the icons set. Moreover, &lt;code&gt;Boxicons&lt;/code&gt; also follows the official &lt;code&gt;Google Material&lt;/code&gt; Design guidelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link&lt;/strong&gt;: &lt;a href="https://boxicons.com/" rel="noopener noreferrer"&gt;Boxicons&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Ionicons
&lt;/h1&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%2Flyni3pqi0z9vff3yonrh.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%2Flyni3pqi0z9vff3yonrh.png" alt="Image description" width="800" height="426"&gt;&lt;/a&gt;&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%2F54alktcvjsz0fq2yhsp9.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%2F54alktcvjsz0fq2yhsp9.png" alt="Image description" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;According to the official site it is Open sourced icons. Lovingly hand-crafted. Premium designed icons for use in web, iOS, Android, and desktop apps. Support for SVG. Completely open source, MIT licensed and built by Ionic. &lt;/p&gt;

&lt;p&gt;Ionicons is a completely open-source icon set with 1,300+ icons crafted for web, iOS, Android, and desktop apps. Ionicons was made for Ionic Framework, a cross-platform hybrid and Progressive Web App framework.&lt;/p&gt;

&lt;p&gt;The Ionicons Web Component is an easy and performant way to use Ionicons in your app. The component will dynamically load an SVG for each icon, so your app is only requesting the icons that you need.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link&lt;/strong&gt;: &lt;a href="https://ionic.io/ionicons" rel="noopener noreferrer"&gt;ionicons&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more updates,&lt;br&gt;
Follow me on &lt;a href="https://dev.to/sabbirsobhani"&gt;dev.to@sabbirsobhani&lt;/a&gt;&lt;br&gt;
Follow me on &lt;a href="https://twitter.com/sabbirsobhani" rel="noopener noreferrer"&gt;X@sabbirsobhani&lt;/a&gt;&lt;br&gt;
Follow me on &lt;a href="https://github.com/iamsabbirsobhani" rel="noopener noreferrer"&gt;GitHub@iamsabbirsobhani&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Efficient Route Protection in Next.js with Auth0 Middleware: Excluding Specific Routes</title>
      <dc:creator>Sabbir Sobhani</dc:creator>
      <pubDate>Tue, 07 Nov 2023 17:20:22 +0000</pubDate>
      <link>https://dev.to/sabbirsobhani/efficient-route-protection-in-nextjs-with-auth0-middleware-excluding-specific-routes-1d3f</link>
      <guid>https://dev.to/sabbirsobhani/efficient-route-protection-in-nextjs-with-auth0-middleware-excluding-specific-routes-1d3f</guid>
      <description>&lt;p&gt;When using &lt;a href="https://auth0.com/" rel="noopener noreferrer"&gt;Auth0&lt;/a&gt; with Next.js, securing all routes except for specific ones, such as the &lt;code&gt;homepage&lt;/code&gt; or &lt;code&gt;login&lt;/code&gt; page, can be achieved without the need to add extra logic for each route in the middleware. This can be accomplished by using a simple yet powerful regular expression (regex).&lt;/p&gt;

&lt;p&gt;From &lt;a href="https://nextjs.org/docs/app/building-your-application/routing/middleware#matcher" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt; official docs&lt;/p&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%2Fuploads%2Farticles%2Fwl2bzortbbwh8c1g86mm.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%2Fuploads%2Farticles%2Fwl2bzortbbwh8c1g86mm.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It suggests in &lt;code&gt;matcher&lt;/code&gt; we can write a regex &lt;code&gt;/((?!api|_next/static|_next/image|favicon.ico).*)&lt;/code&gt;. This &lt;code&gt;matcher&lt;/code&gt; will match all request paths except for the ones starting with&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;api (API routes)&lt;/li&gt;
&lt;li&gt;_next/static (static files)&lt;/li&gt;
&lt;li&gt;_next/image (image optimization files)&lt;/li&gt;
&lt;li&gt;favicon.ico (favicon file)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When we add this &lt;code&gt;matcher&lt;/code&gt; with &lt;code&gt;Auth0&lt;/code&gt; middleware, the homepage(&lt;code&gt;/&lt;/code&gt;) has been also included automatically by the &lt;code&gt;Auth0&lt;/code&gt; guard. It means we have to &lt;code&gt;sign in&lt;/code&gt; to visit the root path (&lt;code&gt;/&lt;/code&gt;) or homepage! And, this is not desired.&lt;/p&gt;

&lt;p&gt;So, we can modify the given &lt;a href="https://nextjs.org/docs/app/building-your-application/routing/middleware#matcher" rel="noopener noreferrer"&gt;&lt;code&gt;regex&lt;/code&gt;&lt;/a&gt; to achieve our goal. &lt;/p&gt;

&lt;h4&gt;
  
  
  Case 0: We want to exclude homepage(&lt;code&gt;/&lt;/code&gt;) under the guard of &lt;code&gt;Auth0&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;src/middleware.ts&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;withMiddlewareAuthRequired&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@auth0/nextjs-auth0/edge&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;matcher&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="cm"&gt;/*
     * Match all request paths except for the ones starting with:
     * - api (API routes)
     * - about (about page)
     * - _next/static (static files)
     * - _next/image (image optimization files)
     * - favicon.ico (favicon file)
     * - $ (homepage)
     */&lt;/span&gt;                                           &lt;span class="err"&gt;👇🏻&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/((?!api|_next/static|_next/image|favicon.ico|$).*)&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;withMiddlewareAuthRequired&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;Outcome&lt;/strong&gt;: Now homepage can be visited without sign in/up, but every other routes in the app are secured by &lt;code&gt;Auth0&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Case 1: We want to exclude about(&lt;code&gt;/about&lt;/code&gt;) page under the guard of &lt;code&gt;Auth0&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;src/middleware.ts&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;withMiddlewareAuthRequired&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@auth0/nextjs-auth0/edge&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;matcher&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="cm"&gt;/*
     * Match all request paths except for the ones starting with:
     * - api (API routes)
     * - about (about page)
     * - _next/static (static files)
     * - _next/image (image optimization files)
     * - favicon.ico (favicon file)
     * - $ (homepage)
     * - about (about page)
     */&lt;/span&gt;        &lt;span class="err"&gt;👇🏻&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/((?!api|about|_next/static|_next/image|favicon.ico|$).*)&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;withMiddlewareAuthRequired&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;Outcome&lt;/strong&gt;: Now homepage, about page can be visited without sign in/up, but every other routes in the app are secured by &lt;code&gt;Auth0&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Case 2: We want to exclude any(&lt;code&gt;/any&lt;/code&gt;) page under the guard of &lt;code&gt;Auth0&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;src/middleware.ts&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;withMiddlewareAuthRequired&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@auth0/nextjs-auth0/edge&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;matcher&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="cm"&gt;/*
     * Match all request paths except for the ones starting with:
     * - api (API routes)
     * - about (about page)
     * - _next/static (static files)
     * - _next/image (image optimization files)
     * - favicon.ico (favicon file)
     * - $ (homepage)
     * - about (about page)
     * - any (anypage)
     */&lt;/span&gt;           &lt;span class="err"&gt;👇🏻&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/((?!api|about|any|_next/static|_next/image|favicon.ico|$).*)&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="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;withMiddlewareAuthRequired&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;Outcome&lt;/strong&gt;: Now homepage, about page as well as any page can be visited without sign in/up, but every other routes in the app are secured by &lt;code&gt;Auth0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Buy Me a Coffee 🙏: &lt;br&gt;
If this article helped you a bit and you'd like to support my work, feel free to buy me a coffee: &lt;a href="https://buymeacoffee.com/sobhani" rel="noopener noreferrer"&gt;https://buymeacoffee.com/sobhani&lt;/a&gt; ☕️ Thanks for keeping me motivated!&lt;/p&gt;

&lt;p&gt;So, this is very useful if your app is required a tight security on every &lt;code&gt;routes&lt;/code&gt; but a very few routes need to &lt;code&gt;public&lt;/code&gt; then this method will be very helpful as well as time-saving. Otherwise, you have to implement &lt;code&gt;middleware&lt;/code&gt; logic or in &lt;code&gt;component&lt;/code&gt; logic for every routes you want to be secured!&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://twitter.com/sabbirsobhani" rel="noopener noreferrer"&gt;X@sabbirsobhani&lt;/a&gt;&lt;br&gt;
Follow me on &lt;a href="https://github.com/iamsabbirsobhani" rel="noopener noreferrer"&gt;GitHub@iamsabbirsobhani&lt;/a&gt;&lt;/p&gt;

</description>
      <category>auth0</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Google Icons from Google Fonts with Nextjs</title>
      <dc:creator>Sabbir Sobhani</dc:creator>
      <pubDate>Tue, 07 Nov 2023 11:58:19 +0000</pubDate>
      <link>https://dev.to/sabbirsobhani/google-icons-from-google-fonts-with-nextjs-11pa</link>
      <guid>https://dev.to/sabbirsobhani/google-icons-from-google-fonts-with-nextjs-11pa</guid>
      <description>&lt;p&gt;Google has just launched it's &lt;a href="https://fonts.google.com/icons" rel="noopener noreferrer"&gt;material icons&lt;/a&gt; out of the box for all platforms. Previously the specification of &lt;code&gt;Google Material Icons&lt;/code&gt; were developed by &lt;code&gt;MUI/Vuetify&lt;/code&gt; and some other &lt;code&gt;Google Material&lt;/code&gt; Based UI libraries for different frameworks. But, now Google itself developed its icon and make it open to all platforms to adopt. So, will it replace &lt;code&gt;fontawesome&lt;/code&gt;?🤨 who knows! but it's a great time to get rid of &lt;code&gt;premium/pro icons&lt;/code&gt; based businesses.&lt;/p&gt;

&lt;p&gt;So, as of now there is no direct documentation how to use the Google Icons using frameworks like Nextjs. So, to use it using &lt;code&gt;Next.js 14&lt;/code&gt; and &lt;code&gt;app/&lt;/code&gt; directory we can create a global css file and can give it a relevant name, let's say &lt;code&gt;globalicons.css&lt;/code&gt;(path is &lt;code&gt;app/globalicons.css&lt;/code&gt;) and &lt;code&gt;import&lt;/code&gt; it from global &lt;code&gt;app/layout.tsx&lt;/code&gt; or &lt;code&gt;app/layout.jsx&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;code&gt;app/layout.tsx&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Metadata&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Lexend&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/font/google&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./globals.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./globalicon.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 👈🏻&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Metadata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Website title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Website description&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lexend&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Lexend&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;subsets&lt;/span&gt;&lt;span class="p"&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;latin&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;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;RootLayout&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;children&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="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&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="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;lexend&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;At first copy the icons url from the &lt;a href="https://fonts.google.com/icons" rel="noopener noreferrer"&gt;Google Fonts website&lt;/a&gt;. &lt;/p&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%2Fuploads%2Farticles%2F65t2ad6e941n42osisfe.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%2Fuploads%2Farticles%2F65t2ad6e941n42osisfe.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And, paste the copied url to &lt;code&gt;@import url(paste url)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;app/globalicons.css&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="sx"&gt;url('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200')&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&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%2Fuploads%2Farticles%2F0mg35qwkguckz3g3iwoh.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%2Fuploads%2Farticles%2F0mg35qwkguckz3g3iwoh.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, copy the style part of the icon, you can modify if you want like color, weight. Paste it to &lt;code&gt;globalicons.css&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;app/globalicons.css&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;

&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="sx"&gt;url('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200')&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;.material-symbols-outlined&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;font-variation-settings&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'FILL'&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;'wght'&lt;/span&gt; &lt;span class="m"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;'GRAD'&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;'opsz'&lt;/span&gt; &lt;span class="m"&gt;24&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;Now, from any component we can use &lt;code&gt;&amp;lt;span className="material-symbols-outlined"&amp;gt;arrow_back&amp;lt;/span&amp;gt;&lt;/code&gt; for &lt;code&gt;arrow_back&lt;/code&gt; icon, and for different &lt;code&gt;icons&lt;/code&gt; we would just need to change the name of the &lt;code&gt;icon&lt;/code&gt; from &lt;a href="https://fonts.google.com/icons" rel="noopener noreferrer"&gt;Google Fonts Icons&lt;/a&gt;.  Moreover, we can use any &lt;a href="https://fonts.google.com/icons" rel="noopener noreferrer"&gt;Google Fonts Icons&lt;/a&gt; to any of our &lt;code&gt;components&lt;/code&gt; without extra setup.&lt;/p&gt;

&lt;p&gt;Buy Me a Coffee 🙏: &lt;br&gt;
If this article helped you a bit and you'd like to support my work, feel free to buy me a coffee: &lt;a href="https://buymeacoffee.com/sobhani" rel="noopener noreferrer"&gt;https://buymeacoffee.com/sobhani&lt;/a&gt; ☕️ Thanks for keeping me motivated!&lt;/p&gt;

&lt;p&gt;So, this can be a minimal setup. Though it is not an ideal or official solution but a viable one. For more further and advance use case of &lt;code&gt;Google Fonts Icons&lt;/code&gt; follow the recommended official docs for &lt;a href="https://developers.google.com/fonts/docs/material_symbols" rel="noopener noreferrer"&gt;Material Symbols guide&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://twitter.com/sabbirsobhani" rel="noopener noreferrer"&gt;X@sabbirsobhani&lt;/a&gt;&lt;br&gt;
Follow me on &lt;a href="https://github.com/iamsabbirsobhani" rel="noopener noreferrer"&gt;GitHub@iamsabbirsobhani&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>How to Dynamically Change Favicon Icon in Next.js 14</title>
      <dc:creator>Sabbir Sobhani</dc:creator>
      <pubDate>Sat, 04 Nov 2023 06:08:43 +0000</pubDate>
      <link>https://dev.to/sabbirsobhani/how-to-dynamically-change-favicon-icon-in-nextjs-14-a-step-by-step-guide-26l1</link>
      <guid>https://dev.to/sabbirsobhani/how-to-dynamically-change-favicon-icon-in-nextjs-14-a-step-by-step-guide-26l1</guid>
      <description>&lt;p&gt;If you want to change &lt;code&gt;favicon&lt;/code&gt; based on color modes(dark or light mode) in &lt;code&gt;Next.js 14&lt;/code&gt;. And, automatically switch between the black and white favicon versions according to the user's color scheme preference. This article is for you!&lt;/p&gt;

&lt;p&gt;Though there were no direct solution in the &lt;a href="https://nextjs.org/docs/app/api-reference/functions/generate-metadata#icons" rel="noopener noreferrer"&gt;docs about icons&lt;/a&gt; but got a hint so this is how we can achieve it: &lt;/p&gt;

&lt;p&gt;I have made a video tutorial if you want to see how it works and how to implement practically! or if you want to stick on the article just read on instead. &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/fcUE498s4x0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// app/layout.tsx&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Metadata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Website Title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Website description&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;icons&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;icon&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="na"&gt;media&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(prefers-color-scheme: light)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/images/icon-light.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/images/icon-light.png&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="na"&gt;media&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(prefers-color-scheme: dark)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/images/icon.png&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/images/icon-dark.png&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="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;Need to delete &lt;code&gt;app/icon.png&lt;/code&gt; or any files that by default map the &lt;code&gt;favicon&lt;/code&gt; in order to active the &lt;code&gt;Metadata&lt;/code&gt; interface's &lt;code&gt;icon&lt;/code&gt;. And, my &lt;code&gt;favicon or icon images&lt;/code&gt; stored in &lt;code&gt;public/images/icon-light.png&lt;/code&gt; and &lt;code&gt;public/images/icon-dark.png&lt;/code&gt;. And, now its working dynamically based on color modes. &lt;/p&gt;

&lt;p&gt;Buy Me a Coffee 🙏: &lt;br&gt;
If this video/article helped you a bit and you'd like to support my work, feel free to buy me a coffee: &lt;a href="https://buymeacoffee.com/sobhani" rel="noopener noreferrer"&gt;https://buymeacoffee.com/sobhani&lt;/a&gt; ☕️ Thanks for keeping me motivated!&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick Procedure:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Delete any &lt;code&gt;favicon&lt;/code&gt; or &lt;code&gt;icon&lt;/code&gt; images from &lt;code&gt;app/&lt;/code&gt; directory.&lt;/li&gt;
&lt;li&gt;Store &lt;code&gt;favicon or icon images&lt;/code&gt; to &lt;code&gt;public/images/&lt;/code&gt; directory.&lt;/li&gt;
&lt;li&gt;In &lt;code&gt;app/Layout.tsx&lt;/code&gt; &lt;code&gt;metadata.icons.icon&lt;/code&gt; add &lt;code&gt;url&lt;/code&gt; and &lt;code&gt;href&lt;/code&gt; path to the stored &lt;code&gt;images&lt;/code&gt; relative path. ✅&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Follow me on X@sabbirsobhani &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/sobhani" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.buymeacoffee.com%2Fbuttons%2Fv2%2Fdefault-yellow.png" alt="Buy Me A Coffee"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>javascript</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>CSS child behind parent with z-index</title>
      <dc:creator>Sabbir Sobhani</dc:creator>
      <pubDate>Tue, 15 Nov 2022 08:36:23 +0000</pubDate>
      <link>https://dev.to/sabbirsobhani/css-child-behind-parent-with-z-index-23j1</link>
      <guid>https://dev.to/sabbirsobhani/css-child-behind-parent-with-z-index-23j1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;z-index only works on positioned elements (position: absolute, position: relative, position: fixed, or position: sticky) and flex items (elements that are direct children of display:flex elements). &lt;a href="https://www.w3schools.com/cssref/pr_pos_z-index.php" rel="noopener noreferrer"&gt;w3school&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Child behind Parent
&lt;/h2&gt;

&lt;p&gt;parent: Not set any &lt;code&gt;z-index&lt;/code&gt; &lt;strong&gt;(it's important)&lt;/strong&gt;, set position &lt;code&gt;relative&lt;/code&gt; (by default though it's relative).&lt;/p&gt;

&lt;p&gt;child: Give any positional value &lt;em&gt;(absolute, sticky or fixed)&lt;/em&gt;, and &lt;code&gt;z-index&lt;/code&gt; any negative integer value.&lt;/p&gt;

&lt;p&gt;Now, the child is behind the parent element. ✅&lt;/p&gt;

&lt;p&gt;➕&lt;/p&gt;

&lt;h2&gt;
  
  
  Scenario
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;If you have a situation so to make the parent element &lt;code&gt;fixed&lt;/code&gt;, &lt;code&gt;sticky&lt;/code&gt; or &lt;code&gt;absolute&lt;/code&gt; then what? &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Simple, since child element will not work with &lt;code&gt;z-index: -1;&lt;/code&gt; or behind parent, if parent is other than &lt;code&gt;relative&lt;/code&gt;. Just wrap the parent element with any tag and make it &lt;code&gt;fixed&lt;/code&gt;, &lt;code&gt;sticky&lt;/code&gt; or &lt;code&gt;absolute&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"wrapper fixed-or-sticky-or-absolute"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; 👈wrapper tag
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"parent relative"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"child any-position-will-work z-index(-1)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Moreover, you can now give any &lt;code&gt;z-index&lt;/code&gt; value to the &lt;code&gt;wrapper&lt;/code&gt; element tag and it will not affect the child and parent.&lt;/p&gt;

&lt;p&gt;Done.&lt;/p&gt;

&lt;p&gt;Buy Me a Coffee 🙏: &lt;br&gt;
If this article helped you a bit and you'd like to support my work, feel free to buy me a coffee: &lt;a href="https://buymeacoffee.com/sobhani" rel="noopener noreferrer"&gt;https://buymeacoffee.com/sobhani&lt;/a&gt; ☕️ Thanks for keeping me motivated!&lt;/p&gt;

&lt;p&gt;Follow me on Twitter &lt;a href="https://twitter.com/sabbirsobhani" rel="noopener noreferrer"&gt;sabbirsobhani&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>zindex</category>
    </item>
    <item>
      <title>Node.js v19.0.0 --watch option</title>
      <dc:creator>Sabbir Sobhani</dc:creator>
      <pubDate>Fri, 21 Oct 2022 13:30:12 +0000</pubDate>
      <link>https://dev.to/sabbirsobhani/nodejs-v1900-watch-option-ck7</link>
      <guid>https://dev.to/sabbirsobhani/nodejs-v1900-watch-option-ck7</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;short&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Node has released their 19th version. Many important new additions have been made in this version. One addition I find very interesting. &lt;/p&gt;

&lt;p&gt;We have been using &lt;code&gt;nodemon&lt;/code&gt; to watch script changes for a long time. Now, we don't have to rely on this third party library. Because, Node.js has just added &lt;code&gt;--watch&lt;/code&gt; option in their new version, which will work exactly like &lt;code&gt;nodemon&lt;/code&gt;. CMD &lt;code&gt;node --watch [your-file-name]&lt;/code&gt;. Example: &lt;code&gt;node --watch app.mjs&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/sabbirsobhani" rel="noopener noreferrer"&gt;Follow me on Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>AOS scrolling animation with VueJS 3</title>
      <dc:creator>Sabbir Sobhani</dc:creator>
      <pubDate>Fri, 03 Sep 2021 17:33:41 +0000</pubDate>
      <link>https://dev.to/sabbirsobhani/aos-scrolling-animation-with-vuejs-3-4hp7</link>
      <guid>https://dev.to/sabbirsobhani/aos-scrolling-animation-with-vuejs-3-4hp7</guid>
      <description>&lt;p&gt;We can use any &lt;strong&gt;JavaScript&lt;/strong&gt; library with &lt;strong&gt;Vuejs&lt;/strong&gt; and its all versions. We can use AOS as well, Animate On Scroll Library with Vue.js 3, and it's super easy to implement. Let's start! &lt;/p&gt;

&lt;h3&gt;
  
  
  Install AOS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Using &lt;code&gt;npm&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  npm &lt;span class="nb"&gt;install &lt;/span&gt;aos &lt;span class="nt"&gt;--save&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Vue CLI project src/main.js
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createApp&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./App.vue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="c1"&gt;// importing AOS css style globally&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;aos/dist/aos.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#app&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;h4&gt;
  
  
  Template part of a component, src/components/HelloWorld.vue
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;this is just for an example to implement, you can use anything supported by AOS.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- card 1 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt;
      &lt;span class="na"&gt;data-aos=&lt;/span&gt;&lt;span class="s"&gt;"zoom-in"&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;
      &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width: 18rem; margin: 100px auto;"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
        &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://images.unsplash.com/photo-1488590528505-98d2b5aba04b?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;amp;ixlib=rb-1.2.1&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;w=1500&amp;amp;q=80"&lt;/span&gt;
        &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-img-top"&lt;/span&gt;
        &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;
      &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-body"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Card 1&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          Some quick example text to build on the card title and make up the
          bulk of the card's content.
        &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Go somewhere&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- card 2 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt;
      &lt;span class="na"&gt;data-aos=&lt;/span&gt;&lt;span class="s"&gt;"new-animation"&lt;/span&gt;
      &lt;span class="na"&gt;data-aos-offset=&lt;/span&gt;&lt;span class="s"&gt;"200"&lt;/span&gt;
      &lt;span class="na"&gt;data-aos-easing=&lt;/span&gt;&lt;span class="s"&gt;"ease-in-out"&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;
      &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width: 18rem; margin: 200px auto;"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
        &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://images.unsplash.com/photo-1496171367470-9ed9a91ea931?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;amp;ixlib=rb-1.2.1&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;w=1500&amp;amp;q=80"&lt;/span&gt;
        &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-img-top"&lt;/span&gt;
        &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;
      &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-body"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Card 2&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          Some quick example text to build on the card title and make up the
          bulk of the card's content.
        &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Go somewhere&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- card  3--&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt;
      &lt;span class="na"&gt;data-aos=&lt;/span&gt;&lt;span class="s"&gt;"fade-right"&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;
      &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"max-width: 18rem; margin: 200px auto;"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
        &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://images.unsplash.com/photo-1496171367470-9ed9a91ea931?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;amp;ixlib=rb-1.2.1&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;w=1500&amp;amp;q=80"&lt;/span&gt;
        &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-img-top"&lt;/span&gt;
        &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;
      &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-body"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Card 3&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          Some quick example text to build on the card title and make up the
          bulk of the card's content.
        &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Go somewhere&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="c"&gt;&amp;lt;!-- card 4 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt;
      &lt;span class="na"&gt;data-aos=&lt;/span&gt;&lt;span class="s"&gt;"fade-left"&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;
      &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width: 18rem; margin: 200px auto;"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
        &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://images.unsplash.com/photo-1519389950473-47ba0277781c?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;amp;ixlib=rb-1.2.1&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;w=1500&amp;amp;q=80"&lt;/span&gt;
        &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-img-top"&lt;/span&gt;
        &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;
      &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-body"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Card 4&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          Some quick example text to build on the card title and make up the
          bulk of the card's content.
        &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Go somewhere&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- card 5 --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt;
      &lt;span class="na"&gt;data-aos=&lt;/span&gt;&lt;span class="s"&gt;"flip-left"&lt;/span&gt;
      &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;
      &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width: 18rem; margin: 200px auto;"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt;
        &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://images.unsplash.com/photo-1593642632823-8f785ba67e45?ixid=MnwxMjA3fDF8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&amp;amp;ixlib=rb-1.2.1&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;w=889&amp;amp;q=80"&lt;/span&gt;
        &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-img-top"&lt;/span&gt;
        &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;
      &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-body"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Card 5&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          Some quick example text to build on the card title and make up the
          bulk of the card's content.
        &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Go somewhere&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt; &lt;span class="na"&gt;setup&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"ts"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;onMounted&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;AOS&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;aos&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;onMounted&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;AOS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;script&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buy Me a Coffee 🙏: &lt;br&gt;
If this article helped you a bit and you'd like to support my work, feel free to buy me a coffee: &lt;a href="https://buymeacoffee.com/sobhani" rel="noopener noreferrer"&gt;https://buymeacoffee.com/sobhani&lt;/a&gt; ☕️ Thanks for keeping me motivated!&lt;/p&gt;

&lt;h2&gt;
  
  
  Full project code:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/iamsabbirsobhani/aos-scrolling" rel="noopener noreferrer"&gt;AOS Scrolling GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Reference
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/michalsnik/aos#predefined-options" rel="noopener noreferrer"&gt;AOS Docs on GitHub&lt;/a&gt;&lt;br&gt;
&lt;a href="http://michalsnik.github.io/aos/" rel="noopener noreferrer"&gt;AOS Demo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vue</category>
      <category>aos</category>
      <category>javascript</category>
      <category>css</category>
    </item>
    <item>
      <title>Font Awesome with VueJS 3</title>
      <dc:creator>Sabbir Sobhani</dc:creator>
      <pubDate>Sat, 22 May 2021 10:03:14 +0000</pubDate>
      <link>https://dev.to/sabbirsobhani/font-awesome-with-vuejs-3-59ee</link>
      <guid>https://dev.to/sabbirsobhani/font-awesome-with-vuejs-3-59ee</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;version 5&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Font Awesome is a great tool for working with various of icons. It is the most popular and widely using icon toolkit. In a VueJS 3 CLI project you can easily add Font Awesome library by following these easy steps:&lt;/p&gt;

&lt;h1&gt;
  
  
  install &lt;code&gt;fontawesome&lt;/code&gt; packeges from &lt;code&gt;npm&lt;/code&gt;
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;install all of them one by one&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;--save&lt;/span&gt; @fortawesome/fontawesome-svg-core
npm i &lt;span class="nt"&gt;--save&lt;/span&gt; @fortawesome/free-solid-svg-icons
npm i &lt;span class="nt"&gt;--save&lt;/span&gt; @fortawesome/free-brands-svg-icons
npm i &lt;span class="nt"&gt;--save&lt;/span&gt; @fortawesome/free-regular-svg-icons
npm i &lt;span class="nt"&gt;--save&lt;/span&gt; @fortawesome/vue-fontawesome
npm i &lt;span class="nt"&gt;--save&lt;/span&gt; @fortawesome/vue-fontawesome@prerelease
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5 no is for Vue version 3 only&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;6 no is for Vue 3++ version, also work with Vite&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;install 5 or 6, not both&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  import in &lt;code&gt;main.js&lt;/code&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;You can find &lt;code&gt;main.js&lt;/code&gt; inside your vuejs 3 project, &lt;code&gt;/src&lt;/code&gt; folder.&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//vue-app/src/main.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;library&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@fortawesome/fontawesome-svg-core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;FontAwesomeIcon&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@fortawesome/vue-fontawesome&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;fas&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@fortawesome/free-solid-svg-icons&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="nx"&gt;library&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fas&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;fab&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@fortawesome/free-brands-svg-icons&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;library&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fab&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;far&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@fortawesome/free-regular-svg-icons&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;library&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;far&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;dom&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@fortawesome/fontawesome-svg-core&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;dom&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;watch&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;component&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;font-awesome-icon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;FontAwesomeIcon&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// add necessary dependencies...&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mount&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#app&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;Thats it! now you can use &lt;a href="https://fontawesome.com/" rel="noopener noreferrer"&gt;font awesome&lt;/a&gt; icon in your VueJS 3 project!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;i&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"fad fa-laugh-wink"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/i&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;if there any problem popup, don't forget to ask me!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Follow me on Twitter &lt;a href="https://twitter.com/sabbirsobhani" rel="noopener noreferrer"&gt;sabbirsobhani&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Buy Me a Coffee 🙏: &lt;br&gt;
If this article helped you a bit and you'd like to support my work, feel free to buy me a coffee: &lt;a href="https://buymeacoffee.com/sobhani" rel="noopener noreferrer"&gt;https://buymeacoffee.com/sobhani&lt;/a&gt; ☕️ Thanks for keeping me motivated!&lt;/p&gt;

&lt;p&gt;Note: This article was originally Posted on May 22, 2021. While the core concepts discussed here remain relevant, please be aware that the technology landscape is constantly evolving. Libraries, frameworks, and best practices may have changed since this article was written. For the most up-to-date information, consider checking the latest documentation or resources.&lt;/p&gt;

</description>
      <category>vue</category>
      <category>vuejs3</category>
      <category>fontawesome</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
