<?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: Aryan Dev Shourie</title>
    <description>The latest articles on DEV Community by Aryan Dev Shourie (@aryan_shourie).</description>
    <link>https://dev.to/aryan_shourie</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%2F1087949%2F19324ca5-7f5b-4e6e-9260-f950e96daef4.jpeg</url>
      <title>DEV Community: Aryan Dev Shourie</title>
      <link>https://dev.to/aryan_shourie</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aryan_shourie"/>
    <language>en</language>
    <item>
      <title>HTML You Think You Know (But Probably Don’t)</title>
      <dc:creator>Aryan Dev Shourie</dc:creator>
      <pubDate>Thu, 08 Jan 2026 08:37:09 +0000</pubDate>
      <link>https://dev.to/aryan_shourie/html-you-think-you-know-but-probably-dont-2d6j</link>
      <guid>https://dev.to/aryan_shourie/html-you-think-you-know-but-probably-dont-2d6j</guid>
      <description>&lt;p&gt;HTML is usually the first thing we learn in frontend development —&lt;br&gt;
and the first thing we stop thinking deeply about.&lt;/p&gt;

&lt;p&gt;Most of us write HTML every day, but rarely question:&lt;/p&gt;

&lt;p&gt;Is this the right element?&lt;/p&gt;

&lt;p&gt;How will this behave with a keyboard?&lt;/p&gt;

&lt;p&gt;What does this mean to a screen reader, bot, or automation tool?&lt;/p&gt;

&lt;p&gt;In this article, I revisit HTML from a frontend engineering perspective — not as “just markup,” but as the foundation of everything we build on the web.&lt;/p&gt;

&lt;p&gt;What this article covers&lt;br&gt;
🔹 Semantic HTML&lt;/p&gt;

&lt;p&gt;Why choosing the right element matters more than styling or JavaScript, and how semantics affect accessibility, SEO, and long-term maintainability.&lt;/p&gt;

&lt;p&gt;🔹 Accessibility basics most of us skip&lt;/p&gt;

&lt;p&gt;Keyboard navigation, focus order, and how small HTML choices can either block or enable users.&lt;/p&gt;

&lt;p&gt;🔹 Focus management (tabindex)&lt;/p&gt;

&lt;p&gt;How browsers decide focus order, when tabindex helps, and when it quietly breaks your UI.&lt;/p&gt;

&lt;p&gt;🔹 HTML features we underuse&lt;/p&gt;

&lt;p&gt;Elements and attributes that already solve problems we often reimplement with JavaScript.&lt;/p&gt;

&lt;p&gt;🔹 Why HTML matters even more in 2026&lt;/p&gt;

&lt;p&gt;With AI agents, voice interfaces, Smart TVs, embedded browsers, and automated testing tools consuming our UIs, clean and intentional HTML has become a real advantage.&lt;/p&gt;

&lt;p&gt;Why I wrote this&lt;/p&gt;

&lt;p&gt;As frontend developers, we spend a lot of time optimizing JavaScript and frameworks.&lt;/p&gt;

&lt;p&gt;But many real-world bugs — especially on:&lt;/p&gt;

&lt;p&gt;Smart TVs&lt;/p&gt;

&lt;p&gt;Embedded browsers&lt;/p&gt;

&lt;p&gt;Accessibility-heavy apps&lt;/p&gt;

&lt;p&gt;…come down to HTML fundamentals.&lt;/p&gt;

&lt;p&gt;This article is a reminder that mastering HTML isn’t beginner work — it’s engineering work.&lt;/p&gt;

&lt;p&gt;👉 Read the full article here:&lt;br&gt;
&lt;a href="https://aryanshourie.substack.com/p/html-you-think-you-know-but-probably" rel="noopener noreferrer"&gt;https://aryanshourie.substack.com/p/html-you-think-you-know-but-probably&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts:&lt;/p&gt;

&lt;p&gt;What’s one HTML concept you only truly understood later in your career?&lt;/p&gt;

&lt;p&gt;Any underrated HTML features you rely on?&lt;/p&gt;

&lt;p&gt;Let’s discuss 👇&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>html</category>
      <category>frontend</category>
    </item>
    <item>
      <title>How I Would Learn Frontend Development If I Started in 2026</title>
      <dc:creator>Aryan Dev Shourie</dc:creator>
      <pubDate>Thu, 01 Jan 2026 07:16:56 +0000</pubDate>
      <link>https://dev.to/aryan_shourie/how-i-would-learn-frontend-development-if-i-started-in-2026-4300</link>
      <guid>https://dev.to/aryan_shourie/how-i-would-learn-frontend-development-if-i-started-in-2026-4300</guid>
      <description>&lt;p&gt;Frontend development today has no shortage of tutorials, frameworks, and roadmaps — but that doesn’t always translate to real progress.&lt;/p&gt;

&lt;p&gt;In this article, I share how I would approach learning frontend development if I were starting again in 2026, based on my experience building production web apps and Smart TV applications (LG webOS &amp;amp; Samsung Tizen).&lt;/p&gt;

&lt;p&gt;I cover:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Why mastering HTML, CSS, and JavaScript still matters&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Building real-world projects instead of basic clones&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Learning how things work under the hood&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Using AI tools and LLMs as learning accelerators (not shortcuts)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exploring frontend beyond the browser&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👉 Read the full article here:&lt;br&gt;
&lt;a href="https://aryanshourie.substack.com/p/how-i-would-learn-frontend-development" rel="noopener noreferrer"&gt;https://aryanshourie.substack.com/p/how-i-would-learn-frontend-development&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article was originally published on my Substack newsletter, &lt;strong&gt;Frontend Engineering Weekly&lt;/strong&gt;, where I share one practical frontend engineering post every week.&lt;/p&gt;

&lt;p&gt;If you find the content valuable, do consider subscribing to my free Substack newsletter.&lt;/p&gt;

&lt;p&gt;Would love to hear how you approached learning frontend 👇&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn :- &lt;a href="https://www.linkedin.com/in/aryan-dev-shourie-175025229/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do check out my GitHub for amazing projects :- &lt;a href="https://github.com/Aryan2727-debug" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check out my website :- &lt;a href="https://aryanshourie.dev" rel="noopener noreferrer"&gt;aryanshourie.dev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>career</category>
      <category>frontend</category>
      <category>react</category>
    </item>
    <item>
      <title>Securely storing passwords in a database</title>
      <dc:creator>Aryan Dev Shourie</dc:creator>
      <pubDate>Sun, 02 Nov 2025 09:22:24 +0000</pubDate>
      <link>https://dev.to/aryan_shourie/securely-storing-passwords-in-a-database-25nd</link>
      <guid>https://dev.to/aryan_shourie/securely-storing-passwords-in-a-database-25nd</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Passwords are the &lt;strong&gt;digital keys&lt;/strong&gt; 🔑 that protect user accounts and sensitive information. Unfortunately, many security breaches happen not because the hackers are genuises, but because the &lt;strong&gt;developers stored the passwords incorrectly&lt;/strong&gt; in the database.&lt;/p&gt;

&lt;p&gt;If an attacker ever gains access to your database, you want them to find useless gibberish, not the real passwords. Secure password storage ensures that even in a breach, the &lt;strong&gt;attacker gets nothing valuable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this article, we will discuss the several techniques which can be used for storing passwords in a database.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Storing passwords as plain text (🚫 The Worst Way)
&lt;/h2&gt;

&lt;p&gt;Storing passwords as plain text means &lt;strong&gt;saving them exactly as the users type them&lt;/strong&gt;. Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;username | password
--------- | --------
ravi      | 123456
neha      | 123456

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

&lt;/div&gt;



&lt;p&gt;This is a complete disaster! 😱&lt;br&gt;
Anyone with access - hackers, admins and scripts can easily see every password. If the database leaks, &lt;strong&gt;all the user accounts are instantly compromised&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why this approach is bad ⚠:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Total loss of privacy. 🔒&lt;/li&gt;
&lt;li&gt;Irreversible trust loss and legal risk.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;👉 &lt;strong&gt;Never ever store passwords in plain text.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Simple Hashing (MD5, SHA-1 etc.)
&lt;/h2&gt;

&lt;p&gt;A small improvement is to &lt;strong&gt;hash passwords&lt;/strong&gt; using &lt;strong&gt;one way functions&lt;/strong&gt; like &lt;strong&gt;MD5&lt;/strong&gt; or &lt;strong&gt;SHA-1&lt;/strong&gt;. Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Password: "123456"
MD5 Hash: e10adc3949ba59abbe56e057f20f883e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It looks secure, but it is not. These algorithms are &lt;strong&gt;fast&lt;/strong&gt; and &lt;strong&gt;predictable&lt;/strong&gt;. The hackers can use &lt;strong&gt;Rainbow Tables&lt;/strong&gt; or &lt;strong&gt;brute-force attacks&lt;/strong&gt; to reverse them in seconds.&lt;/p&gt;

&lt;p&gt;Why this approach is bad ⚠:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;MD5 and SHA-1 are &lt;strong&gt;too fast&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;precomputed hash tables&lt;/strong&gt; make reversing easy.&lt;/li&gt;
&lt;li&gt;Identical passwords always produce identical hashes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ravi password = "123456" → MD5 = e10adc3949ba59abbe56e057f20f883e  
Neha password = "123456" → MD5 = e10adc3949ba59abbe56e057f20f883e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Attackers instantly know Ravi and Neha share the same password.&lt;br&gt;
➡️ &lt;strong&gt;Simple hashing is not enough&lt;/strong&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%2Fz8lmxtpmq9m1h6qa4ix5.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%2Fz8lmxtpmq9m1h6qa4ix5.png" alt="Hacker Alert" width="728" height="380"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Slow Hashing (The Right Kind of Hashing ✅)
&lt;/h2&gt;

&lt;p&gt;Modern systems use &lt;strong&gt;slow, adaptive hashing algorithms&lt;/strong&gt; like &lt;strong&gt;bcrypt&lt;/strong&gt;, &lt;strong&gt;scrypt&lt;/strong&gt; or &lt;strong&gt;Argon2&lt;/strong&gt;. These are specifically designed for passwords and take more time to compute ⌛ —making brute-force attacks painfully slow.&lt;/p&gt;

&lt;p&gt;Why slow hashing wins:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Adjustable cost factor.&lt;/li&gt;
&lt;li&gt;Built-in salting support.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bcrypt("123456") → $2b$12$Z4qZKZk...  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even if attackers know the algorithm, calculating millions of such hashes takes years, not seconds. 💪&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Salting
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;salt&lt;/strong&gt; 🧂 is a &lt;strong&gt;random string added to each password&lt;/strong&gt; before hashing. It ensures that even if 2 users have the same password, their &lt;strong&gt;hashes are totally different&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ravi password = "123456"
Ravi salt     = "pqr_salt"
Stored hash   = H("123456pqr_salt")

Neha password = "123456"
Neha salt     = "xyz_salt"
Stored hash   = H("123456xyz_salt")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✨ &lt;strong&gt;Result: Different hashes, even for the same password.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Why salting is essential:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Protects against Rainbow Table attacks.&lt;/li&gt;
&lt;li&gt;Adds uniqueness per user.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The salt is usually &lt;strong&gt;stored alongside the hash in the database&lt;/strong&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%2F6wkah7jf1oske8nl9sam.jpg" 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%2F6wkah7jf1oske8nl9sam.jpg" alt="Salting" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Peppering
&lt;/h2&gt;

&lt;p&gt;Peppering 🌶 is like salting, but with a secret twist.&lt;br&gt;
A pepper is a &lt;strong&gt;secret key added to the password before hashing&lt;/strong&gt;. Unlike salts, &lt;strong&gt;peppers are kept secret&lt;/strong&gt; and &lt;strong&gt;not stored in the database&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There are 2 ways to use pepper:&lt;/p&gt;

&lt;p&gt;i) &lt;strong&gt;Global Pepper&lt;/strong&gt;: This means that the &lt;strong&gt;same secret will be used for all the passwords&lt;/strong&gt;. It is stored in the &lt;strong&gt;environment variables&lt;/strong&gt; or any secure config. It is easier to manage and configure. Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;password + salt + PEPPER_SECRET
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ii) &lt;strong&gt;Per-user Pepper&lt;/strong&gt;: This means that a &lt;strong&gt;unique pepper will be used for each user&lt;/strong&gt;. It offers stronger protection, but it is more complex to manage.&lt;/p&gt;

&lt;p&gt;Why peppering helps:&lt;br&gt;
Even if hackers steal the entire database (hash + salt), they still &lt;strong&gt;can’t verify passwords without the hidden pepper&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Storing passwords securely isn't optional—it’s your &lt;strong&gt;duty&lt;/strong&gt; as a developer.&lt;br&gt;
Bad practices like &lt;strong&gt;plain text&lt;/strong&gt; or &lt;strong&gt;MD5&lt;/strong&gt; are ticking time bombs 💣 waiting to explode in a &lt;strong&gt;data breach&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The gold-standard approach includes:&lt;br&gt;
✅ &lt;strong&gt;Slow hashing&lt;/strong&gt; (bcrypt, Argon2)&lt;br&gt;
✅ &lt;strong&gt;Unique salting&lt;/strong&gt; for each password&lt;br&gt;
✅&lt;strong&gt;Secret peppering&lt;/strong&gt; for extra protection&lt;/p&gt;

&lt;p&gt;Remember: you’re not just storing passwords—you’re storing user trust 🤝.&lt;/p&gt;

&lt;p&gt;And that's it! This was just a quick overview about how passwords can securely be stored in a database.&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn :- &lt;a href="https://www.linkedin.com/in/aryandev-shourie-175025229/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do check out my GitHub for amazing projects :- &lt;a href="https://github.com/Aryan2727-debug" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>database</category>
      <category>security</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>Git Hooks: Automating Workflows in Git</title>
      <dc:creator>Aryan Dev Shourie</dc:creator>
      <pubDate>Sat, 23 Aug 2025 09:44:54 +0000</pubDate>
      <link>https://dev.to/aryan_shourie/git-hooks-automating-workflows-in-git-3bpo</link>
      <guid>https://dev.to/aryan_shourie/git-hooks-automating-workflows-in-git-3bpo</guid>
      <description>&lt;h2&gt;
  
  
  Introduction to Git Hooks
&lt;/h2&gt;

&lt;p&gt;Git is more than just a version control system. It also provides automation to improve developer productivity. One of these features is &lt;strong&gt;Git Hooks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Git Hooks are &lt;strong&gt;scripts&lt;/strong&gt; that Git automatically executes before or after specific events, such as &lt;strong&gt;commiting code&lt;/strong&gt;, &lt;strong&gt;pushing&lt;/strong&gt; to a remote repository or &lt;strong&gt;merging branches&lt;/strong&gt;. They allow developers to automate tasks seamlessly within the Git workflow.&lt;/p&gt;

&lt;p&gt;In simpler words, Git Hooks act like "&lt;strong&gt;triggered scripts&lt;/strong&gt;" that run at different stages of Git's lifecycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The need for Git Hooks
&lt;/h2&gt;

&lt;p&gt;Without Git Hooks, maintaining consistent standards across a team can be difficult. For example, the following issues may arise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Developers may forget to run linting or tests before committing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sensitive files like API keys or credentials might accidentally get pushed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Commit messages may lack standard formatting, making history harder to read.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Git Hooks solve these problems by &lt;strong&gt;automating checks&lt;/strong&gt; and &lt;strong&gt;enforcing rules&lt;/strong&gt;. Instead of relying on developers to remember every step, Git Hooks ensure quality and consistency by &lt;strong&gt;running predefined scripts automatically&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of Git Hooks available
&lt;/h2&gt;

&lt;p&gt;Git provides a variety of Hooks that can be used in different stages of the workflow. These are categorized into two types:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Client-Side Hooks&lt;/strong&gt;: Triggered by operations like &lt;strong&gt;committing&lt;/strong&gt;, &lt;strong&gt;merging&lt;/strong&gt;, or &lt;strong&gt;rebasing&lt;/strong&gt;. Example: &lt;strong&gt;pre-commit&lt;/strong&gt;, &lt;strong&gt;prepare-commit-msg&lt;/strong&gt;, &lt;strong&gt;commit-msg&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Server-Side Hooks&lt;/strong&gt;: Triggered on the server side when pushes are received. Example: &lt;strong&gt;pre-receive&lt;/strong&gt;, &lt;strong&gt;update&lt;/strong&gt;, &lt;strong&gt;post-receive&lt;/strong&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How to find Git Hooks
&lt;/h2&gt;

&lt;p&gt;When you initialize a Git repository, Hooks are available as sample scripts inside the &lt;strong&gt;.git/hooks/&lt;/strong&gt; directory. You can verify by using this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ls .git/hooks/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will see files like &lt;strong&gt;pre-commit.sample&lt;/strong&gt;, &lt;strong&gt;pre-push.sample&lt;/strong&gt; etc. These sample files are &lt;strong&gt;not active by default&lt;/strong&gt;, you can make them active by removing the &lt;strong&gt;.sample&lt;/strong&gt; extension from the filename.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example Usage of a Git Hook: Pre-Commit with Linter
&lt;/h2&gt;

&lt;p&gt;Let's go through a step-by-step guide of setting up a &lt;strong&gt;pre-commit Hook&lt;/strong&gt; to &lt;strong&gt;block commits if linting errors exist&lt;/strong&gt; in the staged files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Navigate to the Hooks directory&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd .git/hooks/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Create/Edit the Pre-Commit Hook&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nano pre-commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Add the Hook script&lt;/strong&gt;&lt;br&gt;
Here is an example script to check for ESLint issues before allowing a commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/sh

echo "Running lint checks..."

# Run ESLint on staged JavaScript files
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep '\.js$')

if [ "$STAGED_FILES" = "" ]; then
  exit 0
fi

# Run eslint
npx eslint $STAGED_FILES
if [ $? -ne 0 ]; then
  echo "❌ Lint errors found. Commit aborted."
  exit 1
fi

echo "✅ Lint checks passed!"
exit 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Make it executable&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chmod +x .git/hooks/pre-commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 5: Test the Hook&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Modify a &lt;strong&gt;.js&lt;/strong&gt; file with linting issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Try committing:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add file.js
git commit -m "Test commit"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;If issues are found, the &lt;strong&gt;commit will be blocked&lt;/strong&gt; until you fix them.
This ensures that no developer can commit code with linting errors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Advantages of Git Hooks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automation&lt;/strong&gt;: Automates repetitive tasks like running tests, linting, or formatting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consistency&lt;/strong&gt;: Enforces code quality and project standards across the team.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;: Prevents accidental commits of sensitive files or bad code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Efficiency&lt;/strong&gt;: Saves time by catching issues early, before code is pushed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;: Hooks can be customized for different workflows and tools.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Git Hooks in place, teams can maintain &lt;strong&gt;higher code quality&lt;/strong&gt;, &lt;strong&gt;enforce rules&lt;/strong&gt; effortlessly, and &lt;strong&gt;automate mundane checks&lt;/strong&gt;—all directly within Git’s workflow.&lt;/p&gt;

&lt;p&gt;And that's it! This was just a quick overview about using Git Hooks in your daily workflow.&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn :- &lt;a href="https://www.linkedin.com/in/aryandev-shourie-175025229/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do check out my GitHub for amazing projects :- &lt;a href="https://github.com/Aryan2727-debug" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>development</category>
      <category>git</category>
      <category>programming</category>
      <category>automation</category>
    </item>
    <item>
      <title>Secure Tunneling Explained: Ngrok vs Cloudflared</title>
      <dc:creator>Aryan Dev Shourie</dc:creator>
      <pubDate>Sat, 02 Aug 2025 11:21:35 +0000</pubDate>
      <link>https://dev.to/aryan_shourie/secure-tunneling-explained-ngrok-vs-cloudflared-mcl</link>
      <guid>https://dev.to/aryan_shourie/secure-tunneling-explained-ngrok-vs-cloudflared-mcl</guid>
      <description>&lt;h2&gt;
  
  
  Problem Statement
&lt;/h2&gt;

&lt;p&gt;In development, testing, or remote collaboration, developers often need to &lt;strong&gt;expose a locally hosted web service to the Internet&lt;/strong&gt;. Whether it is a Webhook testing endpoint, a locally running admin dashboard, or a demo site for a client, making a local server publicly accessible is not straightforward. Following the traditional approaches requires &lt;strong&gt;configuring firewalls&lt;/strong&gt;, &lt;strong&gt;setting up ports&lt;/strong&gt; and &lt;strong&gt;deploying to different servers&lt;/strong&gt;. All of these things can be complex, insecure and time consuming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tunneling
&lt;/h2&gt;

&lt;p&gt;For the above problem statement, the solution is &lt;strong&gt;Tunneling&lt;/strong&gt;. It refers to &lt;strong&gt;creating a secure pathway between two endpoints&lt;/strong&gt; - in this context, between a public URL and a local server by encapsulating the network traffic. This process allows a remote client to access a local service &lt;strong&gt;as if it were hosted on a public server&lt;/strong&gt;, all while &lt;strong&gt;bypassing NAT, firewalls and complex DNS setups&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Following are the advantages of Tunneling:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It enables you to test integrations locally.&lt;/li&gt;
&lt;li&gt;It helps in client demos without deploying code.&lt;/li&gt;
&lt;li&gt;It facilitates remote development and debugging.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this article, we will discuss the two widely used tools for Tunneling: &lt;strong&gt;Ngrok and Cloudflared Tunnel&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ngrok
&lt;/h2&gt;

&lt;p&gt;Ngrok is a popular tunneling tool that &lt;strong&gt;provides public URLs to your locally running applications&lt;/strong&gt;, commonly used for &lt;strong&gt;testing webhooks&lt;/strong&gt; and &lt;strong&gt;showcasing work in-progress&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example usage of Ngrok&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 1&lt;/strong&gt;: Install Ngrok&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# macOS
brew install ngrok

# or download from https://ngrok.com/download
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt;: Start a local server&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m http.server 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt;: Expose the server via Ngrok&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ngrok http 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Forwarding                    https://abcd1234.ngrok.io -&amp;gt; http://localhost:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now access your local server from anywhere using &lt;strong&gt;&lt;a href="https://abcd1234.ngrok.io" rel="noopener noreferrer"&gt;https://abcd1234.ngrok.io&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages of using Ngrok:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Very easy to setup and use.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Supports both HTTP and TCP tunnels.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provides a real-time web UI for inspecting traffic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Secure and encrypted connections.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages of using Ngrok:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The free version has usage limits. (example: 1 tunnel, random subdomains)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Requires signup and token for full functionality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Not open-source.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cloudflared Tunnel
&lt;/h2&gt;

&lt;p&gt;It is a service by Cloudflare that &lt;strong&gt;exposes your local server securely through the Cloudflare network&lt;/strong&gt;, eliminating the need to open firewall ports or configure DNS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example usage of Cloudflared Tunnel&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 1:&lt;/strong&gt; Install Cloudflared&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# macOS
brew install cloudflared

# or download from https://developers.cloudflare.com/cloudflared
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Authenticate with Cloudflare&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cloudflared login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This opens a browser and asks you to select the domain you want to use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Create and run a tunnel&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cloudflared tunnel --url http://localhost:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://random-string.trycloudflare.com -&amp;gt; http://localhost:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now access your local server from anywhere using &lt;strong&gt;&lt;a href="https://random-string.trycloudflare.com" rel="noopener noreferrer"&gt;https://random-string.trycloudflare.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Advantages of using Cloudflared Tunnel:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Free and unlimited usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrates directly with Cloudflare for DNS and security.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uses your own domain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;High reliability via Cloudflare's network.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages of using Cloudflare Tunnel:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Required Cloudflare-managed domain for advanced usage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Setup for persistent tunnels is more involved than Ngrok.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Tunneling tools like Ngrok and Cloudflared Tunnel have become essential in modern development workflows.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use Ngrok for its &lt;strong&gt;simplicity and powerful dev tooling features&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use Cloudflared Tunnel for more &lt;strong&gt;permanent, secure and production-grade tunnels&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are effective - choose based on your specific needs: simplicity or scalability.&lt;/p&gt;

&lt;p&gt;And that's it! This was just a quick overview about the secure tunneling tools like Ngrok and Cloudflared Tunnel.&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn :- &lt;a href="https://www.linkedin.com/in/aryandev-shourie-175025229/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do check out my GitHub for amazing projects :- &lt;a href="https://github.com/Aryan2727-debug" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ngrok</category>
      <category>cloudflared</category>
      <category>development</category>
    </item>
    <item>
      <title>Understanding JavaScript naming best practices</title>
      <dc:creator>Aryan Dev Shourie</dc:creator>
      <pubDate>Fri, 25 Jul 2025 15:16:18 +0000</pubDate>
      <link>https://dev.to/aryan_shourie/understanding-javascript-naming-best-practices-29i3</link>
      <guid>https://dev.to/aryan_shourie/understanding-javascript-naming-best-practices-29i3</guid>
      <description>&lt;p&gt;JavaScript is one of the most popular programming languages out there. This is because it is the &lt;strong&gt;native language of the web&lt;/strong&gt;. Every browser (Chrome, Safari, Firefox, Edge etc.) has a built-in JavaScript engine. JavaScript has support for different libraries and frameworks like &lt;strong&gt;React, Vue, Angular, jQuery&lt;/strong&gt; etc. It also has a massive ecosystem via &lt;strong&gt;NPM (Node Package Manager)&lt;/strong&gt; — the largest package registry in the world.&lt;/p&gt;

&lt;p&gt;Due to the high popularity of JavaScript, its natural that it is the primary tech stack of the majority of software applications available in the market. Thus, it is essential for developers using JavaScript to create and maintain applications to follow &lt;strong&gt;best practices and coding guidelines&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;One of the essential guidelines which is often overlooked is the &lt;strong&gt;JavaScript naming conventions&lt;/strong&gt;. Following are the reasons why following JavaScript naming best practices is essential:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Improves code readability&lt;/strong&gt;: Clear, descriptive names make it easier to understand what a variable, function, or class does.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enables team collaboration&lt;/strong&gt;: Consistent naming helps teams work together more efficiently. Everyone knows what to expect when reading or reviewing code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Makes maintenance easier&lt;/strong&gt;: The code written months or years ago becomes easier to revisit and modify.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduces bugs&lt;/strong&gt;: Ambiguous or inconsistent names can lead to incorrect assumptions and logic errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improves tooling support&lt;/strong&gt;: Many linters, static analyzers, IDEs and AI tools can better assist when naming is consistent.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Core principles of JavaScript naming
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Consistency is key&lt;/strong&gt;&lt;br&gt;
Consistency is the cornerstone of effective naming in JavaScript. Whether you prefer using &lt;strong&gt;camelCase&lt;/strong&gt; or &lt;strong&gt;snake_case&lt;/strong&gt;, the key is to stick with one style throughout the codebase. Here's why it matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Reduces cognitive load for developers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Eases maintenance and refactoring.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Language matters&lt;/strong&gt;&lt;br&gt;
Although JavaScript supports variable names in any language, it is best to stick with &lt;strong&gt;English&lt;/strong&gt;. Doing so offers many advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ensures universal code readability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Facilitates collaboration across global teams.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The case for different cases&lt;/strong&gt;&lt;br&gt;
JavaScript follows different naming conventions based on context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;camelCase&lt;/strong&gt; for variables, functions and methods.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PascalCase&lt;/strong&gt; for classes and constructor functions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;UPPER_SNAKE_CASE&lt;/strong&gt; for constants.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;kebab-case&lt;/strong&gt; for CSS classes and HTML attributes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Practical naming guidelines
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Variables and Functions&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Boolean variables&lt;/strong&gt;: The name of a boolean variable should start with an &lt;strong&gt;affirmative prefix&lt;/strong&gt;, typically 'is' or 'has'. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bad ❌
const visible = false;

Good ✅
const isVisible = false;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Functions and Methods&lt;/strong&gt;: Function names should be verbs that clearly describe their action. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bad ❌
function data(user) {
  // ...
}

Good ✅
function getUserData(user) {
  // ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Arrays and other Collections&lt;/strong&gt;&lt;br&gt;
Always use &lt;strong&gt;plural nouns&lt;/strong&gt; for arrays and other collections. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bad ❌
const bookItemList = ['1984', 'Brave New World', 'Fahrenheit 451'];
const userDataObj = new Map();
const selectedIdSet = new Set();

Good ✅
const books = ['1984', 'Brave New World', 'Fahrenheit 451'];
const userDataMap = new Map();
const selectedIds = new Set();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Classes and Objects&lt;/strong&gt;&lt;br&gt;
Classes should use &lt;strong&gt;PascalCase&lt;/strong&gt; and be &lt;strong&gt;noun phrases&lt;/strong&gt;. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bad ❌
class stringutils {
  static capitalize() {}
}

Good ✅
class StringUtils {
  static capitalize() {}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Constants&lt;/strong&gt;&lt;br&gt;
Always use &lt;strong&gt;UPPER_SNAKE_CASE&lt;/strong&gt; for constants. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bad ❌
const retryAttemps = 3;
const apiUrl = 'https://api.example.com';

Good ✅
const RETRY_ATTEMPTS = 3;
const API_URL = 'https://api.example.com';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Common mistakes to avoid
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Including types in names&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bad ❌
const userArray = ['John', 'Jane'];
const nameString = 'John';

Good ✅
const users = ['John', 'Jane'];
const name = 'John';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Ambiguous Abbreviations&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bad ❌
const usr = getUser();
const pwd = 'secret';

Good ✅
const user = getUser();
const password = 'secret';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tools for maintaining naming conventions
&lt;/h2&gt;

&lt;p&gt;To maintain consistent naming conventions in a JavaScript codebase, a variety of tools can be used. Here are the most widely used tools:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ESLint&lt;/strong&gt;: it is used for linting, checking code quality issues and naming violations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prettier&lt;/strong&gt;: it is used for code formatting, enforcing consistent style and ensuring spacing, quotes, semicolons etc.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Some community recommended coding guidelines
&lt;/h2&gt;

&lt;p&gt;Below are some &lt;strong&gt;community-recommended&lt;/strong&gt; naming convention guidelines and documentation resources you can follow for JavaScript:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Google JavaScript style guide: &lt;a href="https://google.github.io/styleguide/jsguide.html" rel="noopener noreferrer"&gt;https://google.github.io/styleguide/jsguide.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Airbnb JavaScript style guide:
&lt;a href="https://github.com/airbnb/javascript" rel="noopener noreferrer"&gt;https://github.com/airbnb/javascript&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MDN Web Docs (Mozilla Developer Network):
&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And that's it! This was just a quick overview about the basic JavaScript naming best practices.&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn :- &lt;a href="https://www.linkedin.com/in/aryandev-shourie-175025229/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do check out my GitHub for amazing projects :- &lt;a href="https://github.com/Aryan2727-debug" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>development</category>
    </item>
    <item>
      <title>The SCP Command and how to use it💻</title>
      <dc:creator>Aryan Dev Shourie</dc:creator>
      <pubDate>Fri, 11 Jul 2025 20:22:05 +0000</pubDate>
      <link>https://dev.to/aryan_shourie/the-scp-command-and-how-to-use-it-3b9m</link>
      <guid>https://dev.to/aryan_shourie/the-scp-command-and-how-to-use-it-3b9m</guid>
      <description>&lt;p&gt;Recently at work, I had a task of developing and deploying an internal tool/application which basically lets us test certain playback stream URLs (&lt;strong&gt;DASH, HLS&lt;/strong&gt; etc.) on Smart TVs using &lt;strong&gt;ShakaPlayer with Widevine DRM encryption&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So this application was deployed on one of our &lt;strong&gt;internal remote servers&lt;/strong&gt;. There are a couple of other applications as well which are deployed on that remote server, but they had a simpler &lt;strong&gt;single-click deployment&lt;/strong&gt; (pretty convenient 🙂).&lt;/p&gt;

&lt;p&gt;As for this particular application, we had to &lt;strong&gt;deploy it manually&lt;/strong&gt; by &lt;strong&gt;transferring the files from our local machine to the remote server&lt;/strong&gt; (actually better because I got to learn something new 🤓).&lt;/p&gt;

&lt;p&gt;The reason I shared the above story with you is that due to the above task, I got introduced to the &lt;strong&gt;SCP command in the Windows Command Line&lt;/strong&gt;. Now I know that it may be a basic command for most of the experienced developers out there, but for me it was a new learning and I thought it would be nice sharing about it here and elaborating about how it is used.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;SCP stands for &lt;strong&gt;Secure Copy Protocol&lt;/strong&gt;. As the name pretty much suggests it is a command which is used to &lt;strong&gt;transfer directories/folders and files&lt;/strong&gt; between 2 systems/locations using the &lt;strong&gt;SSH protocol&lt;/strong&gt;. Now you may think that we already have the &lt;strong&gt;cp (copy)&lt;/strong&gt; command for copying contents between locations 🤔, then what does SCP bring to the table ? The main advantage of SCP is that it ensures the &lt;strong&gt;data is encrypted&lt;/strong&gt; 🔗⛓️ during the transfer.&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%2Foo94ijkbkhol7x14gapn.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%2Foo94ijkbkhol7x14gapn.png" alt="File transfer" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Different use cases of SCP command
&lt;/h2&gt;

&lt;p&gt;There are multiple use cases of the SCP command, these include :-&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Copy/Transfer files from your &lt;strong&gt;local machine to a remote server&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Copy/Transfer files from a &lt;strong&gt;remote server to your local machine&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Copy/Transfer files &lt;strong&gt;between 2 remote servers&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Basic syntax of using the SCP command
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scp [options] source-location destination-location
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example 1&lt;/strong&gt; =&amp;gt; You want to copy a file 'myFile.txt' &lt;strong&gt;present on your local machine to a remote server&lt;/strong&gt;, you can execute the command like this :-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scp myFile.txt username@remote_server_host:/path/to/destination
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will copy myFile.txt to the specified destination in the remote server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example 2&lt;/strong&gt; =&amp;gt; You want copy a file 'myFile.txt' &lt;strong&gt;present on your remote server to your local machine&lt;/strong&gt;, you can execute the command like this :-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scp username@remote_server_host:/path/to/myFile.txt /local_machine/destination
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will copy myFile.txt to the specified destination on your local machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example 3&lt;/strong&gt; =&amp;gt; You want to copy a file 'myFile.txt' present on one remote server to another remote server, you can execute the command like this :-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scp username@remote_server_host1:/path/to/myFile.txt username@remote_server_host2:/path/to/destination
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will copy myFile.txt from remote_server_host1 to the specified destination in remote_server_host2.&lt;/p&gt;

&lt;h2&gt;
  
  
  Different options which can be used with the SCP command
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;-r&lt;/strong&gt; =&amp;gt; used to recursively copy entire folders/directories&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-v&lt;/strong&gt; =&amp;gt; used to switch to verbose mode i.e. while copying it will show the progress and debug information&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;-C&lt;/strong&gt; =&amp;gt; used to compress the data during copy/transfer&lt;/li&gt;
&lt;li&gt;-q =&amp;gt; used to switch to quite mode i.e. while copying it will not show any progress or error messages.&lt;/li&gt;
&lt;/ol&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%2Fyzajvx0won5vs9lgobrg.jpg" 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%2Fyzajvx0won5vs9lgobrg.jpg" alt="SCP" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Important points to consider regarding SCP command
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;SCP primarily operates over &lt;strong&gt;SSH&lt;/strong&gt;, so you will need to have &lt;strong&gt;SSH access to the target remote server&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Before using the SCP command, ensure that the remote server has &lt;strong&gt;SSH enabled&lt;/strong&gt; and you also have &lt;strong&gt;appropriate permissions&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And that's it! This was just a quick overview about the basics of the SCP command, how and when to use it and more.&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn :- &lt;a href="https://www.linkedin.com/in/aryandev-shourie-175025229/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do check out my GitHub for amazing projects :- &lt;a href="https://github.com/Aryan2727-debug" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>linux</category>
      <category>cli</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Useful JavaScript tips and tricks that you may not be aware of 💻👨‍💻</title>
      <dc:creator>Aryan Dev Shourie</dc:creator>
      <pubDate>Sat, 21 Dec 2024 08:48:02 +0000</pubDate>
      <link>https://dev.to/aryan_shourie/useful-javascript-tips-and-tricks-that-you-may-not-be-aware-of-32af</link>
      <guid>https://dev.to/aryan_shourie/useful-javascript-tips-and-tricks-that-you-may-not-be-aware-of-32af</guid>
      <description>&lt;p&gt;JavaScript is a widely used &lt;strong&gt;web programming language&lt;/strong&gt;. If you are looking to start a career in Software Engineering, then chances are that you will encounter the concepts of JavaScript. &lt;/p&gt;

&lt;p&gt;JavaScript is unarguably the most popular programming language in the realm of web development. While it has its own &lt;strong&gt;caveats and tricky/confusing concepts&lt;/strong&gt;, learning and using JavaScript is almost necessary if you want to progress in your web development career.&lt;/p&gt;

&lt;p&gt;In this blog post, I will list down some useful JavaScript &lt;strong&gt;tips and tricks&lt;/strong&gt; to help you out in challenging situations while using this language.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automatic Semicolon Injection (ASI) in JavaScript
&lt;/h2&gt;

&lt;p&gt;Some languages like &lt;strong&gt;C#, C++ and Java&lt;/strong&gt; are very &lt;strong&gt;strict about ending each line with a semicolon&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;JavaScript also uses semicolons to &lt;strong&gt;indicate the end of a line&lt;/strong&gt;, but using the semicolon in JavaScript is actually &lt;strong&gt;optional&lt;/strong&gt;. By optional, it means that JavaScript will apply a set of &lt;strong&gt;complex rules to work out whether a semicolon should have gone there or not&lt;/strong&gt;. This is known as &lt;strong&gt;Automatic Semicolon Injection&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function returnSomething()
{
  return
    {
      name: 'JavaScript Expert'
      contactMethod: 'Shine batsign at sky'
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now upon first glance, you might think that logging this function call will show this particular object. But, if we call this function, we actually get &lt;strong&gt;undefined&lt;/strong&gt; as the output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explanation&lt;/strong&gt;: Because the &lt;strong&gt;opening bracket doesn’t occur on the same line as the return&lt;/strong&gt;, ASI puts &lt;strong&gt;one semicolon in there&lt;/strong&gt; for us. So, as far as JavaScript is concerned, our code actually looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function returnSomething()
{
  return ; // &amp;lt;-- semicolon inserted by ASI, remainder of function not evaluated.
    {
      name: 'JavaScript Expert'
      contactMethod: 'Shine batsign at sky'
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the process of ASI. To avoid such scenarios, we should carefully look the placement of braces and other syntax.&lt;/p&gt;

&lt;h2&gt;
  
  
  Non-sequential Array keys and indexes
&lt;/h2&gt;

&lt;p&gt;Let’s imagine we have a simple array, we know we can &lt;strong&gt;pop, push, append&lt;/strong&gt;, and do whatever we like with arrays. But we also know that JavaScript, like other languages, lets us &lt;strong&gt;access array elements by index&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;However, what’s unusual about JavaScript is that you can also &lt;strong&gt;set&lt;/strong&gt; elements by array index when the &lt;strong&gt;array isn’t even up to that index just yet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var arr = [];
arr[0] = 1;
arr[1] = 2;
arr[100] = 100;
console.log(arr);
console.log('The length of the array is ' + arr.length);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ 1, 2, &amp;lt;98 empty items&amp;gt;, 100 ]
The length of the array is 101
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Finding the OS type using JavaScript
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;window.navigator&lt;/strong&gt; object contains &lt;strong&gt;information about the visitor's browser OS details&lt;/strong&gt;. Some of the OS properties are available under the &lt;strong&gt;platform property&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can use the below snippet to get the OS type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log(navigator.platform);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Win32 (for Windows)
MacIntel (for modern macOS)
Linux x86_64 (64-bit Linux systems)
WebOS (for LG Smart TVs)
Linux (for Samsung Smart TVs)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to detect whether a mobile browser is being used for browsing
&lt;/h2&gt;

&lt;p&gt;You can &lt;strong&gt;detect mobile browsers&lt;/strong&gt; by simply running through a list of devices and checking if the &lt;strong&gt;userAgent&lt;/strong&gt; matches anything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function detectMobileBrowser() {
  if (
    navigator.userAgent.match(/Android/i) ||
    navigator.userAgent.match(/webOS/i) ||
    navigator.userAgent.match(/iPhone/i) ||
    navigator.userAgent.match(/iPad/i) ||
    navigator.userAgent.match(/iPod/i) ||
    navigator.userAgent.match(/BlackBerry/i) ||
    navigator.userAgent.match(/Windows Phone/i)
  ) {
    return true;
  } else {
    return false;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Apply CSS styles and colors on JS console messages
&lt;/h2&gt;

&lt;p&gt;You can apply CSS styles and colors on the console messages using certain syntax. This can be very useful in differentiating certain messages from others.&lt;/p&gt;

&lt;p&gt;Code example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log(
        "%cStop!",
        "color:red;font-family:system-ui;font-size:4rem;-webkit-text-stroke: 1px black;font-weight:bold"
      );
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&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%2F710czxuixq2tfpr6f8u4.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%2F710czxuixq2tfpr6f8u4.PNG" alt="Console CSS Output" width="471" height="94"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that's it! These are just a few of lesser known JavaScript tips and tricks which might come in handy for you in the future.&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn :- &lt;a href="https://www.linkedin.com/in/aryandev-shourie-175025229/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do check out my GitHub for amazing projects :- &lt;a href="https://github.com/Aryan2727-debug" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;View my Personal Portfolio :- &lt;a href="https://aryan-s-portfolio.vercel.app/" rel="noopener noreferrer"&gt;Aryan's Portfolio&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The JavaScript History API</title>
      <dc:creator>Aryan Dev Shourie</dc:creator>
      <pubDate>Fri, 20 Dec 2024 15:08:47 +0000</pubDate>
      <link>https://dev.to/aryan_shourie/the-javascript-history-api-2e0d</link>
      <guid>https://dev.to/aryan_shourie/the-javascript-history-api-2e0d</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;JavaScript History API&lt;/strong&gt; is a part of the &lt;strong&gt;Web API&lt;/strong&gt; that allows us to interact with the &lt;strong&gt;browser's session history&lt;/strong&gt;. It provides methods and properties to &lt;strong&gt;navigate, manipulate and control the history stack&lt;/strong&gt;, enabling developers to create more dynamic and interactive user experiences without requiring full page reloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key features of the JavaScript History API
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;history.back()&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;history.forward()&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;history.go(n)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;history.pushState()&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;history.replaceState()&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The history.back() method
&lt;/h2&gt;

&lt;p&gt;This method moves the browser to the &lt;strong&gt;previous page in the session history&lt;/strong&gt;, equivalent to the browser's back button. This will only work if a previous page exists in the browser's history stack.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;h1&amp;gt;The Window History Object&amp;lt;/h1&amp;gt;
&amp;lt;h2&amp;gt;The history.back() Method&amp;lt;/h2&amp;gt;

&amp;lt;button onclick="history.back()"&amp;gt;Go Back&amp;lt;/button&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&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%2Fz2w8zpms76z51cnmawk7.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%2Fz2w8zpms76z51cnmawk7.PNG" alt="First Output" width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicking on the "Go Back" button will take the user to the previous page if it exists in the history stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  The history.forward() method
&lt;/h2&gt;

&lt;p&gt;This method moves the browser to the &lt;strong&gt;next page in the session history&lt;/strong&gt;, equivalent to the browser's forward button. This will only work if a next page exists in the browser's history stack.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;h1&amp;gt;The Window History Object&amp;lt;/h1&amp;gt;
&amp;lt;h2&amp;gt;The history.forward Method&amp;lt;/h2&amp;gt;

&amp;lt;button onclick="history.forward()"&amp;gt;Go Forward&amp;lt;/button&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;Output:&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%2F5enjn3enexght38lyna2.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%2F5enjn3enexght38lyna2.PNG" alt="Second Output" width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicking on the "Go Forward" button will take the user to the next page if it exists in the history stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  The history.go() method
&lt;/h2&gt;

&lt;p&gt;This method is used to &lt;strong&gt;navigate to a specific point in the browser stack&lt;/strong&gt;. It takes an &lt;strong&gt;argument 'n'&lt;/strong&gt;, which specifies the number of the page we want to navigate to through the history stack.&lt;/p&gt;

&lt;p&gt;The argument 'n' can accept the following values:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Positive 'n'&lt;/strong&gt; takes user &lt;strong&gt;forward&lt;/strong&gt; in the stack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Negative 'n'&lt;/strong&gt; takes user &lt;strong&gt;backward&lt;/strong&gt; in the stack.&lt;/li&gt;
&lt;li&gt;If 'n' has value &lt;strong&gt;0&lt;/strong&gt;, it &lt;strong&gt;reloads&lt;/strong&gt; the current page.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The history.pushState() method
&lt;/h2&gt;

&lt;p&gt;This method is used to &lt;strong&gt;add a new entry in the current session's history stack&lt;/strong&gt; i.e. the collection of all the pages visited in the current browser tab.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
We will create a &lt;strong&gt;button element&lt;/strong&gt; and assign it a &lt;strong&gt;click handler&lt;/strong&gt;. Inside the handler, we call the &lt;strong&gt;pushState()&lt;/strong&gt; method. This &lt;strong&gt;adds a new entry with a different URL&lt;/strong&gt; than the one of the current page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// HTML -&amp;gt;
&amp;lt;button&amp;gt;Call pushState()&amp;lt;/button&amp;gt;

// JavaScript -&amp;gt;
var button = document.querySelector('button');
button.onClick = function() {
    history.pushState(null, ' ', 'some-page');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&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%2Fz7px9ei16lazrwjgqqtp.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%2Fz7px9ei16lazrwjgqqtp.png" alt="Third Output" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Currently, the URL is - &lt;strong&gt;&lt;a href="https://www.codeguage.com/courses/js/examples/pushstate" rel="noopener noreferrer"&gt;https://www.codeguage.com/courses/js/examples/pushstate&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you will click on the button, the URL will change to - &lt;strong&gt;&lt;a href="https://www.codeguage.com/courses/js/examples/some-page" rel="noopener noreferrer"&gt;https://www.codeguage.com/courses/js/examples/some-page&lt;/a&gt;&lt;/strong&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%2Fapetf6cr203wje3jspcm.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%2Fapetf6cr203wje3jspcm.png" alt="Fourth Output" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This confirms that a &lt;strong&gt;new entry has been added to the current session's history&lt;/strong&gt;, also &lt;strong&gt;changing the URL in the browser's address bar&lt;/strong&gt;. You can also see that the browser's &lt;strong&gt;back-arrow is also active now in the top-left corner&lt;/strong&gt;, clicking on which will take you back to - &lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.codeguage.com/courses/js/examples/pushstate" rel="noopener noreferrer"&gt;https://www.codeguage.com/courses/js/examples/pushstate&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One extremely important thing to know is that &lt;strong&gt;pushState() changes the URL without ever checking whether it even actually exists or not&lt;/strong&gt;. This is because the purpose of pushState() is not to load a webpage, but rather to &lt;strong&gt;just add a new entry to the history&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The history.replaceState() method
&lt;/h2&gt;

&lt;p&gt;This method &lt;strong&gt;replaces the current entry in the current session's history stack with a new entry&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
As before, we have a &lt;strong&gt;button with a click handler&lt;/strong&gt; set. But this time, inside the handler, we call &lt;strong&gt;replaceState()&lt;/strong&gt; to replace current history entry with a new one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// HTML =&amp;gt;
&amp;lt;button&amp;gt;Call replaceState()&amp;lt;/button&amp;gt;

// JavaScript =&amp;gt;
var button = document.querySelector('button');

button.onclick = function() {
   history.replaceState(null, '', 'some-page');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&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%2Frpxtn4vdwg9n749viyhz.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%2Frpxtn4vdwg9n749viyhz.png" alt="Fifth Output" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The current URL is - &lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.codeguage.com/courses/js/examples/replacestate" rel="noopener noreferrer"&gt;https://www.codeguage.com/courses/js/examples/replacestate&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you click the button, the URL will change to - &lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.codeguage.com/courses/js/examples/some-page" rel="noopener noreferrer"&gt;https://www.codeguage.com/courses/js/examples/some-page&lt;/a&gt;&lt;/strong&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%2F1n0zegzpkgjf82xj8gfa.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%2F1n0zegzpkgjf82xj8gfa.png" alt="Sixth Output" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;browser URL has been replaced&lt;/strong&gt;, and you can notice that the &lt;strong&gt;back-arrow key on the top left corner is NOT active&lt;/strong&gt;, confirming that a &lt;strong&gt;new entry has NOT been added to the history stack&lt;/strong&gt;, we have just &lt;strong&gt;replaced the current entry with a new one&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that's it! You have successfully learnt about the JavaScript History API, and how to use and incorporate its different utilities in your applications.&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn :- &lt;a href="https://www.linkedin.com/in/aryandev-shourie-175025229/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do check out my GitHub for amazing projects :- &lt;a href="https://github.com/Aryan2727-debug" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;View my Personal Portfolio :- &lt;a href="https://aryan-s-portfolio.vercel.app/" rel="noopener noreferrer"&gt;Aryan's Portfolio&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Introduction to HTML Web Components 💻📝</title>
      <dc:creator>Aryan Dev Shourie</dc:creator>
      <pubDate>Sun, 18 Feb 2024 15:26:07 +0000</pubDate>
      <link>https://dev.to/aryan_shourie/introduction-to-html-web-components-3ijm</link>
      <guid>https://dev.to/aryan_shourie/introduction-to-html-web-components-3ijm</guid>
      <description>&lt;p&gt;The HTML Web Components are &lt;strong&gt;reusable, custom HTML elements&lt;/strong&gt; which you can define and create yourselves, and can be used anywhere within your HTML code. &lt;/p&gt;

&lt;p&gt;As web developers, we know that creating a template and reusing that wherever possible is a good programming approach. This problem was solved by JavaScript UI libraries like &lt;strong&gt;&lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React&lt;/a&gt;&lt;/strong&gt;. But, in some use cases, adopting to React or other JavaScript libraries is not the requirement, and using plain HTML can accomplish this task now as well.&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%2Fmxq1ivw1asaq4r51hloy.jpg" 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%2Fmxq1ivw1asaq4r51hloy.jpg" alt="HTML logo" width="736" height="736"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In 2024, the Browser support for Web Components is very enhanced. In this article, I will describe the basics of Web Components and demonstrate creating a basic Web Component as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Web Component?
&lt;/h2&gt;

&lt;p&gt;A Web Component is a custom HTML element that you can define with your &lt;strong&gt;own tag name&lt;/strong&gt;. It is a reusable piece of code, which can be created and incorporated easily within your HTML application.&lt;br&gt;
It is basically a set of &lt;strong&gt;JavaScript APIs&lt;/strong&gt; that allow you to define custom elements and behavior, which can then be used as desired in your UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basics of Web Components&lt;/strong&gt;&lt;br&gt;
To create a Web Component, you must first define a &lt;strong&gt;&lt;a href="https://babeljs.io/docs/learn" rel="noopener noreferrer"&gt;ES2015&lt;/a&gt;&lt;/strong&gt; Class to control the element. The class can be named anything, but it is advisable to &lt;strong&gt;name the Class similar to the purpose you are creating the component for&lt;/strong&gt;. For example, if you are creating a &lt;strong&gt;Footer component&lt;/strong&gt;, you should name your Class as "&lt;strong&gt;Footer&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;The class that you create must extend from the &lt;strong&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement" rel="noopener noreferrer"&gt;HTMLElement interface&lt;/a&gt;&lt;/strong&gt;. After doing this, you need to register your component with the browser by executing &lt;strong&gt;customElements.define&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can refer below to see the basic structure of the Web Component -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class MyComponent extends HTMLElement {
    // component implementation code written here
}

customElements.define('my-component', MyComponent);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An important part to note is, there is a &lt;strong&gt;hyphen&lt;/strong&gt; in the name "&lt;strong&gt;my-component&lt;/strong&gt;". This hyphen is required in the specification so that we can differentiate the custom Web Components from the standard HTML elements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lifecycle Callbacks of the Web Components
&lt;/h2&gt;

&lt;p&gt;The HTML Web Components have some &lt;strong&gt;Lifecycle Callback methods&lt;/strong&gt; which are executed when the Browser calls the different parts of the component's lifecycle. These methods are - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;connectedCallback&lt;/strong&gt;: this method is executed when the component is first &lt;strong&gt;mounted/loaded onto the DOM&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;disconnectedCallback&lt;/strong&gt;: this method is executed when the component is &lt;strong&gt;unmounted/removed from the DOM&lt;/strong&gt;.&lt;/p&gt;&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%2Fuploads%2Farticles%2Fjnl76edbriywguq8382n.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%2Fjnl76edbriywguq8382n.png" alt="Web Components as tech" width="571" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To create the Web Component, initialize the component class and execute the call to &lt;strong&gt;customElements.define&lt;/strong&gt; method -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// creating a class for the component by extending from the HTMLElement class
class CurrentDate extends HTMLElement {
    constructor() {
        super();
    }

    // calling the connectedCallback() lifecycle method of web components
    // it is executed when the components first mounts/loads on the page
    connectedCallback() {
        const date = new Date();

        this.textContent = date.toLocaleDateString();
    }
}

// registering the component to the CustomElement Registry
// the name of the custom component should always include a hyphen(-)
// this distinguishes it from the other official HTML elements
customElements.define('current-date', CurrentDate);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since you are extending from the &lt;strong&gt;HTMLElement&lt;/strong&gt; class, you have access to the &lt;strong&gt;textContent&lt;/strong&gt; method, which is being used here to display the current date.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use the Web Component?
&lt;/h2&gt;

&lt;p&gt;To use your custom Web Component, you can simply import it using the &lt;strong&gt;script tag&lt;/strong&gt; in your HTML file -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script src="./current-date.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To use it in your HTML file, you can simply render the component within the HTML tags -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h2&amp;gt;Today's date is - &amp;lt;/h2&amp;gt;
&amp;lt;current-date&amp;gt;&amp;lt;/current-date&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To summarize, your full HTML file will look like this -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;Web Components tutorial&amp;lt;/title&amp;gt;
    &amp;lt;script src="./current-date.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;Introduction to Web Components&amp;lt;/h1&amp;gt;

    &amp;lt;h2&amp;gt;Today's date is - &amp;lt;/h2&amp;gt;
    &amp;lt;current-date&amp;gt;&amp;lt;/current-date&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see this output on your browser - &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%2Fen5vre2b1mqgg7zch7kv.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%2Fen5vre2b1mqgg7zch7kv.PNG" alt="output" width="614" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the most important benefits of using the HTML Web Components is that they are &lt;strong&gt;not dependent on any third-party libraries&lt;/strong&gt;, so using them won't have any side-effects and they won't have a significant effect on your bundle size.&lt;/p&gt;

&lt;p&gt;And that's it! You have successfully learnt about Web Components and how to incorporate them within your project.&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn :- &lt;a href="https://www.linkedin.com/in/aryandev-shourie-175025229/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do check out my GitHub for amazing projects :- &lt;a href="https://github.com/Aryan2727-debug" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;View my Personal Portfolio :- &lt;a href="https://aryan-s-portfolio.vercel.app/" rel="noopener noreferrer"&gt;Aryan's Portfolio&lt;/a&gt; &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>html</category>
      <category>beginners</category>
    </item>
    <item>
      <title>What is Linting and how to use a Linter tool💻</title>
      <dc:creator>Aryan Dev Shourie</dc:creator>
      <pubDate>Wed, 08 Nov 2023 18:31:18 +0000</pubDate>
      <link>https://dev.to/aryan_shourie/what-is-linting-and-how-to-use-a-linter-tool-524l</link>
      <guid>https://dev.to/aryan_shourie/what-is-linting-and-how-to-use-a-linter-tool-524l</guid>
      <description>&lt;h2&gt;
  
  
  What is Linting?
&lt;/h2&gt;

&lt;p&gt;Linting is defined as the &lt;strong&gt;automated checking&lt;/strong&gt; of your source code for &lt;strong&gt;programmatic&lt;/strong&gt; and &lt;strong&gt;stylistic&lt;/strong&gt; errors. It is the process of performing &lt;strong&gt;static analysis&lt;/strong&gt; on the source code to flag patterns that might cause errors or other problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  What can Linting do?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Linting can &lt;strong&gt;detect errors&lt;/strong&gt; in code and detect the errors that can lead to &lt;strong&gt;security vulnerabilities&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linting can detect &lt;strong&gt;formatting or styling issues&lt;/strong&gt; and makes the code more &lt;strong&gt;readable and optimized&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Linting makes &lt;strong&gt;maintaining the code&lt;/strong&gt; much more easier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Overall, Linting increases the &lt;strong&gt;quality of the code&lt;/strong&gt;.&lt;/p&gt;&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%2Fuploads%2Farticles%2Fm2mdenq1bwfos22u8ykh.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%2Fm2mdenq1bwfos22u8ykh.png" alt="linting" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Linters?
&lt;/h2&gt;

&lt;p&gt;The term &lt;strong&gt;"lint"&lt;/strong&gt; was derived from the name of the tiny bits of fiber and fluff shed by clothing, as the command should act like a dryer machine lint trap, detecting small errors with big effects.&lt;/p&gt;

&lt;p&gt;Today, we use the term &lt;strong&gt;"linters"&lt;/strong&gt; for a class of tools that check code for &lt;strong&gt;common bugs&lt;/strong&gt; and &lt;strong&gt;stylistic errors&lt;/strong&gt;. Most linters are &lt;strong&gt;highly configurable&lt;/strong&gt; so they can enforce the standards of your organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why should you use Linters?
&lt;/h2&gt;

&lt;p&gt;There are 2 main reasons to use a Linter - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;To save yourself trouble by avoiding common problems&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;To enforce a common coding style across a team&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everyone makes mistakes when they’re coding. It’s easy to use the &lt;strong&gt;wrong type of bracket&lt;/strong&gt;, &lt;strong&gt;forget a semicolon&lt;/strong&gt;, or &lt;strong&gt;misspell something&lt;/strong&gt;. Checking your code for these types of errors is the kind of thing that computers excel at. Rather than reviewing your code line by line for &lt;strong&gt;common syntax errors&lt;/strong&gt;, you can tell a computer what types of errors to look for.&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%2Fehnm6ltvch7y5dvva00w.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%2Fehnm6ltvch7y5dvva00w.png" alt="robots" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of Linters
&lt;/h2&gt;

&lt;p&gt;There are tons of Linters available out there, choosing the appropriate and most useful ones will depend on your tech-stack. Primarily, for &lt;strong&gt;Front-End Development&lt;/strong&gt; linters are used in three main domains - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CSS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Formatting&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most popular ones are - &lt;strong&gt;ESLint&lt;/strong&gt; for JavaScript, &lt;strong&gt;Prettier&lt;/strong&gt; for Formatting and &lt;strong&gt;Stylelint&lt;/strong&gt; for CSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  ESLint
&lt;/h2&gt;

&lt;p&gt;There have been several popular JavaScript linters over the years, but &lt;strong&gt;ESLint&lt;/strong&gt; is the most popular right now. ESLint places a particular emphasis on &lt;strong&gt;extensibility&lt;/strong&gt;, with a very active community for &lt;strong&gt;plugins&lt;/strong&gt;, &lt;strong&gt;modules&lt;/strong&gt; and &lt;strong&gt;shared configs&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stylelint
&lt;/h2&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%2F9w5l84hk8ld7r6caav7j.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%2F9w5l84hk8ld7r6caav7j.png" alt="stylelint" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
Stylelint is the most popular linter for CSS. It can even be used to &lt;strong&gt;lint CSS in other files&lt;/strong&gt;, like &lt;strong&gt;script&lt;/strong&gt; elements in HTML and &lt;strong&gt;CSS-in-JS&lt;/strong&gt;. It is modeled heavily on ESLint, following the extensible model.&lt;/p&gt;
&lt;h2&gt;
  
  
  Prettier
&lt;/h2&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%2F41f43jzss2tj97w2gbtd.jpg" 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%2F41f43jzss2tj97w2gbtd.jpg" alt="prettier" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
The main focus of Prettier is to take care of &lt;strong&gt;code formatting&lt;/strong&gt; and making the code as readable as possible. Things like &lt;strong&gt;code block indentation&lt;/strong&gt;, &lt;strong&gt;preventing nested ternaries&lt;/strong&gt;, &lt;strong&gt;preventing long code lines&lt;/strong&gt; and &lt;strong&gt;unnecessary semicolons&lt;/strong&gt; are taken care by Prettier. It provides support for many languages like &lt;strong&gt;JavaScript&lt;/strong&gt;, &lt;strong&gt;CSS&lt;/strong&gt;, &lt;strong&gt;HTML&lt;/strong&gt; and &lt;strong&gt;Markdown&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to use a Linter?
&lt;/h2&gt;

&lt;p&gt;There are several options to use a linter, depending on how much control you have over your &lt;strong&gt;development environment&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At the most basic level, you can &lt;strong&gt;install a linter into your editor&lt;/strong&gt;. Most linters have &lt;strong&gt;plugins for VS Code and other editors&lt;/strong&gt;. If you add a &lt;strong&gt;lint config file&lt;/strong&gt; to your project, then anyone with the linter installed in their editor will benefit from the shared set of rules.&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%2F0fdnr6fonkv1g3409y9p.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%2F0fdnr6fonkv1g3409y9p.png" alt="eslint" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Ignoring Linter rules
&lt;/h2&gt;

&lt;p&gt;Most linters will allow you to set up an &lt;strong&gt;"ignore"&lt;/strong&gt; file that tells the linter to not pay attention to certain files. Linters also usually include a &lt;strong&gt;special comment&lt;/strong&gt; you can add to &lt;strong&gt;disable&lt;/strong&gt; the linter rules for the &lt;strong&gt;next line or section of code&lt;/strong&gt;. The comment may look something like this -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* stylelint-disable-next-line declaration-no-important */
display: none !important;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This comment tells Stylelint to &lt;strong&gt;disable the “No !important”&lt;/strong&gt; rule on the next line.&lt;/p&gt;

&lt;p&gt;Connect with me on LinkedIn :- &lt;a href="https://www.linkedin.com/in/aryandev-shourie-175025229/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do check out my GitHub for amazing projects :- &lt;a href="https://github.com/Aryan2727-debug" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;View my Personal Portfolio :- &lt;a href="https://aryan-s-portfolio.vercel.app/" rel="noopener noreferrer"&gt;Aryan's Portfolio&lt;/a&gt; &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>eslint</category>
      <category>programming</category>
    </item>
    <item>
      <title>Tutorial on creating a NextJS Application for beginners</title>
      <dc:creator>Aryan Dev Shourie</dc:creator>
      <pubDate>Fri, 23 Jun 2023 19:23:56 +0000</pubDate>
      <link>https://dev.to/aryan_shourie/tutorial-on-creating-a-nextjs-application-for-beginners-495f</link>
      <guid>https://dev.to/aryan_shourie/tutorial-on-creating-a-nextjs-application-for-beginners-495f</guid>
      <description>&lt;p&gt;NextJS is an &lt;strong&gt;open-source&lt;/strong&gt; web development &lt;strong&gt;framework&lt;/strong&gt; which provides us with extended features of &lt;strong&gt;ReactJS&lt;/strong&gt; and gives us the building blocks to create web applications. In this article, I will explain some important points about NextJS and also build a sample NextJS application from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features of NextJS:
&lt;/h2&gt;

&lt;p&gt;Following are some effective features of NextJS that gives it the edge over other web development technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Page-based Routing system:&lt;/strong&gt; With NextJS, we don't need to install any external package from NPM or YARN to use Routing in our projects (like we install &lt;strong&gt;react-router-dom&lt;/strong&gt; in React). We just create a page in a special folder, and NextJS creates a route for that page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pre-rendering:&lt;/strong&gt; NextJS supports both &lt;strong&gt;Static-Site Generation (SSG)&lt;/strong&gt; and &lt;strong&gt;Server-Side Rendering (SSR)&lt;/strong&gt;. Server-Side Rendering (SSR) prepares the content of a page on a server, while a one-page React application uses &lt;strong&gt;Client-Side Rendering (CSR)&lt;/strong&gt;. The problem with CSR is that it's &lt;strong&gt;not SEO-friendly&lt;/strong&gt; because search engines will not see the page's actual content. Using SSR in NextJS can avoid such issues as a &lt;strong&gt;flickering page&lt;/strong&gt; while data fetching, and our website content will be SEO friendly.&lt;/p&gt;&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%2Fuploads%2Farticles%2Fz1d42n0qzxiu16xfo610.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%2Fz1d42n0qzxiu16xfo610.png" alt="csr+ssr+ssg" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Built-in CSS and Sass support:&lt;/strong&gt; NextJS provides support for any CSS-in-JS library.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code splitting:&lt;/strong&gt; NextJS allows developers to split their application code between 2 different components - &lt;strong&gt;Server Component&lt;/strong&gt; and &lt;strong&gt;Client Component&lt;/strong&gt;. All the Backend related code i.e. A.P.I. handling, Database integration and Data fetching should be written in Server Components whereas all the UI related code should be written in the Client Components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dynamic Components:&lt;/strong&gt; Using NextJS, we can also import JavaScript modules and React components dynamically.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Creating our own NextJS application from scratch
&lt;/h2&gt;

&lt;p&gt;For this tutorial, I am assuming that you have &lt;strong&gt;Node.js&lt;/strong&gt; and &lt;strong&gt;NPM&lt;/strong&gt; installed in your system. If not, you can follow the steps mentioned here - &lt;a href="https://radixweb.com/blog/installing-npm-and-nodejs-on-windows-and-mac" rel="noopener noreferrer"&gt;https://radixweb.com/blog/installing-npm-and-nodejs-on-windows-and-mac&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%2Fuploads%2Farticles%2F7llja0ssewo6ddvnt9qt.gif" 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%2F7llja0ssewo6ddvnt9qt.gif" alt="node and npm" width="1200" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will be using the &lt;strong&gt;Visual Studio Code Editor&lt;/strong&gt; to write and maintain my code. You can use any editor you desire, but if you want to install and configure it, follow the steps mentioned here - &lt;a href="https://code.visualstudio.com/learn/get-started/basics" rel="noopener noreferrer"&gt;https://code.visualstudio.com/learn/get-started/basics&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%2Fuploads%2Farticles%2Frxyw8hkywidyz2pdbivy.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%2Frxyw8hkywidyz2pdbivy.png" alt="vscode" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, lets start with creating our application!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 :&lt;/strong&gt; Creating a NextJS application using &lt;strong&gt;create-next-app&lt;/strong&gt;.&lt;br&gt;
We already know that we can create a ReactJS application using the &lt;strong&gt;create-react-app&lt;/strong&gt; command. Creating a NextJS application is not much different, as we can use the &lt;strong&gt;create-next-app&lt;/strong&gt; command.&lt;/p&gt;

&lt;p&gt;Type in the following command in your terminal :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-next-app blog-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On typing this command, you will be asked multiple questions regarding the setup of your project. Once you answer all the questions, a new NextJS application will be created based on your requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 :&lt;/strong&gt; Opening the application in VS Code and viewing the folder structure.&lt;br&gt;
Go to the folder in which your application is located, right-click anywhere and you will see these options:&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%2Fnarxmqfbowbnfaidyfnm.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%2Fnarxmqfbowbnfaidyfnm.png" alt="git bash" width="234" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Git Bash Here&lt;/strong&gt;. A Git Bash terminal will open, type in the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;code .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your NextJS application will now be opened in V.S. Code. You can now see the folder structure :&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%2Fbtn3rjc86tjxnz96fyjn.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%2Fbtn3rjc86tjxnz96fyjn.PNG" alt="Folder Structure" width="309" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will see the following files and folders present:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;next.config.js:&lt;/strong&gt; It is the configuration file for NextJS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;jsconfig.json:&lt;/strong&gt; It is the configuration file for JavaScript.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;.gitignore:&lt;/strong&gt; It contains the Git files and folders to ignore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;.eslintrc.json:&lt;/strong&gt; It is the configuration file for ESLint.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;src:&lt;/strong&gt; It is the optional application source folder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;app:&lt;/strong&gt; It is the App Router.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;public:&lt;/strong&gt; It contains the static assets to be served.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;layout.js:&lt;/strong&gt; It contains the Common Layout of the application.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;package.json:&lt;/strong&gt; It contains the project dependencies and scripts.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3 :&lt;/strong&gt; Running your NextJS application.&lt;br&gt;
Navigate to your project directory using this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd blog-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run your application using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On your browser, go to &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;&lt;strong&gt;http://localhost:3000&lt;/strong&gt;&lt;/a&gt; to view your application.&lt;br&gt;
This should be the output on your screen:&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%2Fix3du9j6l4msaoxkjhha.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%2Fix3du9j6l4msaoxkjhha.PNG" alt="home" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 :&lt;/strong&gt; Making changes in the application.&lt;br&gt;
Go to &lt;strong&gt;src/app/page.js&lt;/strong&gt;, replace the code present in the file with the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Image from 'next/image'
import styles from './page.module.css'

export default function Home() {
  return (
    &amp;lt;main className={styles.main}&amp;gt;
      &amp;lt;h1&amp;gt;Welcome to your first NextJS Application!&amp;lt;/h1&amp;gt;
    &amp;lt;/main&amp;gt;
  );
};

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

&lt;/div&gt;



&lt;p&gt;You will see the following output on the screen:&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%2Fuezwoxwjjjrq43d532fy.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%2Fuezwoxwjjjrq43d532fy.PNG" alt="output 1" width="800" height="248"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 :&lt;/strong&gt; Making multiple routes for the application.&lt;br&gt;
As said earlier, NextJS supports a &lt;strong&gt;file-based&lt;/strong&gt; routing system. We do not need to install any external package to use routing in our application. &lt;br&gt;
In this step, I will show you how to create 2 routes for our blog &lt;br&gt;
application - &lt;strong&gt;localhost:3000/first-post&lt;/strong&gt; &amp;amp; &lt;strong&gt;localhost:3000/second-post&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to &lt;strong&gt;src/app&lt;/strong&gt;, and create 2 new folders - &lt;strong&gt;first-post&lt;/strong&gt; and &lt;strong&gt;second-post&lt;/strong&gt;. Inside both these folders, create a new file &lt;strong&gt;page.js&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Go to &lt;strong&gt;src/app/first-post/page.js&lt;/strong&gt;, and write the following code in it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"use client"
import Link from "next/link";

function FirstPost(){
    return(
        &amp;lt;&amp;gt;
            &amp;lt;h1 style={{color : "#fff", position : 'absolute', top : '55%', left : '22%'}}&amp;gt;When to Use Static Generation v.s. &amp;lt;br/&amp;gt;Server-side Rendering&amp;lt;/h1&amp;gt;
            &amp;lt;p style={{color : 'lightgray', fontSize : '15px', position : 'absolute', top : '68%', left : '22%'}}&amp;gt;June 19, 2023&amp;lt;/p&amp;gt;

            &amp;lt;p style={{color : "#fff", position : 'absolute', top : '73%', left : '22%', fontSize : '19px'}}&amp;gt;We recommend using &amp;lt;b&amp;gt;Static Generation&amp;lt;/b&amp;gt; (with and without data) whenever &amp;lt;br/&amp;gt;
            possible because your page can be built once and served by CDN, &amp;lt;br/&amp;gt;
            which makes it much faster than having a server render the page on every request.&amp;lt;/p&amp;gt;

            &amp;lt;p style={{color : "#fff", position : 'absolute', top : '87%', left : '22%', fontSize : '19px'}}&amp;gt;You can use Static Generation for many types of pages, including:&amp;lt;/p&amp;gt;

            &amp;lt;ul style={{color : "#fff", position : 'absolute', top : '93%', left : '25%', fontSize : '19px'}}&amp;gt;
                &amp;lt;li&amp;gt;Marketing pages&amp;lt;/li&amp;gt;
                &amp;lt;li&amp;gt;Blog Posts&amp;lt;/li&amp;gt;
                &amp;lt;li&amp;gt;E-commerce product listings&amp;lt;/li&amp;gt;
                &amp;lt;li&amp;gt;Help and documentation&amp;lt;/li&amp;gt;
            &amp;lt;/ul&amp;gt;

            &amp;lt;p style={{color : "#fff", position : 'absolute', top : '110%', left : '22%', fontSize : '19px'}}&amp;gt;You should ask yourself: "Can I pre-render this page &amp;lt;b&amp;gt;ahead&amp;lt;/b&amp;gt; of a user's &amp;lt;br/&amp;gt;
            request?" If the answer is yes, then you should choose Static Generation.&amp;lt;/p&amp;gt;

            &amp;lt;p style={{color : "#fff", position : 'absolute', top : '120%', left : '22%', fontSize : '19px'}}&amp;gt;On the other hand, Static Generation is &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; a good idea if you cannot pre-&amp;lt;br/&amp;gt;
            render a page ahead of a user's request. Maybe your page shows frequently &amp;lt;br/&amp;gt;
            updated data, and the page content changes on every request.&amp;lt;/p&amp;gt;

            &amp;lt;p style={{color : "#fff", position : 'absolute', top : '133%', left : '22%', fontSize : '19px'}}&amp;gt;In that case, you can use &amp;lt;b&amp;gt;Server-Side Rendering&amp;lt;/b&amp;gt;. It will be slower, but the &amp;lt;br/&amp;gt;
            pre-rendered page will always be up-to-date. Or you can skip pre-rendering &amp;lt;br/&amp;gt;
            and use client-side JavaScript to populate data.&amp;lt;/p&amp;gt;

            &amp;lt;Link href="/" style={{color : 'blue', position : 'absolute', top : '147%', left : '22%'}}&amp;gt;← Back to home&amp;lt;/Link&amp;gt;

            &amp;lt;br/&amp;gt;
            &amp;lt;br/&amp;gt;
        &amp;lt;/&amp;gt;
    );
};

export default FirstPost;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On your browser, visit &lt;a href="http://localhost:3000/first-post" rel="noopener noreferrer"&gt;http://localhost:3000/first-post&lt;/a&gt;, and you will see this output:&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%2Frltigq250bvcq3oowdyc.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%2Frltigq250bvcq3oowdyc.PNG" alt="output 2" width="800" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have created your first route &lt;strong&gt;first-post&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;Now, go to &lt;strong&gt;src/app/second-post/page.js&lt;/strong&gt;, and write the following code in it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"use client"
import Link from "next/link";

function SecondPost(){
    return(
        &amp;lt;&amp;gt;
            &amp;lt;h1 style={{color : "#fff", position : 'absolute', top : '55%', left : '22%'}}&amp;gt;Two Forms of Pre-rendering&amp;lt;/h1&amp;gt;
            &amp;lt;p style={{color : 'lightgray', fontSize : '15px', position : 'absolute', top : '62%', left : '22%'}}&amp;gt;April 15, 2023&amp;lt;/p&amp;gt;

            &amp;lt;p style={{color : "#fff", position : 'absolute', top : '67%', left : '22%', fontSize : '19px'}}&amp;gt;Next.js has two forms of pre-rendering: &amp;lt;b&amp;gt;Static Generation&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Server-side &amp;lt;br/&amp;gt;
            Rendering&amp;lt;/b&amp;gt;. The difference is in when it generates the HTML for a page.&amp;lt;/p&amp;gt;

            &amp;lt;ul style={{color : "#fff", position : 'absolute', top : '77%', left : '25%', fontSize : '19px'}}&amp;gt;
                &amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Static Generation&amp;lt;/b&amp;gt; is the pre-rendering method that generates the &amp;lt;br/&amp;gt;
                HTML at &amp;lt;b&amp;gt;build time&amp;lt;/b&amp;gt;. The pre-rendered HTML is then reused on each &amp;lt;br/&amp;gt;
                request.
                &amp;lt;/li&amp;gt;
                &amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Server-side Rendering&amp;lt;/b&amp;gt; is the pre-rendering method that generates the &amp;lt;br/&amp;gt;
                HTML on &amp;lt;b&amp;gt;each request.&amp;lt;/b&amp;gt;&amp;lt;/li&amp;gt;
            &amp;lt;/ul&amp;gt;

            &amp;lt;p style={{color : "#fff", position : 'absolute', top : '97%', left : '22%', fontSize : '19px'}}&amp;gt;Importantly, Next.js lets you &amp;lt;b&amp;gt;choose&amp;lt;/b&amp;gt; which pre-rendering form to use for &amp;lt;br/&amp;gt;
            each page. You can create a "hybrid" Next.js app by using Static Generation &amp;lt;br/&amp;gt;
            for most pages and using Server-side Rendering for others.&amp;lt;/p&amp;gt;

            &amp;lt;Link href="/" style={{color : 'blue', position : 'absolute', top : '110%', left : '22%'}}&amp;gt;← Back to home&amp;lt;/Link&amp;gt;

            &amp;lt;br/&amp;gt;
            &amp;lt;br/&amp;gt;
        &amp;lt;/&amp;gt;
    );
};

export default SecondPost;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On your browser, visit &lt;a href="http://localhost:3000/second-post" rel="noopener noreferrer"&gt;http://localhost:3000/second-post&lt;/a&gt;, and you will see this output:&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%2Fmptehfwsfi2ajs1d07po.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%2Fmptehfwsfi2ajs1d07po.PNG" alt="output 3" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You have created your second route &lt;strong&gt;second-post&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6 :&lt;/strong&gt; Editing the home page.&lt;br&gt;
Go to &lt;strong&gt;src/app/page.js&lt;/strong&gt;, and write the following code in it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Link from "next/link";
import "./page.module.css"

export default function Home() {
  return (
    &amp;lt;main&amp;gt;

      &amp;lt;p style={{color : "#fff", position : 'absolute', top : '67%', left : '30%', fontSize : '20px'}}&amp;gt;Hello World!&amp;lt;/p&amp;gt;


      &amp;lt;h1 style={{color : "#fff", position : 'absolute', top : '83%', left : '30%'}}&amp;gt;Blog&amp;lt;/h1&amp;gt;

      &amp;lt;ul style={{position : 'absolute', top : '91%', left : '30%', fontSize : '21px'}}&amp;gt;
        &amp;lt;li&amp;gt;
            &amp;lt;p style={{color : 'blue'}}&amp;gt;&amp;lt;Link href="/first-post"&amp;gt;When to use Static Generation v.s. Server-Side Rendering&amp;lt;/Link&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;br/&amp;gt;
            &amp;lt;p style={{color : 'lightgray', fontSize : '15px'}}&amp;gt;June 19, 2023&amp;lt;/p&amp;gt;
        &amp;lt;/li&amp;gt;
        &amp;lt;br/&amp;gt;
        &amp;lt;li&amp;gt;
            &amp;lt;p style={{color : 'blue'}}&amp;gt;&amp;lt;Link href="/second-post"&amp;gt;Two forms of Pre-Rendering&amp;lt;/Link&amp;gt;&amp;lt;/p&amp;gt;
            &amp;lt;br/&amp;gt;
            &amp;lt;p style={{color : 'lightgray', fontSize : '15px'}}&amp;gt;April 15, 2023&amp;lt;/p&amp;gt;
        &amp;lt;/li&amp;gt;
      &amp;lt;/ul&amp;gt;
    &amp;lt;/main&amp;gt;
  );
};

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

&lt;/div&gt;



&lt;p&gt;On your browser, visit &lt;a href="http://localhost:3000/" rel="noopener noreferrer"&gt;http://localhost:3000/&lt;/a&gt;, and you will see this output:&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%2Ff9p01lc1lcwzr1s6nico.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%2Ff9p01lc1lcwzr1s6nico.PNG" alt="output 4" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And thats it!! You have successfully created your first NextJS application!&lt;/p&gt;

&lt;p&gt;Now, our next and final step is to deploy it on &lt;strong&gt;Vercel&lt;/strong&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%2Fsvxzbv0bnmn5wthsgpyw.jpg" 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%2Fsvxzbv0bnmn5wthsgpyw.jpg" alt="Vercel" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vercel is an American &lt;strong&gt;cloud platform as a service&lt;/strong&gt; company. It maintains the NextJS web development framework. Its frontend cloud gives developers frameworks, workflows, and infrastructure to build a faster, more personalized web app. We can deploy our NextJS application on Vercel in mere minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 :&lt;/strong&gt; Push your NextJS application code to Github.&lt;br&gt;
Go to &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;https://github.com/&lt;/a&gt; and create a repository named &lt;strong&gt;nextjs-blog&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Open your terminal in V.S. Code, and write the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "Initial Commit"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote add origin https://github.com/&amp;lt;Your Username&amp;gt;/nextjs-blog.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push -u -f origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You have successfully pushed your code to Github!&lt;br&gt;
Your repository now should look like this:&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%2F0pjt0q486pc6sjesanqr.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%2F0pjt0q486pc6sjesanqr.PNG" alt="repo" width="800" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 :&lt;/strong&gt; Create a Vercel Account&lt;br&gt;
First, go to &lt;a href="https://vercel.com/signup" rel="noopener noreferrer"&gt;https://vercel.com/signup?utm_source=next-site&amp;amp;utm_medium=learnpages&amp;amp;utm_campaign=no-campaign&lt;/a&gt; to create a Vercel account. Choose &lt;strong&gt;Continue with GitHub&lt;/strong&gt; and go through the sign up process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 :&lt;/strong&gt; Import your Repository&lt;br&gt;
Once you’re signed up, import your &lt;strong&gt;nextjs-blog&lt;/strong&gt; repository on Vercel. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You’ll need to &lt;strong&gt;Install Vercel for GitHub&lt;/strong&gt;. You can give it access to &lt;strong&gt;All Repositories&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you’ve installed Vercel, import &lt;strong&gt;nextjs-blog&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 4 :&lt;/strong&gt; Deploy your application&lt;br&gt;
You can use &lt;strong&gt;default values&lt;/strong&gt; for the following settings — no need to change anything. Vercel automatically detects that you have a Next.js app and chooses &lt;strong&gt;optimal build settings&lt;/strong&gt; for you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Project Name&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Root Directory&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build Command&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Output Directory&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Development Command&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you deploy, your Next.js app will start building. It should finish in under a minute.&lt;/p&gt;

&lt;p&gt;When it’s done, you’ll get &lt;strong&gt;deployment URLs&lt;/strong&gt;. Click on one of the URLs and you should see the &lt;strong&gt;application starter page live&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is the sample URL of my NextJS application deployed on Vercel - &lt;a href="https://nextjs-technical-blog-website.vercel.app/" rel="noopener noreferrer"&gt;https://nextjs-technical-blog-website.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And thats it! You have successfully learnt how to create and deploy a NextJS application!&lt;/p&gt;

&lt;p&gt;Connect with me on Linkedin :- &lt;a href="https://www.linkedin.com/in/aryandev-shourie-175025229/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do check out my Github for amazing projects:- &lt;a href="https://github.com/Aryan2727-debug" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;View my Personal Portfolio :- &lt;a href="https://personal-portfolio-aryan.netlify.app/" rel="noopener noreferrer"&gt;Aryan's Portfolio&lt;/a&gt; &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
