<?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: Jose Calvario</title>
    <description>The latest articles on DEV Community by Jose Calvario (@joshhortt).</description>
    <link>https://dev.to/joshhortt</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%2F304497%2Fac984633-973a-40b5-8a6b-e763ec9c86b7.jpg</url>
      <title>DEV Community: Jose Calvario</title>
      <link>https://dev.to/joshhortt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joshhortt"/>
    <language>en</language>
    <item>
      <title>The Power of AI in Website Creation: My Site Was Built by a Single Prompt</title>
      <dc:creator>Jose Calvario</dc:creator>
      <pubDate>Tue, 23 May 2023 16:50:02 +0000</pubDate>
      <link>https://dev.to/joshhortt/the-power-of-ai-in-website-creation-my-site-was-built-by-a-single-prompt-4kpn</link>
      <guid>https://dev.to/joshhortt/the-power-of-ai-in-website-creation-my-site-was-built-by-a-single-prompt-4kpn</guid>
      <description>&lt;p&gt;How Mixo is Empowering Anyone to Launch a Startup in Seconds&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In recent years, the world has seen a significant advancement in the field of artificial intelligence (AI). From virtual assistants to self-driving cars, the technology has become more sophisticated and powerful than ever before. However, the latest development in AI has taken the world by surprise – an AI prompt can now build entire websites!&lt;/p&gt;

&lt;p&gt;A recent video posted on YouTube by the popular tech channel &lt;a href="https://youtu.be/Mrs6q1eypmw" rel="noopener noreferrer"&gt;&lt;strong&gt;Matt Wolfe&lt;/strong&gt;&lt;/a&gt; showcases an incredible AI experiment that has the power to revolutionize web development. According to the video, a single AI prompt was used to create the entire website. It is astounding how an AI system can perform complex tasks with only a few lines of input prompts.&lt;/p&gt;

&lt;p&gt;The AI system showcased in the video is based on OpenAI's GPT-3 language model. The model has been trained on a vast amount of text input data, which enables it to generate output that can mimic human language with a high degree of accuracy. The AI program used in the experiment was asked to create a website design with specific parameters such as layout, color scheme, and font styles.&lt;/p&gt;

&lt;p&gt;The result was beyond impressive. The AI system created a well-structured website design with a clear navigation menu, a homepage, and inner pages. The website also featured relevant images and a footer section, making it look like a professionally designed site.&lt;/p&gt;

&lt;p&gt;This development is significant because it demonstrates the tremendous potential of AI in web development. While web designers will still be required for creating custom sites, this technology could significantly speed up the website creation process for businesses that don't require a high degree of customization.&lt;/p&gt;

&lt;p&gt;The speed and accuracy of the AI system in creating a complete website using only a few prompts have opened up endless possibilities in website development. Moreover, it could be a game-changer for entrepreneurs and small business owners who are looking for cost-effective ways to get their business online fast.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="http://Mixo.io" rel="noopener noreferrer"&gt;Mixo.io&lt;/a&gt; - Launch a startup in seconds with AI
&lt;/h2&gt;

&lt;p&gt;Have you ever wondered about starting your own business but were hesitant due to the amount of time, effort, and money it takes to get it off the ground?&lt;/p&gt;

&lt;p&gt;Have you ever wanted to start a website but didn't know where to begin?&lt;/p&gt;

&lt;p&gt;Luckily, there's a tool that can build an entire website and brand for you based off just one prompt. That tool is called Mixo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.mixo.io/" rel="noopener noreferrer"&gt;Mixo&lt;/a&gt; is a web design tool that uses AI to launch start-ups in seconds. All users have to do is type in an idea for their start-up, and Mixo will generate an entire website with logos, images, page copy, testimonials, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The best part?&lt;/strong&gt; Users can get started &lt;strong&gt;for free&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%2Fztlnldfae2st8fegd7go.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%2Fztlnldfae2st8fegd7go.png" alt="1" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Without reading the entire landing page, we dove right in and tried it out for ourselves.&lt;/p&gt;

&lt;p&gt;It says you can launch a startup in seconds with AI and you can get started for free.&lt;/p&gt;

&lt;p&gt;After typing in a random idea, for example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Random Idea:&lt;/strong&gt; "Our startup introduces a cutting-edge mobile application powered by artificial intelligence technology, designed to scour Twitter and identify pertinent inquiries that demand the brand's attention"&lt;/p&gt;
&lt;/blockquote&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%2Fup0r45fkrfn0rqro45pc.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%2Fup0r45fkrfn0rqro45pc.png" alt="2" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note that:&lt;/strong&gt; You don't have to have a name for your company yet you can just come here and describe the idea for a startup in a sentence.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Click Generate Site&lt;/strong&gt; and then watch Mixo working behind the scenes to connect us to AI, it's going to go through all these steps while building our Landing Page.&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%2Fvydsyejjfsnlo3eiyb8l.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%2Fvydsyejjfsnlo3eiyb8l.png" alt="3" width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connecting to AI&lt;/li&gt;
&lt;li&gt;Submitting description&lt;/li&gt;
&lt;li&gt;Generating a Startup name&lt;/li&gt;
&lt;li&gt;Designing a logo&lt;/li&gt;
&lt;li&gt;Collecting site images&lt;/li&gt;
&lt;li&gt;Crafting testimonials&lt;/li&gt;
&lt;li&gt;Writing site copy&lt;/li&gt;
&lt;li&gt;Generating site code&lt;/li&gt;
&lt;li&gt;Adding social sharing&lt;/li&gt;
&lt;li&gt;Improving page performance&lt;/li&gt;
&lt;li&gt;Optimizing SEO&lt;/li&gt;
&lt;li&gt;Enhancing mobile experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In no time at all, we had a fully-functioning website built off of one simple prompt.&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%2Fuwemz4n1nn8myonpjw9x.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%2Fuwemz4n1nn8myonpjw9x.png" alt="4" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To Get Started to Customize your Website:&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%2Fypgzx2zdy3lsiqawnn5s.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%2Fypgzx2zdy3lsiqawnn5s.png" alt="5" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Just Click &lt;strong&gt;Save and Customize&lt;/strong&gt; and register an account with your Google account details or any other E-mail if you prefer.&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%2F05a8ikcddnv5qhm89kcc.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%2F05a8ikcddnv5qhm89kcc.png" alt="6" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Then &lt;strong&gt;Click on Save and Customize your Site...&lt;/strong&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%2Fz16kpte1djl0vy2fzrqk.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%2Fz16kpte1djl0vy2fzrqk.png" alt="7" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The tool comes with a freemium pricing model that allows users to access additional features and remove the Mixo branding from $9 a month. For users who want to launch up to 15 sites, the cost is $39 a month.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click on &lt;strong&gt;continue with just the free plan&lt;/strong&gt; under the pricing plans&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%2Fc8fspn2w5dymt1orq9ls.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%2Fc8fspn2w5dymt1orq9ls.png" alt="8" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But the customization options don't stop there. With Mixo, users can personalize and change everything about their website. They can change the brand name, the site title, and even change out the logo. Users can also play around with the color scheme and add or remove various site features, like the footer for example.&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%2Fnzdldpvfk3x3tvwefwf1.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%2Fnzdldpvfk3x3tvwefwf1.png" alt="9" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you're happy with your site just Scroll up to the top and click on &lt;strong&gt;Publish&lt;/strong&gt;. AI will perform some magic to build the entire site for us.&lt;/p&gt;

&lt;p&gt;When our site is published and ready to go, we can click on the URL, you can see that it's my example site - &lt;strong&gt;IdeatePro&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%2F678si2pf0xjrq2cbqcsh.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%2F678si2pf0xjrq2cbqcsh.png" alt="10" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It has my text and opt-in form, as well as our feature list. All of this was designed for us, and the only thing we typed in was a random idea.&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%2Fhnjq1k7v83dp75u863ya.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%2Fhnjq1k7v83dp75u863ya.png" alt="11" width="800" height="1932"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to see if your idea has a market? Mixo is the perfect validation tool. Simply plug in your idea, create a quick landing page, and drive traffic to it. If people start opting in and joining waitlists, then you have successfully validated your product. This is especially useful for entrepreneurs who are looking to validate a concept for any sort of software or service they want to offer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Takeaways
&lt;/h3&gt;

&lt;p&gt;All in all, Mixo is a fantastic tool for anyone looking to create a website quickly and easily. It's AI capabilities and customization options make it a valuable tool for entrepreneurs and small businesses alike. So why not give it a try and see what it can do for you?&lt;/p&gt;

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

&lt;p&gt;The AI system that created an entire website with only a few prompts is an extraordinary achievement in the field of AI and web development. The potential impact of this technology on businesses and entrepreneurs alike is huge. It is an efficient and cost-effective way to create a website while freeing up resources that can be allocated elsewhere in the business. As we continue to move toward an era of increasing reliance on automation and AI, it is incredible to see how technology can transform traditional practices to make them more efficient and accessible to all.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>startup</category>
      <category>ideation</category>
      <category>websitebuilder</category>
    </item>
    <item>
      <title>How to Enable Editor Branching with Cloudcannon Projects</title>
      <dc:creator>Jose Calvario</dc:creator>
      <pubDate>Sat, 06 May 2023 10:40:12 +0000</pubDate>
      <link>https://dev.to/joshhortt/how-to-enable-editor-branching-with-cloudcannon-projects-28l5</link>
      <guid>https://dev.to/joshhortt/how-to-enable-editor-branching-with-cloudcannon-projects-28l5</guid>
      <description>&lt;p&gt;Are you looking to make changes to your &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; project but don't want them to affect your production site just yet? One solution is to create a branch where you can preview and share these changes before merging them into your main project.&lt;/p&gt;

&lt;p&gt;Projects allow you to gather together many sites from the same repository. You may create a primary branch that editors can use to branch out their own sites and merge them back in later.&lt;/p&gt;

&lt;p&gt;While we're currently utilizing the sites feature on GitHub Space for our sole site, we need to take things up a notch by creating a dedicated project for our site to live under.&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%2F1aqic6z2orlsu2h82bqd.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%2F1aqic6z2orlsu2h82bqd.png" alt="1" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hands on Lab
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Effort&lt;/strong&gt;: 30 mins&lt;/p&gt;

&lt;p&gt;This guide will walk through the steps required to get your Next.js site you previously built up and running with a branching workflow for content editing, allowing you to stage and publish new updates on a separate branch site and approve changes before merging into GitHub.&lt;/p&gt;

&lt;h3&gt;
  
  
  Objectives
&lt;/h3&gt;

&lt;p&gt;After completing this reading, you will be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; project&lt;/li&gt;
&lt;li&gt;Add a new site to enable branching workflows for content editing&lt;/li&gt;
&lt;li&gt;Stage and publish new content updates on a new branch site&lt;/li&gt;
&lt;li&gt;Approve changes before merging into GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;If you intend to run this lab on your system, please ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Internet connection&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; account.&lt;/li&gt;
&lt;li&gt;The latest version of &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; is installed on your machine.&lt;/li&gt;
&lt;li&gt;The cloned &lt;a href="https://github.com/Joshhortt/demo-website-starter" rel="noopener noreferrer"&gt;demo website starter&lt;/a&gt; deployed to &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; already up and running.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is a follow-up tutorial, it does require you to have created the previous Hands-on-Lab´s, (part 1 &amp;amp; part 2) as covered in the articles &lt;a href="https://creativelightbox.net/how-to-deploy-jamstack-sites-to-cloudcannon" rel="noopener noreferrer"&gt;How to deploy Jamstack sites to cloudcannon&lt;/a&gt; and &lt;a href="https://creativelightbox.net/how-to-configure-cloudcannon-collections-to-enable-post-page-content-editing" rel="noopener noreferrer"&gt;How to Configure cloudcannon collections to enable Post &amp;amp; Page content editing?&lt;/a&gt; to make the most out of it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Let's get started!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a new cloudcannon project
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; To kick things off, simply click &lt;strong&gt;Create Your First Project&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%2Fmzfi0tc3wa0a4z184pqz.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%2Fmzfi0tc3wa0a4z184pqz.png" alt="2" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will name this &lt;strong&gt;GitHub Space&lt;/strong&gt; as my &lt;strong&gt;Project name&lt;/strong&gt;. We now have more set up options available, such as selecting a &lt;strong&gt;Git repository&lt;/strong&gt;. Currently, we only have our &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; app connected, which is the one we want to use. Our intended &lt;strong&gt;Main Branch&lt;/strong&gt; is our production branch, named &lt;strong&gt;main&lt;/strong&gt;. It is the existing site we have here and we want it to be exactly as it is.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; It is possible to view the &lt;strong&gt;Preview Details&lt;/strong&gt;, but they are currently not necessary for our current objective.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; We're just going to hit &lt;strong&gt;Create Project&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%2Fjtfkdgj8g5vz471gvc7t.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%2Fjtfkdgj8g5vz471gvc7t.png" alt="3" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see that's going to automatically update our new project with our existing site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now let's continue with the best part!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding a new site to enable branching workflows for content editing
&lt;/h2&gt;

&lt;p&gt;After reloading the page for the &lt;strong&gt;Sites&lt;/strong&gt; section, we'll notice that we can add a new site for enabling branching workflows in content editing! With this feature, we can create multiple sites, using our existing GitHub Space site as the main branch. Whenever we want to create a new branch, we'll simply create a new site for our Developer Branches or Changes Staged, thus facilitating easier sharing.&lt;/p&gt;

&lt;p&gt;Before we get started, it's important to note that branching workflows are only available for team accounts. If you're working through this, make sure you're on the appropriate plan. See &lt;a href="https://cloudcannon.com/pricing/" rel="noopener noreferrer"&gt;cloudcannon account plans&lt;/a&gt; for more details.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;You might get a warning saying &lt;strong&gt;Upgrade your plan to get access to Branching workflows&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&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%2F2td01o2hr4n4pdglqao4.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%2F2td01o2hr4n4pdglqao4.png" alt="5" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you subscribe to one of the plans you will be able to add a new Branch.&lt;/p&gt;

&lt;p&gt;Now once we reload the page for the site section we can see that we now have the ability to &lt;strong&gt;Add a new site&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; Adding a new site is a breeze - simply click on &lt;strong&gt;+Add new site&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%2Fcroygzes4prj4sv6oep4.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%2Fcroygzes4prj4sv6oep4.png" alt="4" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; A new window will appear with two options: &lt;strong&gt;Edit with a Template&lt;/strong&gt; or &lt;strong&gt;Build with your own files&lt;/strong&gt;. Select &lt;strong&gt;Build with your own files&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%2F64p0v5d2ogpe9bteh190.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%2F64p0v5d2ogpe9bteh190.png" alt="7" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 -&lt;/strong&gt; Enter your &lt;strong&gt;New site name&lt;/strong&gt;, simply give it a name like: &lt;strong&gt;GitHub Space-Branch&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 -&lt;/strong&gt; Then at &lt;strong&gt;File source&lt;/strong&gt;, choose the option &lt;strong&gt;GitHub repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 -&lt;/strong&gt; Then select your &lt;strong&gt;Repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6 -&lt;/strong&gt; Now moving into the &lt;strong&gt;Branch setup&lt;/strong&gt; just select &lt;strong&gt;Create a new Branch&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7 -&lt;/strong&gt; Leave the &lt;strong&gt;Source branch&lt;/strong&gt; just like it is &lt;strong&gt;main&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8 -&lt;/strong&gt; Enter a &lt;strong&gt;New branch name&lt;/strong&gt;, the same as above: &lt;strong&gt;GitHub Space-Branch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9 -&lt;/strong&gt; Finally click on the &lt;strong&gt;Create Site&lt;/strong&gt; button at the bottom of the window.&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%2F4sefty7qlqkkr1nbdhn3.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%2F4sefty7qlqkkr1nbdhn3.png" alt="8" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;After we click the button we can see that &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; is already starting to work through our existing build configuration. It's aiming to build and deploy the new branch into a preview that will be available at a different URL.&lt;/p&gt;
&lt;/blockquote&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%2Fwvjn4a8xtzanbilvm5bp.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%2Fwvjn4a8xtzanbilvm5bp.png" alt="9" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10 -&lt;/strong&gt; Once your site is set up, you'll have a new URL where you can stage and publish any new content changes on the branch.&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%2Fha7rrz8a7hnrhh3pxva6.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%2Fha7rrz8a7hnrhh3pxva6.png" alt="10" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Staging and publishing new content updates on a new branch site
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt;'s staging and publishing feature allows developers to seamlessly make changes to their website without affecting the live production site. With this feature, developers can create a branch site to work on new content changes and test them out in a safe and controlled environment. Once they are satisfied with the changes, they can easily publish the new content to the live site with just a few clicks. This efficient workflow saves time and eliminates the risk of making mistakes on the live site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; Once your site is ready, we now have our URL: &lt;a href="https://high-quetzal.cloudvent.net/" rel="noopener noreferrer"&gt;https://high-quetzal.cloudvent.net/&lt;/a&gt;. We'll open it in a new tab, and, it looks exactly like it did before.&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%2F1yng431fx128he8h6b86.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%2F1yng431fx128he8h6b86.png" alt="11" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; But this time if I wanted to go to our &lt;code&gt;_pages&lt;/code&gt; section inside of our &lt;strong&gt;src&lt;/strong&gt; folder.&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%2F6yakr5lmna24zmc2598c.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%2F6yakr5lmna24zmc2598c.png" alt="12" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 -&lt;/strong&gt; And edit our markdown file &lt;code&gt;about.md&lt;/code&gt; again. Click over &lt;code&gt;about.md&lt;/code&gt; to open up the File editor.&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%2Fwye70fxtpd3ac60l4x27.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%2Fwye70fxtpd3ac60l4x27.png" alt="13" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 -&lt;/strong&gt; After we open up our &lt;code&gt;about.md&lt;/code&gt; file, we want to add another line with some text. Lets just write the name of our firts article on top:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;How to &lt;span class="nb"&gt;install &lt;/span&gt;Git Bash &lt;span class="k"&gt;for &lt;/span&gt;Windows to your &lt;span class="nb"&gt;local &lt;/span&gt;system?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fdu9ik6owmklpbdo6c94x.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%2Fdu9ik6owmklpbdo6c94x.png" alt="14" width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 -&lt;/strong&gt; Click on &lt;strong&gt;Save&lt;/strong&gt;. A new window will appear with &lt;strong&gt;Review your changes&lt;/strong&gt;. We just hit &lt;strong&gt;Save&lt;/strong&gt; once more.&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%2Ffq35rfckt2bf6n3tk9pr.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%2Ffq35rfckt2bf6n3tk9pr.png" alt="15" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will commit the changes, just like before, but this time the changes will be committed to the branch that we just created, called &lt;strong&gt;GitHub Space-Branch&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6 -&lt;/strong&gt; (Optional) If we choose to see the &lt;strong&gt;Build&lt;/strong&gt;, we just need to hit &lt;strong&gt;Build Output&lt;/strong&gt;, and close the window after it's done.&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%2F7gv7s55qz34qipqccftc.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%2F7gv7s55qz34qipqccftc.png" alt="17" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7 -&lt;/strong&gt; If we look over on github we can see that separate branch &lt;strong&gt;github-space-branch&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%2Fwrw6y01gll698g16ho1n.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%2Fwrw6y01gll698g16ho1n.png" alt="16" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8 -&lt;/strong&gt; After selecting it, we can now view the recently published updated content. We notice a new line containing the text, &lt;strong&gt;'How to install Git Bash for Windows to your local system?'&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%2Fjb7nvwe9iruq4i61llsz.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%2Fjb7nvwe9iruq4i61llsz.png" alt="18" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9 -&lt;/strong&gt; Going back to our &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; &lt;strong&gt;Status summary page&lt;/strong&gt;, we can open up our new branch URL &lt;strong&gt;&lt;a href="https://high-quetzal.cloudvent.net/" rel="noopener noreferrer"&gt;https://high-quetzal.cloudvent.net/&lt;/a&gt;&lt;/strong&gt; site, to see the changes.&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%2Fnel96jly0yt7wy4gec6d.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%2Fnel96jly0yt7wy4gec6d.png" alt="19" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10 -&lt;/strong&gt; We can go to our &lt;strong&gt;about page&lt;/strong&gt;, and we can see that new line already visible online.&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%2Ffc41ubeb1fbk6hla341t.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%2Ffc41ubeb1fbk6hla341t.png" alt="20" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11 -&lt;/strong&gt; If we navigate quickly back to our &lt;strong&gt;Sites&lt;/strong&gt;, we have &lt;strong&gt;GitHub Space&lt;/strong&gt; and &lt;strong&gt;GitHub Space-Branch&lt;/strong&gt; visible -The &lt;strong&gt;main branch&lt;/strong&gt; and the &lt;strong&gt;new branch&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%2F7yc91zmqww7jzoiceei7.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%2F7yc91zmqww7jzoiceei7.png" alt="21" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12 -&lt;/strong&gt; After selecting our original &lt;strong&gt;GitHub Space&lt;/strong&gt; site we can open up our URL &lt;code&gt;https://green-cassowary.cloudvent.net&lt;/code&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%2Fqtz3jkbtbqlqvgk0ppz1.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%2Fqtz3jkbtbqlqvgk0ppz1.png" alt="22" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13 -&lt;/strong&gt; And see on the &lt;strong&gt;about page&lt;/strong&gt; that we still don't have those changes we did on our &lt;strong&gt;GitHub Space-Branch&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%2F5fbf11hi2ho5bm4sxbad.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%2F5fbf11hi2ho5bm4sxbad.png" alt="23" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The importance of approving changes before merging into Git
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt;'s importance of approving changes before Merging into Git is a crucial aspect of any software development project.&lt;/p&gt;

&lt;p&gt;The process involves reviewing code changes made by team members before merging them into the main branch of the code repository.&lt;/p&gt;

&lt;p&gt;This ensures that all changes are thoroughly tested and do not disrupt the existing code and functionality.&lt;/p&gt;

&lt;p&gt;Failing to approve changes can result in bugs, errors, and in some cases, complete system crashes.&lt;/p&gt;

&lt;p&gt;By implementing a change approval process, developers can avoid these issues and ensure that their code is stable and reliable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; provides tools and a platform that automates this process, making it easy for teams to collaborate and approve changes quickly and efficiently.&lt;/p&gt;

&lt;p&gt;Before merging changes in Git and deploying them to production, it's important to ensure that those changes have been approved. In the current scenario, to approve a change, we merge it and then choose to deploy it to the production environment. Once the changes are published, we can delete the unnecessary site. Another option is to publish to production and right after delete the branch that we don't need anymore with just a click.&lt;/p&gt;

&lt;p&gt;Back to our &lt;strong&gt;Dashboard&lt;/strong&gt; of our &lt;strong&gt;Branch&lt;/strong&gt; site, under &lt;strong&gt;Actions&lt;/strong&gt; we have the ability to now the &lt;strong&gt;Publish changes&lt;/strong&gt; we did.&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%2Fnd7mnc5hvlmcwm0rpdpf.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%2Fnd7mnc5hvlmcwm0rpdpf.png" alt="24" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; We're going to click &lt;strong&gt;Publish changes&lt;/strong&gt;, a new window will appear called &lt;strong&gt;Publishing&lt;/strong&gt;, and then also delete the site since once it's published we don't really need that branch again. Click on &lt;strong&gt;Publish then delete site&lt;/strong&gt; and &lt;strong&gt;Click again to confirm&lt;/strong&gt; immediatly after.&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%2Fyxul2new5q1bc21n1zgr.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%2Fyxul2new5q1bc21n1zgr.png" alt="25" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; After making changes, publishing and deleting the branch, we can view the updated content of our main live site &lt;strong&gt;GitHub Space&lt;/strong&gt;. Just click on the arrow button right next to our URL: &lt;code&gt;https://green-cassowary.cloudvent.net&lt;/code&gt; and Voilá.&lt;/p&gt;

&lt;p&gt;We can finally view the merged updated content. We notice a new line containing the text, &lt;strong&gt;'How to install Git Bash for Windows to your local system?'&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%2Fqcyhbgp3u1h2pvzmu453.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%2Fqcyhbgp3u1h2pvzmu453.png" alt="26" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 -&lt;/strong&gt; Furthermore, by checking the &lt;strong&gt;main branch&lt;/strong&gt; on GitHub, we can verify that the new changes have been successfully incorporated into our main branch through the &lt;strong&gt;Merge branch&lt;/strong&gt; commit.&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%2F8xl6sn5pv4kx9euba5eo.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%2F8xl6sn5pv4kx9euba5eo.png" alt="27" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In conclusion, the process of creating a new &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; project and adding a new site to enable branching workflows for content editing is simple and straightforward.&lt;/p&gt;

&lt;p&gt;This allows businesses to manage their content effectively and streamline their workflows.&lt;/p&gt;

&lt;p&gt;Additionally, the ability to stage and publish new content updates on a new branch site ensures that any changes made are thoroughly tested before being merged into GitHub.&lt;/p&gt;

&lt;p&gt;By having a system in place to approve changes, businesses can reduce the risk of errors and save time in the long run.&lt;/p&gt;

&lt;p&gt;Overall, using &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; for content management and collaboration can significantly improve productivity and efficiency for any organization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why you should use Cloudcannon
&lt;/h3&gt;

&lt;p&gt;Upon discovering &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt;, I was amazed and realized that this is the ultimate answer to my long-awaited solution. As a result, I spend less time coding, launch websites swiftly, and alleviate my concerns regarding security and backups.&lt;/p&gt;

&lt;p&gt;I develop websites on my local computer from severel different locations, but if a client needs urgent changes, I can easily log into &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; from anywhere and make updates using their online code editor. My recent clients love using &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; too, finding it simpler to make updates and work in sections of their site they previously couldn't.&lt;/p&gt;

&lt;p&gt;Thanks to the &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; team, any Developer is able to offer his clients a professional managed hosting solution with an online CMS, full version control, external hosting (if needed).&lt;/p&gt;

&lt;p&gt;Working with &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt; makes everyone happy!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for the read! Now go practice &amp;amp; build something awesome!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>cloudcannon</category>
      <category>nextjs</category>
      <category>branching</category>
      <category>cms</category>
    </item>
    <item>
      <title>How Next.js 13's CSS modules &amp; Loading State Feature Can Improve User Experience</title>
      <dc:creator>Jose Calvario</dc:creator>
      <pubDate>Thu, 27 Apr 2023 08:10:20 +0000</pubDate>
      <link>https://dev.to/joshhortt/how-nextjs-13s-css-modules-loading-state-feature-can-improve-user-experience-1jcd</link>
      <guid>https://dev.to/joshhortt/how-nextjs-13s-css-modules-loading-state-feature-can-improve-user-experience-1jcd</guid>
      <description>&lt;p&gt;In this series, we’re continuing through the basics of learning the new features of the static site generator, &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the previous tutorials, we learned how we can construct pages and layouts in the new &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt; &lt;strong&gt;app directory&lt;/strong&gt;, and we'll also looked at some basic &lt;strong&gt;routing&lt;/strong&gt; and &lt;strong&gt;Linking&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Today we'll dig deeper and look at how CSS modules is applied with this starter project we've been using. We also have a quick look at Loading state using &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&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%2Fbalc60r7s0gunvz0ljpf.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%2Fbalc60r7s0gunvz0ljpf.png" alt="0" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;If you intend to follow along with this tutorial on your system, please ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A basic understanding of working with the terminal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A Laptop or PC with Windows installed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An Internet connection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;Git&lt;/a&gt; is installed on your local machine (optional). For more details on accomplishing this, review &lt;a href="https://creativelightbox.net/how-to-install-git-bash-for-windows-to-your-local-system" rel="noopener noreferrer"&gt;Installing &amp;amp; Setting Up Git on Windows&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; account. For more details on accomplishing this, review &lt;a href="https://creativelightbox.net/how-to-get-started-with-git-and-github" rel="noopener noreferrer"&gt;How to get started with Git and GitHub&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The latest version of &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; is installed on your machine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Basic knowledge of &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML" rel="noopener noreferrer"&gt;HTML&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/CSS_basics" rel="noopener noreferrer"&gt;CSS&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt;, and &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is a follow-up tutorial, it does require you to have created the second tutorial where we covered &lt;strong&gt;Routing, Layouts &amp;amp; Links&lt;/strong&gt;, as covered in the article : &lt;a href="https://creativelightbox.net/take-your-nextjs-13-app-to-the-next-level-with-new-routing-enhancements-dynamic-layouts-and-efficient-links" rel="noopener noreferrer"&gt;Take Your Next.js 13 App to the Next Level with New Routing Enhancements, Dynamic Layouts, and Efficient Links&lt;/a&gt; to make the most of it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Let’s get started!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a Starter Project
&lt;/h2&gt;

&lt;p&gt;You can see we've got &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; open, where our completed code for the previous part &lt;strong&gt;nextjs-two&lt;/strong&gt; of this beginner series is, which is essentially the modified starter project we've been doing for the last two tutorials.&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%2Fh8qnh4hp665zv2d0nzuk.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%2Fh8qnh4hp665zv2d0nzuk.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's get started by making a copy of &lt;strong&gt;nextjs-two&lt;/strong&gt; and renaming the file to &lt;strong&gt;nextjs-three&lt;/strong&gt; inside our &lt;strong&gt;nextjs-series&lt;/strong&gt; directory.&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%2Fzdge9m402vce8t5tgtzr.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%2Fzdge9m402vce8t5tgtzr.png" width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm going to open up this &lt;strong&gt;nextjs-three&lt;/strong&gt; directory with &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; and we can see everything that was installed from &lt;strong&gt;nextjs-two&lt;/strong&gt; is over here in the file tree, but we need to change some of the contents of the &lt;code&gt;package.json&lt;/code&gt; file,&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%2Faij6uaywffryn54tkhmp.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%2Faij6uaywffryn54tkhmp.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and the &lt;code&gt;packages.lock.json&lt;/code&gt; file 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%2Fix3zwtyso0dxbnxjy3ww.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%2Fix3zwtyso0dxbnxjy3ww.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Accessing the Development Site
&lt;/h2&gt;

&lt;p&gt;So let's go ahead and open a terminal window once again, and I'm going to type in the following:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This will start our basic application. We can see it starting up, and we see all of this information here in the terminal, but here is the URL we can press &lt;strong&gt;control&lt;/strong&gt; and then just &lt;strong&gt;mouse click&lt;/strong&gt; to follow that click and &lt;strong&gt;Voilá!&lt;/strong&gt; it's going to launch that in Chrome.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ready - started server on 0.0.0.0: 3000, url: http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the development server is running, you will be able to browse to &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&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%2Fey1j8wea2eqck1obi5om.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%2Fey1j8wea2eqck1obi5om.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is our page, visible in the 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%2Fi60mkqrs0xirb9wb0of6.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%2Fi60mkqrs0xirb9wb0of6.png" alt="6" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have the full page that has started, and this was that &lt;code&gt;page.tsx&lt;/code&gt; that we saw inside of the &lt;strong&gt;app directory&lt;/strong&gt; —Now as cool as this looks, let's go ahead and make some more changes.&lt;/p&gt;

&lt;p&gt;Let's just delete what's inside the &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; element down here:&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%2Fcsxobqrphe3dzejmg8xd.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%2Fcsxobqrphe3dzejmg8xd.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And replace that with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Hello&lt;/span&gt; &lt;span class="nx"&gt;Welcome&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;Next&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Link&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/about&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Go&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;About&lt;/span&gt; &lt;span class="nx"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Link&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The page we just edited, &lt;code&gt;page.tsx&lt;/code&gt; of the &lt;strong&gt;app&lt;/strong&gt; directory will 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%2Fs0hkvmcz8d0ir81cvgvy.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%2Fs0hkvmcz8d0ir81cvgvy.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we can look at the application running on &lt;code&gt;http://localhost:3000&lt;/code&gt; we can see that now we have a different &lt;strong&gt;Homepage&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%2F2jt2ayo413bboxzc0ke6.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%2F2jt2ayo413bboxzc0ke6.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Just underneath the &lt;strong&gt;Hello Welcome to Next.js 13&lt;/strong&gt; -our link that says: &lt;strong&gt;Go to About Page&lt;/strong&gt; is at the right, but we can go ahead and click that, then it takes us to the &lt;strong&gt;about page&lt;/strong&gt; that has the site &lt;strong&gt;Navbar,&lt;/strong&gt; it has the &lt;strong&gt;About NavBar&lt;/strong&gt; it still has the &lt;strong&gt;h1&lt;/strong&gt; that says &lt;strong&gt;About&lt;/strong&gt; and &lt;strong&gt;Link to Home page&lt;/strong&gt; so we can go back and forth now with links rather than using our back and forward buttons from the browser Tab.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  CSS modules
&lt;/h2&gt;

&lt;p&gt;CSS modules in Next.js 13 allows developers to write modular and scoped CSS by automatically generating unique class names and localizing CSS styles. It enables developers to define CSS classes in a single file and import them into the components where they are needed. This way, the CSS styles are scoped to the components, eliminating global styles and reducing the risk of style conflicts. Additionally, Next.js 13 now supports CSS modules for both client-side and server-side rendering, providing a consistent UI experience throughout the application.&lt;/p&gt;

&lt;p&gt;So continuing with our follow-up tutorial, I previously mentioned that CSS is the reason this &lt;strong&gt;about link&lt;/strong&gt; is down there.&lt;/p&gt;

&lt;p&gt;Let's change that and briefly look at how some CSS is currently applied in this modified starter project.&lt;/p&gt;

&lt;p&gt;Right now this &lt;strong&gt;class&lt;/strong&gt;&lt;code&gt;{styles.main}&lt;/code&gt; that we see in &lt;code&gt;page.tsx&lt;/code&gt; of the &lt;strong&gt;app&lt;/strong&gt; directory is applying that beginning CSS.&lt;/p&gt;

&lt;p&gt;We can go ahead and remove that without removing the &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; element of course.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&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%2Feaximz9lze7x8gv51n0p.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%2Feaximz9lze7x8gv51n0p.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After we save, that's definitely going to change what is applied in the home page but we can see what that starter project did and that is: &lt;code&gt;import styles from "./page.module.css"&lt;/code&gt; so it made some Styles inside of this module -some CSS Styles specifically for this page.&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%2F06unk5na7i88h0k383cc.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%2F06unk5na7i88h0k383cc.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then there are also the file &lt;code&gt;globals.css&lt;/code&gt; that's applied to the entire site.&lt;/p&gt;

&lt;p&gt;We could also create some styles that are applied just to the layout for a specific level or path in the directory tree like our about path.&lt;/p&gt;

&lt;p&gt;Continuing with the &lt;strong&gt;about directory&lt;/strong&gt;, let's create a new file called: &lt;code&gt;styles.module.css&lt;/code&gt; -we're creating a CSS module.&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%2Fbygp0jptxfo3kr9qtkrr.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%2Fbygp0jptxfo3kr9qtkrr.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're going to create a class called &lt;code&gt;.main&lt;/code&gt; , and then inside of this main class we'll have the following styles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="nx"&gt;vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;place&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1682501887460%2F1eec4b1d-b9a7-4b69-85cb-b7a574219fab.png%2520align%3D" 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%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1682501887460%2F1eec4b1d-b9a7-4b69-85cb-b7a574219fab.png%2520align%3D" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's apply this to the &lt;code&gt;layout.tsx&lt;/code&gt; inside the &lt;strong&gt;about directory&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So any page, any component in the about path, what I mean is the &lt;strong&gt;about page&lt;/strong&gt; but also any &lt;strong&gt;children&lt;/strong&gt; would receive these Styles and to do this, we need to import Styles at the top.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;styles&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./styles.module.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&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%2Fzv0jx6agha94s3760sn7.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%2Fzv0jx6agha94s3760sn7.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And then after we've imported those we just need to apply those, and we can do that with this &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; element:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&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%2F8aj8lc65anc9f9i0uh01.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%2F8aj8lc65anc9f9i0uh01.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The nice thing about these modules is you could have a main class with the same name inside of the &lt;code&gt;page.module.css&lt;/code&gt; and then have essentially the same name at two levels, but they're not applied the same way because they're just applied to the component in that class, however, you would have to be careful if you were using globals and applied those.&lt;/p&gt;

&lt;p&gt;Remember we removed the &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; element with a &lt;code&gt;className&lt;/code&gt; just previously from the file &lt;code&gt;page.tsx&lt;/code&gt; of the &lt;strong&gt;app&lt;/strong&gt; directory.&lt;/p&gt;

&lt;p&gt;Let's put it back again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&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%2Fm8q87eshnlmkbms484wu.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%2Fm8q87eshnlmkbms484wu.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's go ahead and see what was applied on our home page:&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%2F9u2oy60i6famkp708snn.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%2F9u2oy60i6famkp708snn.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see that we have applied our &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; element with a &lt;strong&gt;class&lt;/strong&gt; that is entirely different as it was before.&lt;/p&gt;

&lt;p&gt;Now after we click on &lt;strong&gt;Go to About Page&lt;/strong&gt; it shows a darker color, it's centered, our header and our link are together unlike the other main class that was applied to the parent.&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%2Fm1qskbq9e7809muo9el3.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%2Fm1qskbq9e7809muo9el3.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see how the module CSS works and applies only to that level or that page, so this is at the page level when we have &lt;code&gt;page.module.css&lt;/code&gt; we import that and apply it just to that page, now we did this differently for the about -we applied it to the &lt;code&gt;layout.tsx&lt;/code&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%2Fi5mheyrxyro57aykrtpt.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%2Fi5mheyrxyro57aykrtpt.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This would apply essentially to all &lt;code&gt;{children}&lt;/code&gt;, because the children are nested inside of this &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; element that got the class.&lt;/p&gt;

&lt;p&gt;Just so you understand the different levels we're talking about &lt;strong&gt;page level&lt;/strong&gt; or we're talking about &lt;strong&gt;layout path level&lt;/strong&gt; or of course, you go to the very top and you have also the &lt;strong&gt;global level&lt;/strong&gt; that applies to all.&lt;/p&gt;

&lt;p&gt;When we go back to the home page, the &lt;code&gt;app.tsx&lt;/code&gt; and remove that &lt;strong&gt;main class&lt;/strong&gt; -we can see the difference as well, now everything shifts to the top because those styles are no longer applied to our parent page.&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%2Fppzbg72oioxcx07thxso.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%2Fppzbg72oioxcx07thxso.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Loading with React
&lt;/h2&gt;

&lt;p&gt;A &lt;code&gt;loading.js&lt;/code&gt; or &lt;code&gt;loading.tsx&lt;/code&gt; file is a JavaScript file that is used to create &lt;strong&gt;instant loading states&lt;/strong&gt; for web applications, built on top of the &lt;strong&gt;React library's suspense&lt;/strong&gt; feature. The suspense feature in React allows developers to define components that can delay rendering until some data or resource is ready, which can help improve the user experience by showing loading indicators or placeholders while data is being fetched.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;loading.tsx&lt;/code&gt; file typically includes helper functions or components that can be easily used to create loading states for different parts of a web application. For example, it might include a component that shows a spinner animation while data is being fetched from a server, or a function that can be called to delay rendering a component until its data is ready.&lt;/p&gt;

&lt;p&gt;By using the &lt;code&gt;loading.tsx&lt;/code&gt; file, developers can easily implement efficient and user-friendly loading states in their web applications, without having to manually write complex code to manage asynchronous data fetching and rendering.&lt;/p&gt;

&lt;p&gt;Now let's move on with &lt;strong&gt;Loading&lt;/strong&gt;. We can add more files here that some you don't even see that weren't provided with the starter project but they can really help the project out and one of those is a &lt;strong&gt;loading state&lt;/strong&gt;, so once again in the &lt;strong&gt;about directory&lt;/strong&gt; let's create a new file and we just name it: &lt;code&gt;loading.tsx&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Inside of this &lt;code&gt;loading.tsx&lt;/code&gt; we'll type RFC and get our loading functional component. Once again make that a capital &lt;strong&gt;L&lt;/strong&gt; for the name of the component and then we are returning a loading state, instead of what is currently being returned we're going to put a &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; inside of this we just type the word &lt;strong&gt;Loading with some dots&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Loading&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Loading&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://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%2Fb6agprjhv2zh5zs29ju3.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%2Fb6agprjhv2zh5zs29ju3.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another great thing is the &lt;a href="https://beta.nextjs.org/docs/api-reference/file-conventions/loading" rel="noopener noreferrer"&gt;loading file can create instant loading states built on Suspense&lt;/a&gt;, under the hood.&lt;/p&gt;

&lt;p&gt;We will be able to briefly see this loading message when we navigate between those two pages.&lt;/p&gt;

&lt;p&gt;First to see this in action we'll open up our &lt;strong&gt;Dev tools&lt;/strong&gt; -when we are on the Home page, we just right click with our mouse and choose &lt;strong&gt;,&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Next under the &lt;strong&gt;Network Tab&lt;/strong&gt; we have a option that says &lt;strong&gt;Slow 3G&lt;/strong&gt;. We select that option to see the Loading state just changing more slowly.&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%2Fmyy0qjt4wvq5u0chdnr1.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%2Fmyy0qjt4wvq5u0chdnr1.png" width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, we &lt;strong&gt;minimize&lt;/strong&gt; the &lt;strong&gt;Dev tools&lt;/strong&gt; then we'll go to the home page first and remember the home page doesn't have a loading state -go to the &lt;strong&gt;about page&lt;/strong&gt; to see the loading message we did just briefly.&lt;/p&gt;

&lt;p&gt;Click on &lt;strong&gt;Go to About Page&lt;/strong&gt; and see it in action.&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%2Fwejajeg5cokxditq7qdd.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%2Fwejajeg5cokxditq7qdd.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In this article, we learned how to use the CSS modules. We also saw how to apply react suspense and loading states.&lt;/p&gt;

&lt;p&gt;The patterns and conventions we learned in this article are still experimental features that &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt; is implementing while moving forward, however, they are already very useful, and we can already start using them in our projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt; is constantly incrementing these new features and adding some new ones, so I'll try to cover those if they continue during this beginner series; however, I prefer to publish the new features rather than the previous ones, because this is the direction that &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt; is headed in the future.&lt;/p&gt;

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

&lt;p&gt;During our upcoming part 4, we will delve into the topic of Error Boundaries. It is important to prioritize progress rather than perfection, as even small advancements made each day can lead to significant results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for the read! Now go practice &amp;amp; build something awesome!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>loading</category>
      <category>cssmodules</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to get hired as a Junior Web Developer?</title>
      <dc:creator>Jose Calvario</dc:creator>
      <pubDate>Wed, 12 Apr 2023 14:33:47 +0000</pubDate>
      <link>https://dev.to/joshhortt/how-to-get-hired-as-a-junior-web-developer-27if</link>
      <guid>https://dev.to/joshhortt/how-to-get-hired-as-a-junior-web-developer-27if</guid>
      <description>&lt;h2&gt;
  
  
  A Step-by-Step Guide for Demonstrating Your Job Readiness!
&lt;/h2&gt;

&lt;p&gt;Looking for your first job as a junior web developer can be a daunting experience. Despite the growing demand for web developers, competition is fierce, and standing out in a flooded job market can seem like an insurmountable obstacle. Fortunately, by following a few key steps and making a little extra effort, you can increase your chances of landing a position as a junior web developer. In this blog post, we'll guide you through the essential things you need to know when applying for junior web developer jobs. Whether you're just starting your career or are looking to switch fields, these tips will help you take your first steps toward a successful career in web development. In this blog post, we'll explore how to leverage LinkedIn to connect with industry professionals and hiring managers, and ultimately increase your chances of landing your dream job.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction to LinkedIn
&lt;/h2&gt;

&lt;p&gt;LinkedIn is a social network service specifically oriented toward employment and professional networking. It's similar to sites like Facebook, but user profiles feature professional accolades, work histories, resumes, and more employment-related content.&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%2F4nyc52ffvja1c9vkgs75.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%2F4nyc52ffvja1c9vkgs75.png" alt="1" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LinkedIn is not just a platform to chat about careers. It's a great way to find a job. Most technical job applications request your LinkedIn URL right alongside the standard cover letter, resume, and contact information. One of LinkedIn's recent &lt;a href="https://economicgraph.linkedin.com/resources/linkedin-workforce-report-february-2023" rel="noopener noreferrer"&gt;Workforce Reports&lt;/a&gt; and their ongoing &lt;a href="https://news.linkedin.com/about-us#Statistics" rel="noopener noreferrer"&gt;Statistics Page&lt;/a&gt; even detail that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn is used by professionals in 200 different countries worldwide&lt;/li&gt;
&lt;li&gt;LinkedIn has around 900+ million members worldwide&lt;/li&gt;
&lt;li&gt;Over 199 million American workers have LinkedIn profiles.&lt;/li&gt;
&lt;li&gt;Over 236 million Europeans (including Turkey and Isreal) workers have LinkedIn profiles.&lt;/li&gt;
&lt;li&gt;More than 30,000 U.S. companies specifically use it to recruit new hires.&lt;/li&gt;
&lt;li&gt;30 million total companies are represented on the platform.&lt;/li&gt;
&lt;li&gt;An estimated 3,000,000 jobs are posted on LinkedIn every month.&lt;/li&gt;
&lt;li&gt;Over 90% of Fortune 500 companies use LinkedIn&lt;/li&gt;
&lt;li&gt;49 million People using LinkedIn to search for jobs each week&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%2Fez7rj711svjg4mlwsg38.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%2Fez7rj711svjg4mlwsg38.png" alt="2" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also read what matters to employees — and how employers are responding — is changing in a big way. In fact, company culture is having a watershed moment that’s redefining the relationship between employers and employees. You can &lt;a href="https://business.linkedin.com/content/dam/me/business/en-us/talent-solutions-lodestone/body/pdf/global_talent_trends_2022.pdf" rel="noopener noreferrer"&gt;read&lt;/a&gt; or &lt;a href="https://soundcloud.com/user-895609695/2022-global-talent-trends" rel="noopener noreferrer"&gt;listen&lt;/a&gt; to the full 2022 Global Talent Trends report for more in-depth data and insights.&lt;/p&gt;

&lt;p&gt;We've even seen Web developer student's or self-taught's regular LinkedIn posts getting noticed by a friend's manager, by recruiters resulting in the manager or recruiter reaching out, interviewing, and hiring that student or self-taught!&lt;/p&gt;

&lt;p&gt;Internship companies also request to preview student LinkedIn profiles during the matchmaking process. Because this tool is so widely used, we consider it necessary for your upcoming job search. So it's very important to create your LinkedIn profiles early in your Journey whether you're still in college, attending a Bootcamp or going through the self-taught road, and begin regularly using the platform. This will ensure you will have an active, well-rounded profile by the time internship hosts and employers see them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating a LinkedIn Profile
&lt;/h3&gt;

&lt;p&gt;If you don't already have one, create a free &lt;a href="https://www.linkedin.com/reg/join" rel="noopener noreferrer"&gt;LinkedIn account&lt;/a&gt;. Then use the instructions below to complete your profile:&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%2F0uzaaw6otwcymztn64b1.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%2F0uzaaw6otwcymztn64b1.png" alt="3" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 - Include a recent, high-quality photo that emphasizes your face&lt;/strong&gt;. It doesn't have to be a professional-quality head shot, but it should be easily recognizable (no sunglasses, make sure your face is clearly visible), professional, and friendly. If you don't have a photo handy, ask a classmate, friend, or family member to take one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 - Include a high-quality cover photo&lt;/strong&gt;. This is a great place to show off your personality, accomplishments, and interests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 - Edit your tagline&lt;/strong&gt;. Taglines carry a lot of weight when it comes to being found by recruiters. Use them to sell your skills! Include keywords that recruiters will be looking for. For example, if you want a recruiter looking for a React developer to find you, use the word "React" in your tagline: "Junior Web Developer | Software Engineer | React and JavaScript Wiz"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 - Create a custom easy-to-remember URL that includes your first and last name&lt;/strong&gt;. Try to exclude, numbers and strange symbols, I recommend only using the dash (-), underscore (_), or the dot (.) between your names.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 - Write a summary&lt;/strong&gt;. Think of this as a space to showcase who you are. Incorporate relevant keywords so recruiters are more likely to find you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start with a statement&lt;/strong&gt; that summarizes your experience.&lt;/li&gt;
&lt;li&gt;Next, dive into &lt;strong&gt;what you're doing now&lt;/strong&gt; (learning to code) or (building up your porfolio) and &lt;strong&gt;what relevant skills you bring from&lt;/strong&gt; previous work, hobbies, and volunteer experience.&lt;/li&gt;
&lt;li&gt;Finally, &lt;strong&gt;write a closing statement&lt;/strong&gt; that describes what you're excited about working on in the future. If the perfect position fell into your lap tomorrow, what would it be? Your summary should be at least five sentences but don't limit yourself. Include what you think is most important for hiring managers to know about you. Don't be shy about getting lots of the relevant keywords in there.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6 - Add a Featured section to your page and add link to your GitHub profile as a piece of media&lt;/strong&gt;. You can add this section by clicking &lt;em&gt;Add Profile Section&lt;/em&gt;, selecting &lt;em&gt;Recommended&lt;/em&gt; from the list, and clicking &lt;em&gt;Featured&lt;/em&gt;.You can change the title of the link and write a short blurb about your coding portfolio! If you haven't already, update your GitHub's profile picture to something other than the default. If you have a personal portfolio website or blog, update this section to include links to those too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7 - Add two or three of your best projects&lt;/strong&gt;. You can add projects to the &lt;em&gt;Projects&lt;/em&gt; section of LinkedIn.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;To create this section&lt;/strong&gt;, click &lt;em&gt;Add Profile Section&lt;/em&gt;, select &lt;em&gt;Additional&lt;/em&gt; from the list, and then click on &lt;em&gt;Add Projects&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Include links&lt;/strong&gt; to the GitHub repository or live site if possible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Summarize what the projects do and what technologies and programming concepts were used&lt;/strong&gt;. If you worked on the project with classmates, you can add each other as a contributor.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: contributor As you continue developing projects throughout your Web developer journey, update this section regularly so it always displays the work you're most proud of!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;8 - List your previous jobs&lt;/strong&gt;. Jobs should be listed under &lt;em&gt;Experience&lt;/em&gt;. Each job should include a short description of what you did in that role.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Be specific and succinct&lt;/strong&gt;. Use concrete numbers and examples such as "Responsible for onboarding and training ten new employees in 30 days" rather than vague statements like "Fulfilled management duties beyond expectations."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Think about the "why" for your descriptions&lt;/strong&gt;. Why does a hiring manager care about this description and what does each point demonstrate about you, your skills, or achievements?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Include only the most recent jobs&lt;/strong&gt;. You should only include your three or four most recent jobs unless earlier roles are relevant to the types of jobs you'll be applying for after graduation. For non-technical roles, focus on the specific responsibilities that could translate into a technical career.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Break down past experience descriptions into bullet points&lt;/strong&gt;. You can easily do this by using the &lt;code&gt;Alt-8&lt;/code&gt; shortcut.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;9 - Add your College, Bootcamp or Self-taught experience&lt;/strong&gt;. This should be added to &lt;em&gt;Education section&lt;/em&gt;, not the &lt;em&gt;Experience&lt;/em&gt; section.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Write a brief summary of what you're learning&lt;/strong&gt; and doing whatever path you're taking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't write about what the College, the Bootcamp or the online tutorial is&lt;/strong&gt; --- &lt;strong&gt;just write about your experience&lt;/strong&gt;. For example, past students have written things like:&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;"I'm currently learning how to build web applications with JavaScript, React, HTML, and CSS. More importantly, I'm learning how to think more like a programmer, write good code, and pick up new languages and technologies." "At Bootcamp X, I've learned how to learn programming languages more than learning any one language for the sake of itself. I've learned how to work towards a programming goal on my own and with others until success happens. I've also learned how quickly I can process a tremendous amount of information that is new and uncomfortable at first, and have it feel comfortable like a worn pair of jeans by the end of a week!"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I recommend to not copying these examples. Come up with your own that describes your unique experience. Be unique!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10 - List the skills you've learned during your journey&lt;/strong&gt;. In the &lt;em&gt;Skills&lt;/em&gt; section, list skills and tools you've learned, especially those that are common keywords in job descriptions. Don't list only the names of the courses you've taken so far. Also include each major technology, skill, and concept you practiced in each course. For instance, at this point in the course, depending on your roadmap, you've likely learned some things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Algorithms&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data-structures&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;HTML&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;Sass&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UI Design&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;jQuery&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Typescript&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Object-Oriented Programming&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SQL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Git&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test-Driven Development&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pair Programming&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;React&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;API's&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Responsive Design&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mobile-First Design&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;11 - Keep updating your skills section&lt;/strong&gt;. Continue to update the &lt;em&gt;Skills&lt;/em&gt; section as you learn more throughout the program. List out-of-ordinary skills that may apply to your future work, too, even non-technical skills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12 - Always Include months and years for all dates&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13 - Check your profile in an incognito window&lt;/strong&gt;. It doesn't matter which operating system you use (Windows, Linux, or Chrome OS: Press Ctrl + Shift + n | Mac: Press ⌘ + Shift + n) once you're done. This way, you can see exactly what your LinkedIn page looks like to others (instead of seeing what it looks like just for you).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14 - Search for examples of LinkedIn profiles&lt;/strong&gt;. Search by your university, college, Bootcamp or Online Course on LinkedIn. You'll find countless profiles of past graduates. Use their profiles as inspiration or general guidelines but do not copy their content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making Connections and Building your Network with LinkedIn
&lt;/h2&gt;

&lt;p&gt;Are you tired of scouring job boards and sending hundreds of applications, only to hear back from a few? Look no further than LinkedIn. LinkedIn is not only a great platform for showcasing your professional accomplishments and building your personal brand, it's also an excellent way to make connections and build your network while job hunting.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connect with Classmates and College Alumni
&lt;/h3&gt;

&lt;p&gt;Not only will it be helpful to see what your peers are posting, you'll also have a guaranteed way to stay in touch after graduation. You can also find past college, Bootcamp, or online course students and connect with them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Help Recruiters Find You
&lt;/h3&gt;

&lt;p&gt;Recruiters often find candidates through connections and endorsements. Add connections with all of your college, bootcamp or online course classmates and anybody else you know, even if they don't work in tech. The more connections you have, the more likely it is a recruiter will find you.&lt;/p&gt;

&lt;p&gt;Once you're connected, ask your classmates and friends to endorse you for the skills you've listed on your profile. They can click the &lt;em&gt;+&lt;/em&gt; button next to the skill. Having more endorsements for the skills recruiters are looking for will make it more likely they will find you.&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%2Fbser1lm8kqowadu87a1f.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%2Fbser1lm8kqowadu87a1f.png" alt="4" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Connect with people in your field
&lt;/h3&gt;

&lt;p&gt;A great way to build your network is to connect with people on LinkedIn after meeting them at events or &lt;a href="https://www.meetup.com/" rel="noopener noreferrer"&gt;meetups&lt;/a&gt;. You can leverage these new connections for opportunities like informational interviews, which can potentially lead to jobs down the line.&lt;/p&gt;

&lt;p&gt;When you connect with someone after an event, it's best practice to send them a personalized message. When asking for an informational interview, don't go into it expecting a job. This is a chance to build a new relationship in the industry and learn from someone with more experience. Use this as a time to find mentorship, ask for advice, and listen to an insider's perspective of the industry.&lt;/p&gt;

&lt;p&gt;Here's an example approach:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It was great meeting you at the event last week. I'd love to buy you coffee and pick your brain about working as a JavaScript senior dev with KatChat. When would you be available?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Using LinkedIn Regularly
&lt;/h3&gt;

&lt;p&gt;Creating your profile is a great first step. But it's important you also remain fairly active on the platform, especially before your eventual job search. Not sure where to start? Here are some ideas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Follow hashtags on subjects that interest you.&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%2Fmukvj8o3jrowa1xgasxv.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%2Fmukvj8o3jrowa1xgasxv.png" alt="5" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anytime someone uses the hashtag you follow, it will appear in your feed. If you really like the post, you can share it yourself or simply like the post. To follow hashtags, start in the search bar on LinkedIn and type the pound key '#' followed by any topic you're interested in. For example: #startups #remoteworkers #javascript #react&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%2Fmp9u00pq5jlzxedhs9cj.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%2Fmp9u00pq5jlzxedhs9cj.png" alt="6" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Join groups of people that have shared interests. Often people post jobs in these groups to focus their candidate search. Find groups by typing a subject in the search bar and wait for a dropdown to appear. You should see the subject &lt;em&gt;in Groups&lt;/em&gt; the third option down.&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%2F8kfeacbh4a59gkus2l20.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%2F8kfeacbh4a59gkus2l20.png" alt="7" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then click on Follow the "group" you're interested in.&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%2Fatyv662hau5rhd60mc8g.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%2Fatyv662hau5rhd60mc8g.png" alt="8" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Post, Share, Like, Comment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Regularly document your work&lt;/strong&gt;. Next time you make a site you're proud of or tackle an interesting challenge, write a LinkedIn post about it! Make sure you update the &lt;em&gt;Projects&lt;/em&gt; section to include your latest and greatest work examples.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Write a blog&lt;/strong&gt;. Longer-form blog posts documenting your experience can communicate your enthusiasm, skills, interest, and personality to future employers. If you don't have a personal blog, you can post on sites like &lt;a href="https://dev.to/"&gt;Dev&lt;/a&gt; or &lt;a href="https://hashnode.com/" rel="noopener noreferrer"&gt;Hashnode&lt;/a&gt; which I use. Make sure to share them to your LinkedIn feed! You can even write articles directly on LinkedIn that will automatically be associated with your LinkedIn account and show up on your profile.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Find a helpful resource? Others will probably find it helpful too. Why not share it on your LinkedIn feed? Make sure to credit the original author.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recommendations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Check in with potential references&lt;/strong&gt;. Have you thought about who you'll use as references for a future job? Do your references include managers from past jobs or anyone you're not currently in touch with? Check if they're on LinkedIn and connect with them now. That way you don't have to scramble to find them later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write recommendations for your peers&lt;/strong&gt;. If you've had great experiences working with fellow students, consider writing recommendations highlighting the technical and interpersonal skills that made them so great to work with. Preview recommendations left for others on LinkedIn (you can search your college, bootcamp or online course to see all kinds of past students) to get an idea of what these typically look like.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Remember always:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Regardless of how you use LinkedIn, &lt;strong&gt;make sure to keep your posts, comments, and interactions positive and professional&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Again, &lt;strong&gt;your LinkedIn profile acts as a resume and representation of yourself&lt;/strong&gt; to future employers and coworkers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Put your best foot forward while simultaneously showing off your investment&lt;/strong&gt; in the industry, eagerness to learn, and interest in technical work.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Networking Without Letting Your Employer Know
&lt;/h3&gt;

&lt;p&gt;Generally, keeping your LinkedIn profile information public is the easiest way to signal to employers and recruiters that you're looking for work. However, you may want to keep your profile more private if you are concerned your current employer will not support you in job seeking. In this case, let your advisor know so they can work with you on alternative networking options.&lt;/p&gt;

&lt;p&gt;If you prefer to keep your profile more private, your general networking strategy should be to entice people in hiring positions to reach out to you to learn more about you.&lt;/p&gt;

&lt;p&gt;Follow these steps to make your LinkedIn profile more private and to conceal activities that may indicate you are job seeking. If you prefer to keep your profile more public, you can still follow these steps. Just make sure the last step is set to the more public option.&lt;/p&gt;

&lt;h4&gt;
  
  
  Keep Your Connections Private
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the dropdown below your avatar in the upper right corner of the screen, click on &lt;em&gt;Settings &amp;amp; Privacy&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the left-hand pane, click on &lt;em&gt;Visibility&lt;/em&gt;, then click on &lt;em&gt;Visibility of your profile &amp;amp; network&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on &lt;em&gt;Who can see your connections&lt;/em&gt; and select &lt;em&gt;Only you&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Online LinkedIn Members Can View Your Profile
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;em&gt;Settings &amp;amp; Privacy&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;In the left-hand pane, click on &lt;em&gt;Visibility&lt;/em&gt;, then click on &lt;em&gt;Visibility of your profile &amp;amp; network&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Click on &lt;em&gt;Profile visibility off LinkedIn&lt;/em&gt; and select &lt;em&gt;No&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Click on &lt;em&gt;Edit your public profile&lt;/em&gt;. You can then change the visibility of anything on your public profile in the right-hand pane.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Hiding Update Activity from Other Users Viewing Your Profile
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;em&gt;Settings and Privacy&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Click on &lt;em&gt;Visibility&lt;/em&gt; and then &lt;em&gt;Visibility of your LinkedIn activity&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;em&gt;Share profile updates with your network&lt;/em&gt; and then select &lt;em&gt;No&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  View Other LinkedIn Profiles Anonymously
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;em&gt;Settings and Privacy&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Click on &lt;em&gt;Visibility&lt;/em&gt; and then &lt;em&gt;Visibility of your LinkedIn activity&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;em&gt;Profile viewing options&lt;/em&gt; and then select &lt;em&gt;Private profile characteristics&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Recommendations for Job Hunting on Work Equipment
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Use your personal computer for job hunting. Your work computer may be configured to notify your employer about the websites you visit.&lt;/li&gt;
&lt;li&gt;If you use your work machine, use your browser in incognito mode. This prevents the web browser from saving your search history. Note that some work computers could still be configured to notify your employer about the websites you visit even in incognito mode.&lt;/li&gt;
&lt;li&gt;Make sure you are logged out of LinkedIn at work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Internships
&lt;/h3&gt;

&lt;p&gt;Some internship host companies may offer to extend your internship or transition you to an employee.&lt;/p&gt;

&lt;p&gt;Regardless, make sure you continue to build relationships with the mentors that you've been working with. Ask for their advice on job hunting (mentors love that!), and for suggestions and referrals for places to apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Track your Job Search
&lt;/h2&gt;

&lt;p&gt;To help keep track of where you've applied, track your job search in a spreadsheet like this: &lt;a href="https://goo.gl/Zhtv7c" rel="noopener noreferrer"&gt;Track your job search&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: You should apply to at least 10 positions a week and push code to Github at least 5 days a week, as this will give you the best chance of securing employment quickly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Preparing to Apply for Jobs
&lt;/h2&gt;

&lt;p&gt;Programming is fun, but job hunting sucks! Some of the best advice that we can offer you is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You are awesome and you've come a really long way, and every one of you is on track to be a great junior developer.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're not feeling that way, you're not alone — being a junior developer can be intimidating, especially when you're putting yourself out there for jobs. Remember how far you've come since the beginning of your journey! You know a lot, and you'll be great at your job. No worries!&lt;/p&gt;

&lt;p&gt;One thing to &lt;strong&gt;keep in mind as you're talking to employers is to not undervalue yourself or say negative things about yourself.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The worst thing you can do is say "I'm not very good at coding." If you've gotten this far in your journey, you are a great beginner!&lt;/p&gt;

&lt;p&gt;Nobody's going to hire you for a senior-level job, but you will do great work at a junior-level position or internship. So don't offer up your weaknesses or paint yourself negatively.&lt;/p&gt;

&lt;p&gt;The interviewer should know where you're coming from and can figure out your weaknesses on their own — it's your job to emphasize your strengths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be confident about what you know, and what you don't know.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Experienced developers often value junior developers because they are eager to learn and to be guided&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Be confident in that you know where you are at now, and you can help someone understand where the holes are in your experience.&lt;/p&gt;

&lt;p&gt;If you enjoy programming but are interested in other sides of the industry, there are many awesome opportunities in QA, support, testing, project management, business development, and other roles that will make use of your various skill sets. Knowing how to code really makes you stand out for these types of positions.&lt;/p&gt;

&lt;p&gt;Coding skills alone are not highly correlated with job success, but skills coupled with the number of jobs applied for and quality of applications, are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your goal when you are applying is to apply to 10 per week&lt;/strong&gt;. It’s important as well to cast a wide net. It's better to apply to too many jobs than too few; you can always turn down a job offer, and each application is good practice.&lt;/p&gt;

&lt;p&gt;Keep an open mind for other languages than what you studied. Diversified experience you gain in the industry will be extremely valuable years from now.&lt;/p&gt;

&lt;p&gt;Once you're in job application mode, it's important to move quickly. Make sure you have a great cover letter ready to be edited to fit each job you apply for; if you wait to apply a job may be gone, or you'll be the lowest priority.&lt;/p&gt;

&lt;p&gt;A huge factor in the job search is still luck; some people's job hunts will be longer than others. If you have your mind set on one particular technology or language, it can take longer.&lt;/p&gt;

&lt;p&gt;Not all surprising interviews come true as job offers and not all job offers result in employment (I’ve seen start-ups dissolve between making an offer and the start date). Please keep searching and applying for positions until you’ve received an official offer and/or begun working.&lt;/p&gt;

&lt;h2&gt;
  
  
  Job Boards
&lt;/h2&gt;

&lt;p&gt;Now that you're ready to apply for jobs, you need to know where to look!&lt;/p&gt;

&lt;p&gt;If you have any friends or family who work in tech, you should ask them for advice, introductions and referrals, as personal connections are the best ways to get an in.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mouth-to-mouth still works very effectively today.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But job boards are where you'll find the most job openings. &lt;strong&gt;As you look at job posts, don't take "requirements" too seriously&lt;/strong&gt;: if a company asks for 2 years of experience, they're often open to considering someone with much less if the candidate fits the bill in other ways.&lt;/p&gt;

&lt;p&gt;And if they're looking for a Python developer but you've done Ruby and JavaScript and can show them that you're capable of picking up Python quickly, it's very possible to get in the door.&lt;/p&gt;

&lt;p&gt;For that matter, &lt;strong&gt;don't just limit yourself to only applying to jobs in languages with which you are familiar&lt;/strong&gt;; because there are so many programming languages, most jobs will be in languages you haven't used — yet.&lt;/p&gt;

&lt;p&gt;And don't limit yourself to developer roles — there are many great opportunities for career paths or even just getting your foot in the door in QA; Developer support; Project management; Front-end developer, Database developer; etc.&lt;/p&gt;

&lt;p&gt;Also, &lt;strong&gt;not every job employers are hiring for is posted publicly&lt;/strong&gt;, and a lot of companies have internal job boards or postings. &lt;strong&gt;Look on the employment or career pages of individual tech companies&lt;/strong&gt;. If they have a senior position posted on a job board, you may find a more junior position on their website.&lt;/p&gt;

&lt;h3&gt;
  
  
  Search Terms
&lt;/h3&gt;

&lt;p&gt;Here are some search terms to use on job boards, no matter where you look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;front-end&lt;/li&gt;
&lt;li&gt;front end developer&lt;/li&gt;
&lt;li&gt;junior&lt;/li&gt;
&lt;li&gt;junior developer&lt;/li&gt;
&lt;li&gt;javascript -sr -senior&lt;/li&gt;
&lt;li&gt;ruby -sr -senior&lt;/li&gt;
&lt;li&gt;c# -sr -senior&lt;/li&gt;
&lt;li&gt;javascript&lt;/li&gt;
&lt;li&gt;ruby&lt;/li&gt;
&lt;li&gt;c#&lt;/li&gt;
&lt;li&gt;qa&lt;/li&gt;
&lt;li&gt;tester&lt;/li&gt;
&lt;li&gt;technical support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And finally, here is a list of job boards that have tech jobs anywhere, and remote positions:&lt;/p&gt;

&lt;h3&gt;
  
  
  Remote or Anywhere
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://jobs.google.com/about/" rel="noopener noreferrer"&gt;Google Jobs&lt;/a&gt; --- (aggregates jobs from across the web)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.icrunchdata.com/" rel="noopener noreferrer"&gt;iCrunchData&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jobs.chicktech.org/" rel="noopener noreferrer"&gt;Chick Tech&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.techfetch.com/job/techoregon/oregon-state-openings.aspx" rel="noopener noreferrer"&gt;Tech Fetch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.campuspoint.com/home" rel="noopener noreferrer"&gt;Campus Point&lt;/a&gt; (can email)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/jobs/information-technology-jobs" rel="noopener noreferrer"&gt;LinkedIn Jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://angel.co/" rel="noopener noreferrer"&gt;AngelList&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.indeed.com/" rel="noopener noreferrer"&gt;Indeed.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.glassdoor.com/" rel="noopener noreferrer"&gt;Glassdoor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hired.com/" rel="noopener noreferrer"&gt;Hired&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dice.com/jobs/" rel="noopener noreferrer"&gt;Dice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jobs.monster.com/" rel="noopener noreferrer"&gt;Monster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.geekwire.com/jobs/" rel="noopener noreferrer"&gt;Geekwire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jobs.rubynow.com/" rel="noopener noreferrer"&gt;RubyNow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://itjobpro.com/" rel="noopener noreferrer"&gt;ITJobPro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.techcareers.com/jobs/" rel="noopener noreferrer"&gt;TechCareers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.crunchboard.com/" rel="noopener noreferrer"&gt;CrunchBoard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jobs.mashable.com/jobs/" rel="noopener noreferrer"&gt;Mashable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://careers.stackoverflow.com/" rel="noopener noreferrer"&gt;Stackoverflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.kforce.com/job-seekers/technology-jobs/" rel="noopener noreferrer"&gt;Kforce (staffing agency)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.firstjob.com/jobs/" rel="noopener noreferrer"&gt;Firstjob&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jobsradar.com/jr2/jobs/search" rel="noopener noreferrer"&gt;Jobs Radar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.flexjobs.com/0" rel="noopener noreferrer"&gt;FlexJobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://weworkremotely.com/" rel="noopener noreferrer"&gt;We Work Remotely&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.workingnomads.co/" rel="noopener noreferrer"&gt;Working Nomads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.staff.com/" rel="noopener noreferrer"&gt;Staff.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.skipthedrive.com/" rel="noopener noreferrer"&gt;SkipTheDrive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.virtualvocations.com/" rel="noopener noreferrer"&gt;VirtualVocations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.careerbuilder.com/" rel="noopener noreferrer"&gt;Career Builder&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Freelancing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.fiverr.com/" rel="noopener noreferrer"&gt;Fiverr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.upwork.com/" rel="noopener noreferrer"&gt;Upwork&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.guru.com/" rel="noopener noreferrer"&gt;Guru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.freelancer.com/" rel="noopener noreferrer"&gt;Freelancer.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.freelancermap.com/" rel="noopener noreferrer"&gt;Freelancermap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://authenticjobs.com/" rel="noopener noreferrer"&gt;Authentic Jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.idealist.org/" rel="noopener noreferrer"&gt;Idealist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Mailing Lists
&lt;/h2&gt;

&lt;p&gt;Subscribing to mailing lists is a great way to stay updated on job opportunities. These lists are updated regularly, and they include job openings from various organizations.&lt;/p&gt;

&lt;p&gt;By subscribing to these lists, you can be among the first to be notified about job openings. This gives you an advantage over other job seekers who may not be subscribed. You can apply for the open position early on and stand a better chance of being considered.&lt;/p&gt;

&lt;p&gt;Another advantage of mailing lists is that they save you time and effort in job searching. Instead of manually checking job boards and company websites every day, you will receive notifications directly to your inbox. This makes it a convenient option for busy job seekers.&lt;/p&gt;

&lt;p&gt;Wrapping up, subscribing to mailing lists is an effective way to stay updated on job openings. It is a convenient option that saves you time and effort while giving you an advantage in job searching. So, take advantage of this opportunity and subscribe to relevant mailing lists to enhance your job search.&lt;/p&gt;

&lt;h2&gt;
  
  
  Continuing to Code
&lt;/h2&gt;

&lt;p&gt;It's important to keep coding while you look for work. It will keep your skills sharp and demonstrate to employers that you actually like coding. Avoid tutorials and picking up new languages, and instead focus on building out a project — it gives you more to talk about in your interviews and better demonstrates your coding abilities. Push everything you do to Github, regardless of whether it is complete or not.&lt;/p&gt;

&lt;p&gt;Here are some ideas of things to work on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start or continue a personal project that you can add a lot of features and complexity to over time.&lt;/li&gt;
&lt;li&gt;Contribute to an open source project, such as:

&lt;ul&gt;
&lt;li&gt;github.com/calagator&lt;/li&gt;
&lt;li&gt;github.com/operationcode&lt;/li&gt;
&lt;li&gt;Anything on &lt;a href="https://www.codemontage.com/" rel="noopener noreferrer"&gt;www.codemontage.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Here are some links for finding open source work geared towards new contributors:&lt;/li&gt;
&lt;li&gt;&lt;a href="http://up-for-grabs.net/#/" rel="noopener noreferrer"&gt;http://up-for-grabs.net/#/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/yourfirstpr" rel="noopener noreferrer"&gt;https://twitter.com/yourfirstpr&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/search?utf8=%E2%9C%93&amp;amp;q=label%3Afirst-timers-only+is%3Aopen&amp;amp;type=Issues&amp;amp;ref=searchresults" rel="noopener noreferrer"&gt;https://github.com/search?utf8=✓&amp;amp;q=label%3Afirst-timers-only+is%3Aopen&amp;amp;type=Issues&amp;amp;ref=searchresults&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;If you want to apply for front-end HTML/CSS and Javascript focused positions, &lt;strong&gt;build a portfolio site&lt;/strong&gt;. Make sure to test for &lt;a href="https://www.google.com/?gws_rd=ssl#q=cross+browser+testing" rel="noopener noreferrer"&gt;cross-browser compatibility&lt;/a&gt;.&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sprucing Up GitHub
&lt;/h2&gt;

&lt;p&gt;When you apply for a job or internship, employers will want to see code you've written so that they know what you're capable of doing. Spend some time getting your GitHub profile looking good. Check out my &lt;a href="https://github.com/Joshhortt" rel="noopener noreferrer"&gt;GitHub profile page&lt;/a&gt; so that you have an idea.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;First, &lt;strong&gt;make private any repo that doesn't look great&lt;/strong&gt; and that you don't want to spruce up. &lt;strong&gt;Don't make too many of your repositories private&lt;/strong&gt;, as employers value being able to see the amount of work that you've done.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next, &lt;strong&gt;pin a couple of your best projects&lt;/strong&gt; to the "pinned repositories" section, so employers can more easily view the work you'd like them to see.&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%2Fr5ln2ggg43jk60q9f5u4.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%2Fr5ln2ggg43jk60q9f5u4.png" alt="9" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finally go through all files in each repository and make sure that there aren't large sections of commented-out code, bad indentation, extra line breaks, or anything else that looks less than professional.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Recommende reading:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You might want to read this article on the importance of your GitHub profile to employers: &lt;a href="https://anti-pattern.com/github-is-your-resume-now" rel="noopener noreferrer"&gt;Github is your resume now&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keys to a well-written README
&lt;/h3&gt;

&lt;p&gt;For every public repo, make sure it has a README file that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explains what the project does;&lt;/li&gt;
&lt;li&gt;Explains how to set everything up, if someone clones it;&lt;/li&gt;
&lt;li&gt;Provides information about the goals of the project. (What you were working on and what you were trying to learn);&lt;/li&gt;
&lt;li&gt;Is well-organized with markdown headers;&lt;/li&gt;
&lt;li&gt;Includes screenshots (prioritize for bigger projects like code reviews, group projects, capstone, etc);&lt;/li&gt;
&lt;li&gt;Provides a link to the live site (GitHub Pages, Heroku, Vercel, Netlify, etc); and optionally,&lt;/li&gt;
&lt;li&gt;Includes any known issues with the code, and a roadmap for features you'd like to build.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have a look of a typical well-written &lt;a href="https://github.com/Joshhortt/ecommerce-shop" rel="noopener noreferrer"&gt;README.md&lt;/a&gt; file.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Explore GitHub's vast number of repositories to have a look at how Developers write their READMEs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Additional Resources:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/how-job-search-linkedin-secret-tana-storani/" rel="noopener noreferrer"&gt;How to Job Search on LinkedIn in Secret&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.shimmeringcareers.com/blog/how-hide-your-job-search-your-boss/" rel="noopener noreferrer"&gt;LinkedIn Now Helps You Hide Your Job Search From Your Boss&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.statista.com/topics/951/linkedin/#topicOverview" rel="noopener noreferrer"&gt;LinkedIn - Statistics &amp;amp; Facts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;In conclusion, getting hired as a junior web developer requires a combination of technical skills, experience, and personal qualities. It is essential to have a strong foundation in programming languages, such as HTML, CSS, JavaScript, and others, as well as familiarity with development tools and frameworks. Building a well-rounded LinkedIn profile, a portfolio of projects and contributing to open-source projects can demonstrate coding skills and commitment to learning. Soft skills, such as communication, teamwork, and problem-solving, are highly valued by employers. It is necessary to network, attend conferences and meetups, and search for job opportunities actively. With dedication, persistence, and continuous learning, becoming a junior web developer can lead to a fulfilling career in the tech industry really quickly.&lt;/p&gt;

&lt;p&gt;Remember to keep learning, stay creative, and continually build on your web development skills to remain relevant in the ever-changing industry.&lt;br&gt;
Thanks!&lt;/p&gt;

</description>
      <category>linkedin</category>
      <category>networking</category>
      <category>jobsearch</category>
      <category>webdeveloper</category>
    </item>
    <item>
      <title>Elevate your Next.js 13 application by utilizing improved routing features, flexible layout options, and optimized links</title>
      <dc:creator>Jose Calvario</dc:creator>
      <pubDate>Tue, 04 Apr 2023 12:09:10 +0000</pubDate>
      <link>https://dev.to/joshhortt/elevate-your-nextjs-13-application-by-utilizing-improved-routing-features-flexible-layout-options-and-optimized-links-207i</link>
      <guid>https://dev.to/joshhortt/elevate-your-nextjs-13-application-by-utilizing-improved-routing-features-flexible-layout-options-and-optimized-links-207i</guid>
      <description>&lt;p&gt;In this series, we’re continuing through the basics of learning the new features of the static site generator, &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In the previous lesson, we learned how to start a new &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt; project and reviewed all the files you get.&lt;/p&gt;

&lt;p&gt;Today we'll dig deeper and look at how we can construct pages and layouts in the new &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt; &lt;strong&gt;app directory&lt;/strong&gt;, and we'll also look at some basic &lt;strong&gt;routing&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%2Fbalc60r7s0gunvz0ljpf.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%2Fbalc60r7s0gunvz0ljpf.png" alt="0" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;If you intend to follow along with this tutorial on your system, please ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A basic understanding of working with the terminal.&lt;/li&gt;
&lt;li&gt;A Laptop or PC with Windows installed&lt;/li&gt;
&lt;li&gt;An Internet connection&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;Git&lt;/a&gt; is installed on your local machine (optional). For more details on accomplishing this, review &lt;a href="https://creativelightbox.net/how-to-install-git-bash-for-windows-to-your-local-system" rel="noopener noreferrer"&gt;Installing &amp;amp; Setting Up Git on Windows&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; account. For more details on accomplishing this, review &lt;a href="https://creativelightbox.net/how-to-get-started-with-git-and-github" rel="noopener noreferrer"&gt;How to get started with Git and GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The latest version of &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; is installed on your machine.&lt;/li&gt;
&lt;li&gt;Basic knowledge of &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML" rel="noopener noreferrer"&gt;HTML&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/CSS_basics" rel="noopener noreferrer"&gt;CSS&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt;, and &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is a follow-up tutorial, it does require you to have created the "1. Getting Started" tutorial, as covered in the article &lt;a href="https://creativelightbox.net/getting-started-with-nextjs-a-comprehensive-guide-to-building-your-first-application#heading-creating-a-nextjs-13-project" rel="noopener noreferrer"&gt;Getting Started with Next.js: A Comprehensive Guide to Building Your First Application&lt;/a&gt; to make the most of it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Let’s get started!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a Starter Project
&lt;/h2&gt;

&lt;p&gt;You can see we've got &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; open, where our completed code for the previous part &lt;strong&gt;nextjs-one&lt;/strong&gt; of this beginner series is, which is essentially the starter project that you get after you install &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&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%2F65eiv1su2qf88hb33dy3.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%2F65eiv1su2qf88hb33dy3.png" alt="1" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's get started by making a copy of &lt;strong&gt;nextjs-one&lt;/strong&gt; and renaming the file to &lt;strong&gt;nextjs-two&lt;/strong&gt; inside our &lt;strong&gt;nextjs-series&lt;/strong&gt; directory.&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%2Fnipcvbtyair85u20z5i4.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%2Fnipcvbtyair85u20z5i4.png" alt="2" width="800" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm going to open up this &lt;strong&gt;nextjs-two&lt;/strong&gt; directory with &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; and we can see everything that was installed from &lt;strong&gt;nextjs-one&lt;/strong&gt; is over here in the file tree, but we need to change some of the contents of the &lt;code&gt;package.json&lt;/code&gt; file,&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%2F2a9bal6qkp54ebypc8dn.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%2F2a9bal6qkp54ebypc8dn.png" alt="3" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and the &lt;code&gt;packages.lock.json&lt;/code&gt; file 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%2Fi4r5p7rwa3fq8lhfquz2.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%2Fi4r5p7rwa3fq8lhfquz2.png" alt="4" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Routing between pages
&lt;/h2&gt;

&lt;p&gt;Now, just to recap quickly, we changed the contents of the home page, the &lt;code&gt;page.tsx&lt;/code&gt; file, the default page, and if you followed along with part one, that's in the new &lt;strong&gt;app directory&lt;/strong&gt; for &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&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%2Ff53110ky8vjbe3lkcvrj.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%2Ff53110ky8vjbe3lkcvrj.png" alt="5" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this app directory, let's create another directory inside of it, and let's call this directory &lt;strong&gt;about.&lt;/strong&gt; Inside the &lt;strong&gt;about directory&lt;/strong&gt; let's create another &lt;code&gt;page.tsx&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;To create a new &lt;code&gt;page.tsx&lt;/code&gt; file here and put that inside a directory called &lt;strong&gt;about&lt;/strong&gt;, rather than first creating the &lt;strong&gt;about&lt;/strong&gt; directory and then creating the new file inside of that, we can just click the new file button and then type &lt;code&gt;about/page.tsx&lt;/code&gt; and hit enter. We can see when that file within that directory was created.&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%2Fp58a6rhkrqj2omjoc1aw.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%2Fp58a6rhkrqj2omjoc1aw.png" alt="6" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we type &lt;strong&gt;RFC&lt;/strong&gt; for &lt;strong&gt;react functional component&lt;/strong&gt; and see that choice right there, we're going to select that.&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%2F3l7wk2jyozkx0ez8jkz3.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%2F3l7wk2jyozkx0ez8jkz3.png" alt="7" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; that's not part of &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt; -that is an &lt;strong&gt;ES7 react Snippets extension&lt;/strong&gt; that we can use, we just need to head over &lt;strong&gt;Extensions&lt;/strong&gt; and we're going to search for &lt;strong&gt;VS Code ES7+ React/Redux/React-Native/JS snippets&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&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%2F4mwtgil39j60g0ytbyy8.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%2F4mwtgil39j60g0ytbyy8.png" alt="8" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This extension is very good with those snippets, so you can type those abbreviations and complete those functional components very easily.&lt;/p&gt;

&lt;p&gt;If we go back to the project, we have our basic functional component for the page, but we could name it &lt;strong&gt;About&lt;/strong&gt; with a capital letter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;About&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we look back at the older &lt;code&gt;page.tsx&lt;/code&gt; file notice they didn't name this page either; it's named &lt;strong&gt;Home&lt;/strong&gt; so we want to name the functional component what it actually is, &lt;strong&gt;about&lt;/strong&gt; however the page itself is named &lt;code&gt;page.tsx&lt;/code&gt;. We go ahead and save the page.&lt;/p&gt;

&lt;p&gt;This is how basic routing and pages are created in &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessing the Development Site
&lt;/h3&gt;

&lt;p&gt;So let's go ahead and open a terminal window, and I'm going to type in the following:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;In the meantime, when we want to have a different page that we could link to or navigate to, we want to create a directory for that page. Now, if we look at our page, you can see we're just returning a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; that says: &lt;strong&gt;page.&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%2Fx9ka3tzogv9mpyhz6seg.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%2Fx9ka3tzogv9mpyhz6seg.png" alt="9" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We would go to &lt;code&gt;http://localhost:3000&lt;/code&gt; and then navigate to &lt;code&gt;/about&lt;/code&gt;, and if we press &lt;strong&gt;enter&lt;/strong&gt;, we have the word &lt;strong&gt;page&lt;/strong&gt; displaying there (it's very small) at the top left corner.&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%2Fn6m8pbuy6opot27rvcam.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%2Fn6m8pbuy6opot27rvcam.png" alt="10" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We could change what we have in here; maybe we make it a little bit bigger, maybe even apply just some CSS, but we know we do have a second page now, and we can navigate to it with &lt;code&gt;/about&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If we go back to the home page, we're going to make one simple change here, and that is to turn this &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; into a header &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;, it's a little bit bigger and easier to see, and then we going to turn the word &lt;strong&gt;page&lt;/strong&gt; into the word &lt;strong&gt;About&lt;/strong&gt;, with capital letter ‘A’, so we know we're on the about page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;About&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;About&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Creating a root layout component
&lt;/h2&gt;

&lt;p&gt;Let's look at the &lt;code&gt;layout.tsx&lt;/code&gt; file that's in the parent &lt;strong&gt;app directory&lt;/strong&gt; and for this &lt;code&gt;layout.tsx&lt;/code&gt; applies to the entire site or the entire application, so anything we would put there, would be affected on every other page 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%2F7a642imspeqkod8sltgt.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%2F7a642imspeqkod8sltgt.png" alt="11" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example, we could add an &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt; element, not by creating a separate component but just inside the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; here, and if we look better, the body returns all of the child components inside of the application, but then we could have a component above that we defined, so if we created a &lt;em&gt;navbar&lt;/em&gt; element in a separate component, we could import that and that would work as well, but for now we're just going to use the &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt; element and then inside of the &lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt; element we're going to add an &lt;code&gt;h1&lt;/code&gt; and with the text &lt;strong&gt;Navbar&lt;/strong&gt; and &lt;strong&gt;save&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;return (
  &lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;nav&amp;gt;&lt;/span&gt;Navbar&lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
      {children}
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we can look at the application running on &lt;code&gt;http://localhost:3000&lt;/code&gt; we have &lt;strong&gt;Navbar&lt;/strong&gt; there at the top left corner of our &lt;strong&gt;Home page&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%2Fi60mkqrs0xirb9wb0of6.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%2Fi60mkqrs0xirb9wb0of6.png" alt="12" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;but if we click forward to &lt;code&gt;/about&lt;/code&gt; page, we also have that &lt;strong&gt;Navbar&lt;/strong&gt; on the &lt;code&gt;/about&lt;/code&gt; page, so this &lt;strong&gt;parent&lt;/strong&gt; &lt;code&gt;layout.tsx&lt;/code&gt; applies to all the pages on the application.&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%2Fy0ylh1vsnwwvs1nuw2x7.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%2Fy0ylh1vsnwwvs1nuw2x7.png" alt="13" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a nested layout component
&lt;/h2&gt;

&lt;p&gt;We want to create another &lt;strong&gt;layout&lt;/strong&gt;, that will only apply to anything in the &lt;strong&gt;about folder&lt;/strong&gt; or better yet, the &lt;strong&gt;about tree&lt;/strong&gt;, which means it will only apply to any pages that start with the &lt;code&gt;/about,&lt;/code&gt; and of course, we could have &lt;strong&gt;sub-directories&lt;/strong&gt; and &lt;strong&gt;other pages&lt;/strong&gt; that follow that path. For example, we could have a &lt;strong&gt;sub-page&lt;/strong&gt; or &lt;strong&gt;directory&lt;/strong&gt; in the &lt;strong&gt;about directory&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We're going to create another &lt;code&gt;layout.tsx&lt;/code&gt; file inside of the &lt;strong&gt;about directory&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let's start again by typing &lt;strong&gt;RFC&lt;/strong&gt;, If we notice the function is not going to have the name &lt;strong&gt;layout&lt;/strong&gt;, but that's not what we want, right?&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%2Ffa1al5qmms6gx3upi7g6.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%2Ffa1al5qmms6gx3upi7g6.png" alt="14" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's look back at what we were given from our earlier starter files, and we can see this was named &lt;strong&gt;RootLayout&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We're copying (Ctrl + C) from the beginning of the &lt;strong&gt;RootLayout&lt;/strong&gt; and going down to the return with the parentheses included.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;RootLayout&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We head over to our newly created ´layout.tsx`, and we'll return something different, but we need the same types, and we'll need to change the name to &lt;strong&gt;AboutLayout&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let's paste (Ctrl + V) the code we copied above in there and Rename it to &lt;strong&gt;AboutLayout&lt;/strong&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;AboutLayout&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;layout&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Notice in the return of the parent directory for &lt;strong&gt;app,&lt;/strong&gt; that the starter file &lt;code&gt;layout.tsx&lt;/code&gt; it has the &lt;code&gt;&amp;lt;html lang="en"&amp;gt;&lt;/code&gt;. We only want one of those per page, and really per site because this applies to everything. Anything we have below is considered a child &lt;code&gt;{children}&lt;/code&gt; and it's right here in our HTML structure.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;return (
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  {/*
  &lt;span class="nt"&gt;&amp;lt;head&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  will contain the components returned by the nearest parent head.tsx. Find out
  more at https://beta.nextjs.org/docs/api-reference/file-conventions/head */}
  &lt;span class="nt"&gt;&amp;lt;head&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;nav&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Navbar&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
    {children}
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Going back to our new &lt;code&gt;layout.tsx&lt;/code&gt; inside the &lt;strong&gt;about directory&lt;/strong&gt;, we could just start with a fragment.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;AboutLayout&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="c1"&gt;// FRAGMENT&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now we put a &lt;em&gt;nav element&lt;/em&gt; and we can call this the &lt;strong&gt;About Navbar&lt;/strong&gt; After this &lt;code&gt;&amp;lt;nav&amp;gt;About Navbar&amp;lt;/nav&amp;gt;&lt;/code&gt;, let's go ahead and put a &lt;code&gt;&amp;lt;main&amp;gt;&amp;lt;/main&amp;gt;&lt;/code&gt; element inside. The &lt;code&gt;&amp;lt;main&amp;gt;&amp;lt;/main&amp;gt;&lt;/code&gt; element is where we'll put the &lt;code&gt;{children}&lt;/code&gt; for this &lt;strong&gt;AboutLayout&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To finish this, we'll go ahead and save that file.&lt;/p&gt;

&lt;p&gt;The file &lt;code&gt;layout.tsx&lt;/code&gt; will look like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;AboutLayout&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;children&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ReactNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;nav&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;About&lt;/span&gt; &lt;span class="nx"&gt;Navbar&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/nav&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/main&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In our browser again, looking at the &lt;strong&gt;home page&lt;/strong&gt;, let's go to the URL and add &lt;code&gt;/about&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;http://localhost:3000/about
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now we have the &lt;strong&gt;Navbar&lt;/strong&gt; that applies to the entire application, then we have the &lt;strong&gt;About Navbar&lt;/strong&gt; under that, and lastly, we have the word &lt;strong&gt;About&lt;/strong&gt; underneath.&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%2Fooejxazax6psi8zhpztt.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%2Fooejxazax6psi8zhpztt.png" alt="15" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; We can use the forward and back buttons to navigate between pages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Adding links to pages
&lt;/h2&gt;

&lt;p&gt;Let's go and add some &lt;strong&gt;links&lt;/strong&gt; to our pages to navigate between the two as well, so I'll come back to Visual Studio Code. Let's visit the page inside of the &lt;strong&gt;about directory&lt;/strong&gt; and we'll add a link there first, so at the top of the page I need to add:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Link&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/link&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;If you're familiar with &lt;a href="https://reactrouter.com/en/main" rel="noopener noreferrer"&gt;react-router&lt;/a&gt;, this is a lot like using react-router when we import a link there from that library.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After we add the &lt;strong&gt;import&lt;/strong&gt; we're going to add a fragment here and put an &lt;code&gt;&amp;lt;h&amp;gt;&lt;/code&gt; inside of that fragment.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;About&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;I'm just going to &lt;code&gt;&amp;lt;Link&amp;gt;&lt;/code&gt; this back to the home page, so that's just the &lt;code&gt;"/"&lt;/code&gt; for the root directory, and then we'll have a link to the home page just for the text.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Link&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Link to Home Page&lt;span class="nt"&gt;&amp;lt;/Link&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;about/page.tsx&lt;/code&gt; file should now look like the following:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Link&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/link&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;About&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;About&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Link&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Link&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;Home&lt;/span&gt; &lt;span class="nx"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Link&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;When we &lt;strong&gt;save&lt;/strong&gt; the file, we can see in the browser if that &lt;strong&gt;link&lt;/strong&gt; has been added, so we need to go forward to our &lt;strong&gt;/about&lt;/strong&gt;, and there it says: &lt;strong&gt;Link to Home Page&lt;/strong&gt; and yes, we get a pointer with our cursor, and when we click that, we go back to the &lt;strong&gt;home page&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%2Fj1tq7t81tg5gox8l9q42.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%2Fj1tq7t81tg5gox8l9q42.png" alt="16" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's do the same for the &lt;strong&gt;home page&lt;/strong&gt;. When we come back to the &lt;code&gt;page.tsx&lt;/code&gt; in the app directory &lt;code&gt;app/page.tsx&lt;/code&gt;, notice &lt;strong&gt;not inside&lt;/strong&gt; the &lt;strong&gt;about directory&lt;/strong&gt;,&lt;/p&gt;

&lt;p&gt;and here we can import a link as well.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Link&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next/link&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Just underneath the &lt;strong&gt;Hello, welcome&lt;/strong&gt; we'll put another link there.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;inter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Hello&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h2&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;inter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Welcome&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h2&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;I am going to add a &lt;strong&gt;line break&lt;/strong&gt; and type &lt;strong&gt;Go to About Page&lt;/strong&gt; between &lt;strong&gt;Link&lt;/strong&gt; and &lt;strong&gt;save&lt;/strong&gt; the file.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;br&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Link&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/about&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Go&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;About&lt;/span&gt; &lt;span class="nx"&gt;Page&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/Link&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;app/page.tsx&lt;/code&gt; file should now look like the following:&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%2F1pwnk49lzack1dsleegv.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%2F1pwnk49lzack1dsleegv.png" alt="17" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After saving, we can see in the browser that the &lt;strong&gt;Go to About Page&lt;/strong&gt; link has been added, so we need to go forward to our &lt;strong&gt;/about&lt;/strong&gt;, and there it says: &lt;strong&gt;Link back to Home Page&lt;/strong&gt; as we saw before, and yes, we also get a pointer with our cursor, and when we click that, we go forward to the &lt;strong&gt;about page&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;In this article, we learned how to use the new experimental app directory in &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt;. We also saw how we create new pages within the app folder and how we create another folder within the app directory where we can create more pages, route them, and link to them.&lt;/p&gt;

&lt;p&gt;The patterns and conventions we learned in this article are still experimental features that &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt; is implementing while moving forward, however, they are already very useful, and we can already start using them in our projects&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt; is constantly incrementing these new features and adding some new ones, so I'll try to cover those if they continue during this beginner series; however, I prefer to publish the new features rather than the previous ones, because this is the direction that &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js 13&lt;/a&gt; is headed in the future.&lt;/p&gt;

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

&lt;p&gt;During our upcoming part 3, we will delve into the topics of CSS modules, adjustments with metadata, and loading. It is important to prioritize progress rather than perfection, as even small advancements made each day can lead to significant results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for the read! Now go practice &amp;amp; build something awesome!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>routing</category>
      <category>layouts</category>
      <category>links</category>
    </item>
    <item>
      <title>A Beginner's Guide to Building Your First Next.js Application: Step-by-Step Tutorial</title>
      <dc:creator>Jose Calvario</dc:creator>
      <pubDate>Tue, 28 Mar 2023 12:46:52 +0000</pubDate>
      <link>https://dev.to/joshhortt/a-beginners-guide-to-building-your-first-nextjs-application-step-by-step-tutorial-glf</link>
      <guid>https://dev.to/joshhortt/a-beginners-guide-to-building-your-first-nextjs-application-step-by-step-tutorial-glf</guid>
      <description>&lt;p&gt;Learn how to get Next.js version 13 set up and installed for the rest of the beginner tutorial series.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Set Up in Next.js
&lt;/h2&gt;

&lt;p&gt;In this series, we’re going through the basics of learning the static site generator, &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We’ll go through installing Next.js 13, create a few pages, and a blog, and finally take a look at the data files. Everything we do will be built from scratch, so, no previous Next.js knowledge is necessary only the basics of HTML, CSS, JavaScript, and React. By the end of this series, we’ll have the skills and knowledge to build our own Next.js projects from scratch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;If you intend to follow along with this tutorial on your system, please ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A basic understanding of working with the terminal.&lt;/li&gt;
&lt;li&gt;A Laptop or PC with Windows installed&lt;/li&gt;
&lt;li&gt;An Internet connection&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;Git&lt;/a&gt; is installed on your local machine (optional). For more details on accomplishing this, review &lt;a href="https://creativelightbox.net/how-to-install-git-bash-for-windows-to-your-local-system" rel="noopener noreferrer"&gt;Installing &amp;amp; Setting Up Git on Windows&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; account. For more details on accomplishing this, review &lt;a href="https://creativelightbox.net/how-to-get-started-with-git-and-github" rel="noopener noreferrer"&gt;How to get started with Git and GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The latest version of &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; is installed on your machine.&lt;/li&gt;
&lt;li&gt;Basic knowledge of &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML" rel="noopener noreferrer"&gt;HTML&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/CSS_basics" rel="noopener noreferrer"&gt;CSS&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt;, and &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Let’s get started!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use Next.js?
&lt;/h2&gt;

&lt;p&gt;Next.js is a popular open-source framework for building server-side rendered react applications. It offers a range of benefits that can make developments faster, more efficient, and more scalable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some key benefits of using Next.js are:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1 - Easy setup:&lt;/strong&gt; Next.js provides a simple and easy setup process, with many features pre-configured for a variety of use cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 - Wide community:&lt;/strong&gt; Next.js has a large and active developer community, with many resources available for learning and troubleshooting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 - Server-Side Rendering:&lt;/strong&gt; Next.js provides server-side rendering (SSR) out of the box, allowing for faster page loads and better search engine optimization (SEO). SSR also provides better accessibility for users with slower internet connections or limited device capabilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 - Automatic Code Splitting:&lt;/strong&gt; Next.js automatically code-splits pages, optimizing them for performance and minimizing the amount of JavaScript required to load each page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 - Built-in API Routes:&lt;/strong&gt; Next.js includes API routes, allowing developers to easily create and manage server-side APIs without additional configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6 - SEO optimization:&lt;/strong&gt; With its server-side rendering capabilities, Next.js can improve SEO rankings and visibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7 - Static site generation:&lt;/strong&gt; Next.js has a built-in static site generation feature, so we can generate static files that can be served from a CDN for faster loading times and improved SEO.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8 - Greater developer experience:&lt;/strong&gt; Next.js has excellent developer experience, with features for hot reloading and building, debugging, and testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9 - TypeScript Support:&lt;/strong&gt; Next.js has excellent TypeScript support, making it easier for developers to write safe and maintainable code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10 - Extensible:&lt;/strong&gt; Next.js provides a robust API that allows developers to extend its functionality, making it a versatile option for a wide range of projects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11 - Hot Module Replacement (HMR):&lt;/strong&gt; Next.js allows for HMR, which speeds up development time by allowing us to see code changes immediately without having to refresh the page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12 - Automatic code splitting:&lt;/strong&gt; By default, Next.js automatically splits up code chunks and only sends the code the user needs, which can improve website loading time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14 - Automatic Image Optimization:&lt;/strong&gt; Next.js optimizes images automatically to improve page performance and reduce load times.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;15 - Customizable Server APIs:&lt;/strong&gt; Next.js provides options to customize server-side APIs, which can be used to build more complex applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overall&lt;/strong&gt; Next.js can help improve website performance, streamline development, and offer a better experience for both developers and end users.&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%2Fg2gbe174xm5fa703az9f.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%2Fg2gbe174xm5fa703az9f.png" alt="1" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Pre-Rendering?
&lt;/h3&gt;

&lt;p&gt;By default, Next.js pre-renders every page. This means that Next.js generates HTML for each page in advance, instead of having it all done by client-side JavaScript, which is what React does.&lt;/p&gt;

&lt;p&gt;React sends down this huge bundle of JavaScript, and then everything is rendered in the client, which is the browser. That's on the client side. Pre-rendering can result in better performance and SEO.&lt;/p&gt;

&lt;p&gt;Each generated HTML page is associated with minimal JavaScript code (instead of a large bundle) code necessary for that page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hydration&lt;/strong&gt; is the name given to the process in JavaScript frameworks to initialize the page in the browser after it has previously been server-rendered. While the server can produce the initial HTML we need to augment this output with event handlers and initialize our application state in a way that it can be interactive in the browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Static Site Generation (SSG)?
&lt;/h3&gt;

&lt;p&gt;Next.js has two forms of pre-rendering: &lt;strong&gt;Static Generation&lt;/strong&gt; and &lt;strong&gt;Server-side Rendering&lt;/strong&gt;. The difference is in when it generates the HTML for a page.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Static Generation:&lt;/strong&gt; The HTML is generated at build time and will be reused on each request, this is what's recommended it's the most efficient it's built on the server and then it can be sent out and we're going to talk about CDN’s as well which is a Content Delivery Network and that's where the static generation becomes very useful.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What is Server side-rendering
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Server-side Rendering&lt;/strong&gt;: The HTML is generated on each request. Server-side rendering is also very useful but it's not as recommended as the static site generation, here the HTML is generated on each request it's still generated from the server not on the client side however both of these can be combined with client-side data fetching as well which lets us create a Hybrid Next.js app and we can kind of have the best of both worlds when that happens.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;So why is this static generation so important? Let's look at what a CDN is.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What is a Content Delivery Network (CDN)?
&lt;/h3&gt;

&lt;p&gt;A content delivery network (CDN) is a geographically distributed group of servers that caches content close to end users. A CDN allows the quick transfer of assets needed for loading Internet content, including HTML pages, JavaScript files, stylesheets, images, and videos.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does a Content Delivery Network (CDN) work?
&lt;/h3&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%2Fi1spnw91uxllqlzfe1zk.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%2Fi1spnw91uxllqlzfe1zk.png" alt="2" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now on &lt;a href="https://www.cloudflare.com/learning/cdn/what-is-a-cdn/" rel="noopener noreferrer"&gt;Cloudflare&lt;/a&gt; how does a CDN work?&lt;/p&gt;

&lt;p&gt;Again a Content delivery network is a network of servers linked together to deliver content as quickly cheaply reliably and securely as possible to improve speed and connectivity a CDN will place servers at exchange points between different networks so if we have generated our site statically our site can be cached at these different servers and ready to serve faster.&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%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1679594225564%2F9z8mnDxHo.png%3Fauto%3Dcompress" 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%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1679594225564%2F9z8mnDxHo.png%3Fauto%3Dcompress" alt="3" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we have a look at this map which tells us what's happening here, we have this &lt;strong&gt;origin server&lt;/strong&gt; right there in &lt;strong&gt;orange&lt;/strong&gt; color, but there are all of these &lt;strong&gt;CDN servers&lt;/strong&gt; that is &lt;strong&gt;blue&lt;/strong&gt; that we see there and the user just has to go to this CDN server. So if we've cached our site out at these other servers they don't have to go all the way here and get more performance, essentially faster load times.&lt;/p&gt;

&lt;p&gt;Now that we've completed a quick discussion of the benefits of Next.js and really what separates it from a traditional React application because this React framework has many benefits for us.&lt;/p&gt;

&lt;h3&gt;
  
  
  Looking at Next.js 13 Documentation
&lt;/h3&gt;

&lt;p&gt;If we look at the documentation, we can see it has a link that says: &lt;a href="https://beta.nextjs.org/docs" rel="noopener noreferrer"&gt;see the new beta docs&lt;/a&gt;. Now, this is an important note because Next.js 13 was recently released and there are some major changes, so any previous Next.js tutorials before Next.js 13 have changed things quite a bit, I must say.&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%2Fy3i5q5kr710fz2gj2l4g.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%2Fy3i5q5kr710fz2gj2l4g.png" alt="4" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One thing I like about &lt;strong&gt;Beta Docs&lt;/strong&gt; is their dark mode.&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%2F0xpgo9xe4c1qu248ic5q.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%2F0xpgo9xe4c1qu248ic5q.png" alt="5" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing Node
&lt;/h2&gt;

&lt;p&gt;The first thing that we need to have is &lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;node.js&lt;/a&gt;, and it's not that we have to know node.js already, but we do need it installed on our system. We can see that it says node.js 16.8 or later.&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%2Fy82d17fbcifkm7ju4y3p.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%2Fy82d17fbcifkm7ju4y3p.png" alt="6" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we visit the &lt;a href="https://nodejs.org/en" rel="noopener noreferrer"&gt;node.js&lt;/a&gt; website, currently they're on &lt;strong&gt;version 18.14.0 LTS&lt;/strong&gt;, which means for long-term support, so we could download and install that if we don't have it already because we're going to need at least &lt;strong&gt;node.js version 16.8 or later&lt;/strong&gt; like we saw on the &lt;a href="https://beta.nextjs.org/docs" rel="noopener noreferrer"&gt;Next.js Beta Docs Page&lt;/a&gt;, we can see there is &lt;strong&gt;support for Mac OS Windows and Linux&lt;/strong&gt; as well, so we should be fine there. Just make sure we have node.js up to date.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a Next.js 13 project
&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%2Fjilkk0a21mvmci11ob0b.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%2Fjilkk0a21mvmci11ob0b.png" alt="7" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we scroll down to the &lt;strong&gt;Beta Docs&lt;/strong&gt; page on the Installation tab, we see &lt;strong&gt;Automatic Installation&lt;/strong&gt;. It has the &lt;code&gt;--experimental-app&lt;/code&gt; at the end, but that's just because we're still in &lt;strong&gt;beta&lt;/strong&gt; and the app directory and everything new about it is still considered experimental, however, they are moving forward with that, which is why we want to go ahead and copy this &lt;code&gt;npx create-next-app@latest --experimental-app&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Click the following clipboard icon (or copy that with Ctrl C) to copy the code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;npx&lt;/span&gt; &lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;latest&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;experimental&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; Let's open the terminal in our IDE environment (Visual Studio Code) by using the menu in the editor: Terminal &amp;gt; New Terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; I'm going to open a project directory, for &lt;strong&gt;nextjs-series&lt;/strong&gt; in the terminal window.&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%2Fxvpugqbjq4xnhhhhfpfb.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%2Fxvpugqbjq4xnhhhhfpfb.png" alt="8" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm going to just &lt;strong&gt;PASTE&lt;/strong&gt; that code we copied before in.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create-next-app@latest &lt;span class="nt"&gt;--experimental-app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3 -&lt;/strong&gt; Now press &lt;strong&gt;ENTER&lt;/strong&gt; and this will install Next.js, but it's going to ask us a few questions, that we have to answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 -&lt;/strong&gt; First, I'm just going to refer to this &lt;strong&gt;nextjs-one&lt;/strong&gt; as the tutorial lesson for our Next.js series.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 -&lt;/strong&gt; After that, it asks if we would like to use typescript, and we choose —&lt;strong&gt;YES&lt;/strong&gt; (in the beta docs even the examples are in typescript) - just press —&lt;strong&gt;ENTER&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6 -&lt;/strong&gt; The next question is about &lt;strong&gt;ESLint&lt;/strong&gt; I'll go ahead and say —&lt;strong&gt;YES&lt;/strong&gt; for that also.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7 -&lt;/strong&gt; Another question is, if we would like to use the source directory —&lt;strong&gt;No I don't&lt;/strong&gt;, because I want to use the new &lt;strong&gt;app directory&lt;/strong&gt; we'll just say —&lt;strong&gt;NO&lt;/strong&gt; to the question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8 -&lt;/strong&gt; The last question is about the import Alias we would like to configure. We just keep it that way, then we just going to press —&lt;strong&gt;ENTER&lt;/strong&gt; and go with the &lt;strong&gt;DEFAULT&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9 -&lt;/strong&gt; Now it's going to install the application.&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%2Fxzx4dfmaeqgxa1djw96c.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%2Fxzx4dfmaeqgxa1djw96c.png" alt="9" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is what these steps would look like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ok to proceed? (y) YES&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; We could probably just do the &lt;strong&gt;y&lt;/strong&gt; or &lt;strong&gt;Yes&lt;/strong&gt; it works as well.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;What is your project named? ... nextjs-one&lt;/li&gt;
&lt;li&gt;Would you like to use TypeScript with this project? ... No / &lt;strong&gt;YES&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Would you like to use ESLint with this project? ... No / &lt;strong&gt;YES&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Would you like to use &lt;code&gt;src/&lt;/code&gt; directory with this project? ... &lt;strong&gt;NO&lt;/strong&gt; / Yes&lt;/li&gt;
&lt;li&gt;What import alias would you like configured? ... @/* ...Just hit &lt;strong&gt;ENTER&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Installation starts...&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%2F48wvr1p17r5l3hswts9n.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%2F48wvr1p17r5l3hswts9n.png" alt="10" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10 -&lt;/strong&gt; I'm going to drag this over so we have Visual Studio code in the full screen and go ahead and show that file tree once again because we'll want to look at all of the new files that we get, and now that we've created our application and we have the directory here, what I want to do is change directory &lt;code&gt;cd&lt;/code&gt; into this here, but I'm just going to close this terminal.&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%2Fau52ulz9zzowudsz5dyz.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%2Fau52ulz9zzowudsz5dyz.png" alt="11" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11 -&lt;/strong&gt; I'm going to go to the file menu, and I'm going to open that folder, which would be &lt;strong&gt;Ctrl + K + Ctrl + O&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%2Fpnx5q4kqroshxjifh8ds.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%2Fpnx5q4kqroshxjifh8ds.png" alt="12" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12 -&lt;/strong&gt; I'm going to open up this &lt;strong&gt;nextjs-series&lt;/strong&gt; and there's our &lt;strong&gt;nextjs-one&lt;/strong&gt;, we open that, and now we can see everything that was installed over here in the file tree.&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%2Fa7e7o03qn2kr37q6mx6s.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%2Fa7e7o03qn2kr37q6mx6s.png" alt="13" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Looking at Files and Folders
&lt;/h3&gt;

&lt;p&gt;Let's quickly discuss what files and folders we have here.&lt;/p&gt;

&lt;p&gt;There is a &lt;code&gt;README.md&lt;/code&gt; file, a file with just some directions, like &lt;code&gt;npm run dev&lt;/code&gt; to go ahead and start our application, it's going to be on &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; and you have more directions below 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%2F0sgvem97jxa5d6nmt0il.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%2F0sgvem97jxa5d6nmt0il.png" alt="14" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have a &lt;code&gt;package.json&lt;/code&gt; file —notice we have some scripts. We're interested mostly in the &lt;code&gt;"dev": "next dev",&lt;/code&gt; script, so we would type &lt;code&gt;npm run dev&lt;/code&gt; when we want to start our development environment. The &lt;code&gt;"build": "next build"&lt;/code&gt; and &lt;code&gt;"start": "next start"&lt;/code&gt; scripts, are things that would be done on the server. There's also something for &lt;code&gt;"lint": "next lint"&lt;/code&gt; as well, so we're only going to be using &lt;code&gt;"dev": "next dev"&lt;/code&gt; for the purpose of this tutorial.&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%2F3xbcpqpiry94kppdn1o0.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%2F3xbcpqpiry94kppdn1o0.png" alt="15" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see the &lt;strong&gt;dependencies&lt;/strong&gt; that were automatically added for us here, such as &lt;code&gt;"typescript": "5.0.2"&lt;/code&gt; and &lt;code&gt;"next": "13.2.4"&lt;/code&gt; and &lt;code&gt;eslint": "8.36.0"&lt;/code&gt; and other dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@types/node"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"18.15.7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@types/react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"18.0.29"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@types/react-dom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"18.0.11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"eslint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"8.36.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"eslint-config-next"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"13.2.4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"next"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"13.2.4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"18.2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react-dom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"18.2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typescript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5.0.2"&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's see another file: the &lt;code&gt;package-lock.json&lt;/code&gt; —that's something we have probably seen before in other React projects 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%2Fxxgjvlo0vs03g7aqbejp.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%2Fxxgjvlo0vs03g7aqbejp.png" alt="16" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then there is a &lt;code&gt;next.config&lt;/code&gt; file —I'll explain more about the file later on.&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%2Fikk2mumwqhhgpqknhgzn.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%2Fikk2mumwqhhgpqknhgzn.png" alt="17" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is also a &lt;code&gt;.eslintrc.json&lt;/code&gt; —a config file for a tool named ESLINT. ESLint is a tool for identifying and reporting on patterns found in &lt;a href="https://tc39.es/ecma262/" rel="noopener noreferrer"&gt;ECMAScript/JavaScript&lt;/a&gt; code, with the goal of making code more consistent and avoiding bugs.&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%2Fes1guuv4rflkxp1c127s.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%2Fes1guuv4rflkxp1c127s.png" alt="18" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's the &lt;code&gt;tsconfig.json&lt;/code&gt; —that's something we have probably seen before if we've used &lt;a href="https://www.typescriptlang.org/" rel="noopener noreferrer"&gt;typescript&lt;/a&gt; so really nothing new there.&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%2F4pxq20cxkq1cv9j1kvw6.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%2F4pxq20cxkq1cv9j1kvw6.png" alt="19" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We also have the &lt;code&gt;.gitignore&lt;/code&gt; file, and that's, of course, related to &lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;Git&lt;/a&gt; and any file that we want to ignore when pushing to &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;Github&lt;/a&gt; or any other version control option.&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%2Fck0b95gd2ip7m24fkpci.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%2Fck0b95gd2ip7m24fkpci.png" alt="20" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, there's a &lt;strong&gt;grayed out&lt;/strong&gt; file: &lt;code&gt;next.env.t.ts&lt;/code&gt; and that's a file that we should not change, and it says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;// NOTE: This file should not be edited // see
https://nextjs.org/docs/basic-features/typescript for more information.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fkcmw9s6f81v9f2idvox2.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%2Fkcmw9s6f81v9f2idvox2.png" alt="21" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This file should not be edited, we'll just leave it like that.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's talk about the &lt;strong&gt;public&lt;/strong&gt; directory —this is where some images, some &lt;strong&gt;svgs&lt;/strong&gt;, and an &lt;strong&gt;icon&lt;/strong&gt; file are. This is where we would put any static resources that we would want, and images are a good example of that.&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%2Fow2ueambx4b736npheti.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%2Fow2ueambx4b736npheti.png" alt="22" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we have the &lt;strong&gt;node_modules&lt;/strong&gt; folder, which we should be familiar with.&lt;/p&gt;

&lt;p&gt;We can think of the node_modules folder as a cache for the external modules that our project depends on. When we &lt;code&gt;npm install&lt;/code&gt; them, they are downloaded from the web and copied into the node_modules folder, and &lt;strong&gt;Node.js&lt;/strong&gt; is trained to look for them there when we import them (without a specific path).&lt;/p&gt;

&lt;p&gt;Because the node_modules folder can always be completely recreated from scratch by simply reinstalling all the dependent modules, I refer to it as a cache. (That should be listed in our project folders).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important Note:&lt;/strong&gt; The &lt;code&gt;node_modules&lt;/code&gt; folder contains generated code. This is not code we've written, and we should never make any updates to the files inside &lt;code&gt;node_modules&lt;/code&gt; because there's a pretty good chance they'll get overwritten the next time we install some modules.&lt;/p&gt;
&lt;/blockquote&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%2Fed9ovu5ng6l3v05x7t12.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%2Fed9ovu5ng6l3v05x7t12.png" alt="23" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then the new &lt;strong&gt;app&lt;/strong&gt; directory appears, and this is where we see our basic pages.&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%2Fjeahyidsl7jx4w5hxgox.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%2Fjeahyidsl7jx4w5hxgox.png" alt="24" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is where we have the basic &lt;code&gt;page.tsx&lt;/code&gt; not an &lt;code&gt;index.tsx&lt;/code&gt; and that's what we're using here for &lt;strong&gt;typescript 'tsx' files&lt;/strong&gt; —Like I said this is the basic &lt;code&gt;page.tsx&lt;/code&gt; that we'll see once we start our application.&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%2Fz90t71lvzgeey8iqpsga.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%2Fz90t71lvzgeey8iqpsga.png" alt="25" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then there are some styling files, like here in a module &lt;code&gt;page.module.css&lt;/code&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%2Fqq1nr9ztlwj51sgkwd25.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%2Fqq1nr9ztlwj51sgkwd25.png" alt="26" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are also some styles in the file &lt;code&gt;globals.css&lt;/code&gt; that we have right here:&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%2F3x5s9cqbabwbce473ukp.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%2F3x5s9cqbabwbce473ukp.png" alt="27" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is also a &lt;code&gt;layout.tsx&lt;/code&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%2F2v5uoggny5f6nxfkjs9j.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%2F2v5uoggny5f6nxfkjs9j.png" alt="28" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important Note&lt;/strong&gt;: &lt;strong&gt;Next.js&lt;/strong&gt; supports routing. With the &lt;strong&gt;react-app&lt;/strong&gt; maybe we've used &lt;strong&gt;react-router&lt;/strong&gt; before; we won't have to do that with &lt;strong&gt;Next.js&lt;/strong&gt;, it's already built-in.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Accessing the Development Site
&lt;/h2&gt;

&lt;p&gt;So let's go ahead and open a terminal window once again, and I'm going to type in the following:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This will start our basic application. We can see it starting up and we see all of this information here in the terminal but here is the URL we can press &lt;strong&gt;control&lt;/strong&gt; and then just &lt;strong&gt;mouse click&lt;/strong&gt; to follow that click and it's going to launch that in Chrome.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ready - started server on 0.0.0.0: 3000, url: http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the development server is running, you will be able to browse to &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;. or maybe &lt;a href="http://localhost:3333" rel="noopener noreferrer"&gt;http://localhost:3333&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%2Ffyo9ikmkpzrw1jd9hprk.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%2Ffyo9ikmkpzrw1jd9hprk.png" alt="29" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is our basic page, visible in the 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%2Fktr80jun62ulym78q29r.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%2Fktr80jun62ulym78q29r.png" alt="30" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have the full page that has started, and this was that &lt;code&gt;page.tsx&lt;/code&gt; that we saw inside of the &lt;strong&gt;app directory&lt;/strong&gt; —Now as cool as this looks, let's go ahead and make some changes.&lt;/p&gt;

&lt;p&gt;Let's just copy one of these headers down here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h2&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"{inter.className}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Docs &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;-&lt;span class="ni"&gt;&amp;amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then remove &lt;code&gt;Docs &amp;lt;span&amp;gt;-&amp;amp;gt;&amp;lt;/span&amp;gt;&lt;/code&gt; because we won't need this arrow.&lt;/p&gt;

&lt;p&gt;Paste this code twice somewhere in Line 34 and Line 36:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"{inter.className}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Hello&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;h2&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s"&gt;"{inter.className}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Welcome to...&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fprgsgwwp9cr1hx8k2o9h.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%2Fprgsgwwp9cr1hx8k2o9h.png" alt="31" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we save this file, we should see that our development environment reloads the page quickly. Everything updates immediately, and now we have our &lt;strong&gt;Hello!&lt;/strong&gt; and &lt;strong&gt;Welcome to...&lt;/strong&gt; Next.js 13 page instead of what we previously had, and it happens that fast.&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%2Frrxgaxz0idnfuk9bkrw5.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%2Frrxgaxz0idnfuk9bkrw5.png" alt="32" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;We've learned more about what Next.js is and why companies are using it and we've learned how to start the basic Next.js development environment and get our first app going.&lt;/p&gt;

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

&lt;p&gt;In our next lesson, we’ll create our first page and set up a layout.&lt;/p&gt;

&lt;p&gt;Remember to keep striving for progress over perfection, and a little progress every day will go a very long way.&lt;br&gt;
In this series, we’re going through the basics of learning the static site generator, &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>javascript</category>
      <category>cdn</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Why Use Pre-Configured Cloudcannon Themes in Your Jamstack Project (and How to Install Them)?</title>
      <dc:creator>Jose Calvario</dc:creator>
      <pubDate>Tue, 21 Mar 2023 12:11:36 +0000</pubDate>
      <link>https://dev.to/joshhortt/why-use-pre-configured-cloudcannon-themes-in-your-jamstack-project-and-how-to-install-them-31nd</link>
      <guid>https://dev.to/joshhortt/why-use-pre-configured-cloudcannon-themes-in-your-jamstack-project-and-how-to-install-them-31nd</guid>
      <description>&lt;p&gt;As a website developer, you are always on the lookout for ways to create beautiful, functional websites quickly and efficiently. One way to do this is by using pre-configured Cloudcannon themes.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Intro&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This guide will walk through the steps required to get your Next.js pre-built Cloudcannon site ready to configure and deploy to Cloudcannon.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Prerequisites&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If you intend to run this lab on your system, please ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A basic understanding of working with the terminal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A Laptop or PC with Windows installed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A Internet connection&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;Git&lt;/a&gt; installed on your local machine (optional). For more details on accomplishing this, review &lt;a href="https://creativelightbox.net/how-to-install-git-bash-for-windows-to-your-local-system" rel="noopener noreferrer"&gt;Installing &amp;amp; Setting Up Git on Windows&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; account. For more details on accomplishing this, review &lt;a href="https://creativelightbox.net/how-to-get-started-with-git-and-github" rel="noopener noreferrer"&gt;How to get started with Git and GitHub&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The latest version of &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; is installed on your machine.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What this Guide Covers:&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Benefits of using pre-configured Cloudcannon themes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloning a pre-built Website Template repository from GitHub&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Setting up your Jamstack project using the Terminal&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Instructions for running the project&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Accessing the development site&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The folder structure of the template&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Editing the components and the overall theme&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deploying the project on Cloudcannon (external resource)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Benefits of using pre-configured Cloudcannon themes&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Cloudcannon themes are pre-built &lt;a href="https://cloudcannon.com/templates/" rel="noopener noreferrer"&gt;website templates&lt;/a&gt; that come with all the necessary files and plugins to create a complete website. This means that you don't have to start from scratch every time you create a website. Instead, you can use a pre-configured Cloudcannon theme as a starting point.&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%2Fju5egbeeqindrhuwzvaa.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%2Fju5egbeeqindrhuwzvaa.png" width="800" height="2398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here are some benefits of using pre-configured Cloudcannon themes:&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Saves Time and Effort&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;One of the biggest benefits of using pre-configured Cloudcannon themes is that it saves you time and effort. With a pre-built theme, you don't have to spend hours designing and coding a website from scratch. Instead, you can simply customize the theme to suit your needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Professional Design&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Cloudcannon themes are designed by professional web designers, which means they are visually appealing and user-friendly. These themes are designed using best practices and are optimized for performance, which means your website will look great and load quickly.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Mobile-Friendly&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;More and more people are using mobile devices to browse the internet, which means your website needs to be mobile-friendly. Cloudcannon themes are designed to be responsive, which means they will look great on any device.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Easy to Customize&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Another benefit of using pre-configured Cloudcannon themes is that they are easy to customize. You can customize the theme to match your branding, add your own content, and make any necessary changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Affordable&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Creating a website from scratch can be expensive, especially if you hire a web designer or developer. Using a pre-configured Cloudcannon theme is much more affordable since the cost of the theme is much lower than hiring someone to create a website from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The pre-built Website Template "Justice"&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The pre-built website template &lt;strong&gt;Justice&lt;/strong&gt; provides an easy starting point for building a Law firm themed business template for Next.js. Browse through a &lt;a href="https://mysterious-shelter.cloudvent.net/" rel="noopener noreferrer"&gt;live demo&lt;/a&gt;. Increase the web presence of a law firm or business with this configurable theme. You can also check out the live demo of this template.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Features&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Contact form&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pre-built pages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pre-styled components&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Blog&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Post category pages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Disqus comments for posts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Staff and author system&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configurable footer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimised for editing in CloudCannon&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;RSS/Atom feed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SEO tags&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Google Analytics&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Getting Started&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Effort&lt;/strong&gt;: 10 mins&lt;/p&gt;

&lt;p&gt;To create a new project, we'll use the justice-nextjs-template from Cloudcannon's Github repository.&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%2F9aoqn4bbejfz7eqo5qi2.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%2F9aoqn4bbejfz7eqo5qi2.png" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; Access Cloudcannon's justice-nextjs-template Github repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; Click Use this Template, then&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 -&lt;/strong&gt; Click Create New Repository&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%2Fjbzybxk3if3t3ugw05l2.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%2Fjbzybxk3if3t3ugw05l2.png" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A new Window will open.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;4 -&lt;/strong&gt; Enter a repository name. For example &lt;strong&gt;law-firm&lt;/strong&gt;. Optionally, add a description of your repository &amp;amp; choose the Owner. That should be you!&lt;/p&gt;

&lt;p&gt;Then click &lt;strong&gt;Create Repository from template&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%2F5ui3aj7yufuu149mxn0z.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%2F5ui3aj7yufuu149mxn0z.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This will generate a Repository on your Github account. You just become the owner of this template.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Clone the repository&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A clone is a local copy of a remote repository. Before you can clone the repository, you first need its HTTPS URL, which provides secure access to it.&lt;/p&gt;

&lt;p&gt;To clone the repository, complete the following steps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; Click the button &lt;strong&gt;Code&lt;/strong&gt; on the repository's main page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; Click the clipboard icon to copy the URL. Make sure the HTTPS tab is active.&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%2Fslpjsphhfn2vl4qydxpw.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%2Fslpjsphhfn2vl4qydxpw.png" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 -&lt;/strong&gt; Open the terminal in your IDE environment by using the menu in the editor: Terminal &amp;gt; New Terminal.&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%2Fugh0x2av466wwl8to78e.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%2Fugh0x2av466wwl8to78e.png" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 -&lt;/strong&gt; Head over your Projects Directory in your Terminal&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%2Fdzbpu93h9bwdzvfv7l4b.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%2Fdzbpu93h9bwdzvfv7l4b.png" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 -&lt;/strong&gt; Paste the following command with the HTTPS URL you copied earlier:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; git clone &amp;lt;your repository HTTPS URL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fll4qz9zkism6nbqzmqxw.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%2Fll4qz9zkism6nbqzmqxw.png" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For example:&lt;/strong&gt; Click the clipboard icon to copy the code, but change the &lt;strong&gt;repository User.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; git clone https://github.com/Joshhortt/demo-website-starter.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6 -&lt;/strong&gt; Hit &lt;strong&gt;ENTER&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%2Fqadvozcmr5oi1cm6szav.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%2Fqadvozcmr5oi1cm6szav.png" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7 -&lt;/strong&gt; Now change &lt;code&gt;cd&lt;/code&gt; into that directory and open up your project directory by typing the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;law-firm
code &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fn6pb6lab9bxnll4tyu0d.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%2Fn6pb6lab9bxnll4tyu0d.png" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Running the Project&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Running the project in development is very straightforward. To run the project, head over to the ‘website’ folder and run the following commands:&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%2F1e0s0rs5qc5jush5hf73.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%2F1e0s0rs5qc5jush5hf73.png" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; In your terminal, run &lt;code&gt;yarn install&lt;/code&gt; or &lt;code&gt;npm install&lt;/code&gt; which is going to install the dependencies.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fiktmyiqye5s7rse79dml.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%2Fiktmyiqye5s7rse79dml.png" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; After that, run &lt;code&gt;yarn dev&lt;/code&gt; or &lt;code&gt;npm run dev&lt;/code&gt; which is going to start up a local development server, which you can open up in a new tab.&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&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%2Fdb9bij9yvzda5k38guok.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%2Fdb9bij9yvzda5k38guok.png" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Accessing the Development Site&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Once the development server is running, you will be able to browse to &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; or maybe &lt;a href="http://localhost:3333" rel="noopener noreferrer"&gt;http://localhost:3333&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; Click on &lt;strong&gt;Follow Link&lt;/strong&gt; which you can open up in a new tab. (url: &lt;a href="http://localhost:3333" rel="noopener noreferrer"&gt;localhost:3333&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%2Fqvcc0t0jqfel6zu8qrnf.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%2Fqvcc0t0jqfel6zu8qrnf.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; Once it's loaded, Voilá! you can see your new website, where you have a complete website with a home page, an about page, a services page, a contact page a blog page with some blog posts that you can edit and configure the way you want.&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%2Fxtk5dprz5i8iq1j1ny1z.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%2Fxtk5dprz5i8iq1j1ny1z.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Now I am not going to dig too much into the code, but if you have a look at the Folder structure of this Ready Website you can see that this looks like a pretty awesome Business Website ready to use.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Folder Structure (Website)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This section provides you with a better understanding of the folder structure.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;law-firm
|
|-- .cloudcannon
|   |-- initial-site-settings.json
|-- components
|   |-- layouts
|   |   |-- default.jsx
|   |   |-- page.jsx
|   |   |-- post.jsx
|   |-- icon.jsx
|   |-- staff-member.jsx
|   |-- post-summary.jsx 
|   |-- post-summary-details.jsx
|-- content
|   |-- pages
|   |   |-- about.md
|   |   |-- blog.md
|   |   |-- contact-success.md
|   |   |-- contact.md
|   |   |-- index.md
|   |   |-- services.md
|   |   |-- terms.md
|   |-- posts
|   |   |-- business-mergers.md
|   |   |-- real-estate-flipping.md
|   |-- staff-members
|   |   |-- jane-doe.md
|   |   |-- john-doe.md
|   |   |-- _defaults.md  
|-- data
|   |-- company.json
|   |-- footer.json
|   |-- seo.json
|   |-- site.json
|-- lib
|   |-- data.js
|   |-- rss.js
|-- pages
|   |-- blog
|   |   |-- &lt;span class="o"&gt;[&lt;/span&gt;slug].jsx
|   |   |-- index.jsx
|   |-- 404.jsx
|   |-- &lt;span class="o"&gt;[&lt;/span&gt;slug].jsx
|   |-- about.jsx
|   |-- contact.jsx
|   |-- index.jsx
|   |-- _app.jsx
|   |-- _document.jsx
|-- public
|   |-- uploads
|   |   |-- building.jpg
|   |-- apple-touch-icon.png
|   |-- favicon.png
|   |-- touch-icon.png
|-- styles
|   |-- forms.scss
|   |-- _layout.scss
|   |-- _typography.scss
|   |-- cloudcannon.scss
|   |-- main.scss
|-- .eslintrc.json
|-- .gitignore
|-- LICENSE
|-- README.md
|-- _screenshot.png
|-- cloudcannon.config.cjs
|-- next-sitemap.config.js
|-- next.config.js
|-- package-lock.json
|-- package.json
|-- siteicon.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Folders &amp;amp; Files&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;.cloudcannon&lt;/strong&gt; Initial config file&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;components&lt;/strong&gt; This folder includes another folder called &lt;strong&gt;layouts&lt;/strong&gt; and four files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;layouts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;icon.jsx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;staff-member.jsx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;post-summary.jsx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;post-summary-details.jsx&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;components/layouts&lt;/strong&gt; - Within layouts, are three files. Where you can update the &lt;em&gt;Call to action description, Navbar names, Footer links, Add the privacy policy link to your footer, update the posts author title&lt;/em&gt; and much more..&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;default.jsx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;page.jsx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;post.jsx&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;content&lt;/strong&gt; - Within content, are three folders with markdown files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;pages&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;posts&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;staff-members&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;content/pages&lt;/strong&gt; - These are all the Template pages.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;about.md&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;blog.md&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;contact-success.md&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;contact.md&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;index.md&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;services.md&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;terms.md&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;content/posts&lt;/strong&gt; These are the template Blog Posts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;business-mergers.md&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;real-estate-flipping.md&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;content/staff-members&lt;/strong&gt; - These are the posts authors, But you can make them your Company team members If you prefer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;_defaults.md&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;jane-doe.md&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;john-doe.md&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;data&lt;/strong&gt; - Within data, are four JSON files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;company.json - Where the company's details are.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;footer.json - Where the Footers' pages links &amp;amp; social icons are.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;seo.json - Where the site and author details are.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;site.json - Where you can add your Google Analytics and Disqus.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;lib&lt;/strong&gt; - Within lib, are two files. Normally You don´t need to change anything on these files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;data.js&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;rss.js&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;pages&lt;/strong&gt; Within pages, are one folder and seven files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;blog&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;404.jsx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[slug].jsx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;_app.jsx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;_document.jsx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;about.jsx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;contact.jsx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;index.jsx&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;pages/blog&lt;/strong&gt; - Within blog, are two files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;[slug].jsx&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;index.jsx&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;public&lt;/strong&gt; - Within public, are one folder called uploads and three PNG files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;uploads&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;apple-touch-icon.png&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;favicon.png&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;touch-icon.png&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;public/uploads&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;building.jpg - This is the Home page Banner Image.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;styles&lt;/strong&gt; - Within styles, are five SCSS files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;forms.scss&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;_layout.scss&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;_typography.scss&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;cloudcannon.scss&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;main.scss&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;root directory&lt;/strong&gt; - The other project file are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;.eslintrc.json&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;.gitignore&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;LICENSE&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;README.md&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;_screenshot.png&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;cloudcannon.config.cjs - &lt;strong&gt;Important&lt;/strong&gt; &lt;a href="https://cloudcannon.com/documentation/articles/setting-global-configuration/" rel="noopener noreferrer"&gt;Global configuration file&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;next-sitemap.config.js&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;next.config.js&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;package-lock.json&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;package.json&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;siteicon.png&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Initial Setup&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add your site and author details in &lt;code&gt;content/data/seo.json&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add your Google Analytics and Disqus keys to &lt;code&gt;content/data/site.json&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Get a workflow going to see your site's output (with CloudCannon or Next.js locally).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Editing the Template&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Justice&lt;/strong&gt; is already optimised for adding, updating and removing pages, staff, posts, company details and footer elements in &lt;a href="https://app.cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Posts&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add, update or remove a post in the Posts collection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;strong&gt;Staff Author&lt;/strong&gt; field links to members in the &lt;strong&gt;Staff collection&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Change the defaults when new posts are created in &lt;code&gt;content/posts/_defaults.md&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Contact Form&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Preconfigured to work with &lt;a href="https://app.cloudcannon.com/" rel="noopener noreferrer"&gt;CloudCannon&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sends email to the address listed in company details.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Staff&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reused around the site to save multiple editing locations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Footer&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Exposed as a data file to give clients better access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set in the &lt;strong&gt;Data / Footer section&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Company details&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Reused around the site to save multiple editing locations. Set in the &lt;strong&gt;Data / Company section&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you want to read my latest article explaining &lt;strong&gt;How to configure and Edit Jamstack sites on cloud cannon&lt;/strong&gt; please &lt;a href="https://creativelightbox.net/how-to-configure-cloudcannon-collections-to-enable-post-page-content-editing" rel="noopener noreferrer"&gt;click here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Deploying the project to Cloudcannon&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you want to deploy this template or your own edited Website to cloudcannon, I'll explain in detail how you can achieve this step. Please read this article &lt;a href="https://creativelightbox.net/how-to-deploy-jamstack-sites-to-cloudcannon" rel="noopener noreferrer"&gt;How to deploy Jamstack sites to cloudcannon&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Need further assistance?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ask the &lt;a href="https://cloudcannon.com/support/" rel="noopener noreferrer"&gt;Cloudcannon team&lt;/a&gt; or leave a comment. I' 'll try to get back to you as soon as I can.&lt;/p&gt;

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

&lt;p&gt;Using pre-configured Cloudcannon themes can save you time and effort, provide you with a professional design, ensure your website is mobile-friendly, and be easily customized to suit your needs – all while keeping your budget in check. So the next time you need to create a website, consider using a pre-configured Cloudcannon theme as a starting point.&lt;/p&gt;

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

&lt;p&gt;If you want to follow along with more advanced stuff in the next article. I'll talk about &lt;strong&gt;How to add a new site to enable branching workflows on cloudcannon?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for the read! Now go practice &amp;amp; build something awesome!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>cloudcannon</category>
      <category>nextjs</category>
      <category>jamstack</category>
      <category>ssg</category>
    </item>
    <item>
      <title>How to Configure cloudcannon collections to enable Post &amp; Page content editing?</title>
      <dc:creator>Jose Calvario</dc:creator>
      <pubDate>Sat, 11 Mar 2023 17:29:03 +0000</pubDate>
      <link>https://dev.to/joshhortt/how-to-configure-cloudcannon-collections-to-enable-post-page-content-editing-5aob</link>
      <guid>https://dev.to/joshhortt/how-to-configure-cloudcannon-collections-to-enable-post-page-content-editing-5aob</guid>
      <description>&lt;p&gt;Next.js is one of the most popular React-based SSGs. CloudCannon makes it easy to store your content in your Git Repository and have non-developers update it. Better yet, the editing is all done in context with minimal configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;This guide will walk through the steps required to get your Next.js site you previously built, editable, and living on CloudCannon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hands-on Lab:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Effort&lt;/strong&gt;: 25 mins&lt;/p&gt;

&lt;h3&gt;
  
  
  Objectives
&lt;/h3&gt;

&lt;p&gt;After completing this reading, you will be able to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Edit your deployed Static Site within cloudcannon UI.&lt;/li&gt;
&lt;li&gt;Configure cloudCannon collections locally to enable Posts content editing.&lt;/li&gt;
&lt;li&gt;Configure cloudCannon collections locally to enable Pages content editing.&lt;/li&gt;
&lt;li&gt;Make Git-based changes through the CloudCannon UI.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;If you intend to run this lab on your system, please ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A basic understanding of working with the terminal.&lt;/li&gt;
&lt;li&gt;A Laptop or PC with Windows installed&lt;/li&gt;
&lt;li&gt;A Internet connection&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;Git&lt;/a&gt; installed on your local machine. For more details on accomplishing this, review &lt;a href="https://creativelightbox.net/how-to-get-started-with-branches-using-git-commands-on-a-local-repository#heading-installing-git-on-windows" rel="noopener noreferrer"&gt;Installing &amp;amp; Setting Up Git on Windows&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; account.&lt;/li&gt;
&lt;li&gt;The latest version of &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; is installed on your machine.&lt;/li&gt;
&lt;li&gt;The cloned &lt;a href="https://github.com/Joshhortt/demo-website-starter" rel="noopener noreferrer"&gt;demo website starter&lt;/a&gt; deployed to cloudcannon already up and running.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is a follow-up tutorial, it does require you to have created the Hands-on-Lab, as covered in the article &lt;a href="https://creativelightbox.net/how-to-deploy-jamstack-sites-to-cloudcannon" rel="noopener noreferrer"&gt;How to deploy Jamstack sites to cloudcannon&lt;/a&gt; to make the most out of it.&lt;/p&gt;
&lt;/blockquote&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%2Fvfx35ulj7wsu097hexhb.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%2Fvfx35ulj7wsu097hexhb.png" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So let’s get started with another capability of cloudcannon that can give us the ability to actually manage and edit this content inside of our project.&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%2F182lljmvtvba4sjax01s.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%2F182lljmvtvba4sjax01s.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can actually go through and mainly find all the files here,&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%2Ffungzqpy0dxua00m6heq.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%2Ffungzqpy0dxua00m6heq.png" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;that we actually want to edit such as if we wanted to edit our homepage,&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%2Fv51uxxm6mpfjcfdih8pt.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%2Fv51uxxm6mpfjcfdih8pt.png" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;or the about page or any other page, we can edit the source right here:&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%2F0ah3zsa95xeewakldk2f.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%2F0ah3zsa95xeewakldk2f.png" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But we have other options by using a configuration locally in our project so that cloudcannon can actually see what we define as our content.&lt;/p&gt;

&lt;p&gt;If we head over to the &lt;a href="https://cloudcannon.com/documentation/articles/defining-your-collections/" rel="noopener noreferrer"&gt;cloudcannon documentation&lt;/a&gt;,what we ultimately want to do is &lt;strong&gt;Defining our collection&lt;/strong&gt;, and we can do that by defining our collections &lt;strong&gt;Configuration&lt;/strong&gt; along with all the other options that we're going to actually need, which we're going to walk through now.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; It's recommended to spend some time to read Cloudannon Documentation&lt;/p&gt;
&lt;/blockquote&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%2Fotvxzdddjo9miwc02yw7.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%2Fotvxzdddjo9miwc02yw7.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm going to create a file in the root of my project called &lt;strong&gt;cloudcannon.config.js&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%2F8xu2ojf6zwfohiott1gy.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%2F8xu2ojf6zwfohiott1gy.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then I start by defining our collection configuration.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's walk through this new code:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; I start by defining a &lt;strong&gt;module exports.&lt;/strong&gt; I'm going to set that to a new object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; Then we want to add a &lt;strong&gt;key&lt;/strong&gt; for our actual collection of content that we're about to set up, and we have two things that we want to eventually set up.&lt;/p&gt;

&lt;p&gt;Our &lt;strong&gt;pages&lt;/strong&gt; and our &lt;strong&gt;posts&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%2F8o6oqecwpggscdx6o51u.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%2F8o6oqecwpggscdx6o51u.png" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 -&lt;/strong&gt; Following that, I insert the following block of code into our Posts collection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;   &lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;src/_posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;frontmatter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/posts/[slug]&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If we look inside of the &lt;strong&gt;pages directory&lt;/strong&gt; &amp;amp; &lt;strong&gt;posts directory&lt;/strong&gt; we have the setup that shows: &lt;code&gt;/posts/[slug]&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&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%2Ffp1tipgq165jfvceekbs.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%2Ffp1tipgq165jfvceekbs.png" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; When I add &lt;code&gt;/posts/[slug]&lt;/code&gt; it's not going to be something that has to line up one-to-one with the actual name of that javascript file &lt;strong&gt;[postSlug].js&lt;/strong&gt;. It's going to just be this slug in the brackets because that's what cloudcannon is going to understand as the slug. Now that we have our post finally set up, let's get this up to cloudcannon and see what happens this time after we commit these changes.&lt;/p&gt;
&lt;/blockquote&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%2F7e3thnqt0kssn7gh9w54.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%2F7e3thnqt0kssn7gh9w54.png" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We save the file, and then we're going to commit and push these changes to Github.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Add Posts object to collection config"&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Cloudcannon automatically updates these changes for us.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We can actually see that under &lt;strong&gt;Files&lt;/strong&gt;. We now have another &lt;strong&gt;src&lt;/strong&gt; option where our &lt;strong&gt;posts&lt;/strong&gt; are.&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%2Fpaxluyu1r3vzss8ry7of.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%2Fpaxluyu1r3vzss8ry7of.png" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we click on that we can now see all those different posts that we had locally as files.&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%2Femhw1kmm4xsg06srvtz5.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%2Femhw1kmm4xsg06srvtz5.png" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we click into one again we can see that we can open up one of these &lt;strong&gt;posts&lt;/strong&gt; with a &lt;strong&gt;Content Editor&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%2Fvsee5lyj6s0yb9eobxax.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%2Fvsee5lyj6s0yb9eobxax.png" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A nice looking editor, not just the source of the code, where we can make changes to any of the content in our site, including all the frontmatter that belongs to each and every one of those markdown files that is visible on the left: &lt;strong&gt;Title, Date&lt;/strong&gt; &amp;amp; &lt;strong&gt;Categories.&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%2Fboorh82ach4grsayw5x8.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%2Fboorh82ach4grsayw5x8.png" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now the cool thing is we can select this drop-down and we can see that we have a couple of different options for how we want to interact with this file particularly we still have this option to edit the source of it by clicking on the &lt;strong&gt;Source Editor.&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%2Fxsb5xxehnuqd6rlzca3x.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%2Fxsb5xxehnuqd6rlzca3x.png" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're not familiar with the structure of &lt;a href="https://www.markdownguide.org/" rel="noopener noreferrer"&gt;markdown&lt;/a&gt; we have this &lt;strong&gt;frontmatter&lt;/strong&gt; at the top which just defines a few data points which is what we saw on the left of the post we had opened with the &lt;strong&gt;Content Editor&lt;/strong&gt; before. The rest of it, is going to be our content which is parsed inside of our project and then we can actually edit it as content, if we prefer right inside this &lt;strong&gt;Source editor.&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%2Fq4bhsclhpkbu0dzvqfqq.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%2Fq4bhsclhpkbu0dzvqfqq.png" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Making Page content editable and making Git-based changes through the CloudCannon UI
&lt;/h2&gt;

&lt;p&gt;But we also want to manage our &lt;strong&gt;pages&lt;/strong&gt; like this right, so I'm going to go ahead and &lt;strong&gt;copy &amp;amp; paste&lt;/strong&gt; this object and I'm going to &lt;strong&gt;rename everything&lt;/strong&gt; instead of &lt;strong&gt;posts&lt;/strong&gt; to &lt;strong&gt;pages.&lt;/strong&gt; You can see the new updated block of code below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pages&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src/_pages&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;frontmatter&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/[slug]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's walk through this new code:&lt;/p&gt;

&lt;p&gt;Just like I did with &lt;strong&gt;Posts&lt;/strong&gt; before I'm going to make sure that the &lt;strong&gt;name&lt;/strong&gt; is actually &lt;strong&gt;capitalized&lt;/strong&gt;, and the biggest difference here is, we want to make sure that we're passing in the &lt;strong&gt;url&lt;/strong&gt; as the appropriate url. Now, we don't actually have pages in front of the &lt;strong&gt;slug&lt;/strong&gt; like this; if we look at the file inside of &lt;strong&gt;pages&lt;/strong&gt;, it just exists at the &lt;strong&gt;root&lt;/strong&gt; of the &lt;strong&gt;pages directory&lt;/strong&gt; called &lt;strong&gt;[pageSlug].js&lt;/strong&gt;. The way that works is if we don't manually define that file, it's going to fall back to that dynamic page slug and create it using that template, so we're going to leave this just as &lt;code&gt;/[slug]&lt;/code&gt; where it's going to be able to create those files for us.&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%2Ficke0oddpe3s5var4chj.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%2Ficke0oddpe3s5var4chj.png" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's the final javascript code of &lt;strong&gt;cloudcannon.config.js&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;collections_config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;src/_posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;frontmatter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/posts/[slug]&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Pages&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;src/_pages&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;frontmatter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/[slug]&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just like before, once it is finished, we're going to &lt;strong&gt;commit&lt;/strong&gt; and &lt;strong&gt;push&lt;/strong&gt; these changes to Github.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Add Pages object to collection config"&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Just like before, Cloudcannon automatically updates these changes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We can see now in our Dashboard that Github updated the &lt;strong&gt;cloudcannon.config.js&lt;/strong&gt; file in just a matter of seconds.&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%2Flwrintx49vlhko8zekvj.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%2Flwrintx49vlhko8zekvj.png" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have the &lt;strong&gt;pages&lt;/strong&gt; area:&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%2Fvesmy6pvggm5qvhha1e9.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%2Fvesmy6pvggm5qvhha1e9.png" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Where we can select our &lt;strong&gt;about page&lt;/strong&gt; and edit any of the content that we'd like.&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%2Ff6gazxgpdghqnhifhone.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%2Ff6gazxgpdghqnhifhone.png" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now in terms of actually &lt;strong&gt;editing&lt;/strong&gt; content, we can do this right inside of this &lt;strong&gt;Content editor.&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%2Fzrioum2o42rb05wszwkl.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%2Fzrioum2o42rb05wszwkl.png" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For instance, if I wanted to add a new sentence, "Please read the articles by order"&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%2Ftd4a8385hpa1k013u8ms.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%2Ftd4a8385hpa1k013u8ms.png" width="800" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And I click &lt;strong&gt;save&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%2Fkvs4tfocuylq9cc6szig.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%2Fkvs4tfocuylq9cc6szig.png" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What that's going to do is actually update that file inside of my &lt;strong&gt;Git project repository,&lt;/strong&gt; since these files are &lt;strong&gt;Git&lt;/strong&gt; based and then it's going to &lt;strong&gt;Redeploy&lt;/strong&gt; which we saw just happened automatically.&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%2Fu6k22qtcnwykr1seraif.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%2Fu6k22qtcnwykr1seraif.png" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we look back at our GitHub project we can see that we have this new commit called &lt;strong&gt;updated source pages about via cloudcannon&lt;/strong&gt; where it actually adds that change and removes the &lt;strong&gt;heading 2&lt;/strong&gt; from the first sentence.&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%2Fkq8tckeskjn8wcq59gep.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%2Fkq8tckeskjn8wcq59gep.png" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And to prove that it works we can see once it's done we can actually head back to our &lt;strong&gt;Dashboard&lt;/strong&gt; and see that the &lt;strong&gt;About page&lt;/strong&gt; was just &lt;strong&gt;updated&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%2Ff6dbjqwzda3jke5rcvr3.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%2Ff6dbjqwzda3jke5rcvr3.png" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now to see it in real-time, open up our site. We can navigate over to the &lt;strong&gt;about page&lt;/strong&gt; and we see that the sentence is now added and live...&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%2Ftp57vwufnm5s6fw0u4wk.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%2Ftp57vwufnm5s6fw0u4wk.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In addition to providing us with a great way to manage our content directly using the Content Editor, cloudcannon also allows us to edit and redeploy our production projects out to the web very quickly.&lt;/p&gt;

&lt;p&gt;Are you a fan of the jamstack let me know in the comments and let me know what's your favorite part of building with the &lt;a href="https://creativelightbox.net/why-the-jamstack-is-the-future-of-web-development" rel="noopener noreferrer"&gt;Jamstack&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;If you want to follow along with more advanced stuff in the next article. I'll talk about &lt;strong&gt;How to add a new site to enable branching workflows on cloudcannon?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for the read! Now go practice &amp;amp; build something awesome!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>nextjs</category>
      <category>cloudcannon</category>
      <category>cms</category>
    </item>
    <item>
      <title>How to deploy Jamstack sites to cloudcannon?</title>
      <dc:creator>Jose Calvario</dc:creator>
      <pubDate>Sat, 04 Mar 2023 15:12:59 +0000</pubDate>
      <link>https://dev.to/joshhortt/how-to-deploy-jamstack-sites-to-cloudcannon-31lg</link>
      <guid>https://dev.to/joshhortt/how-to-deploy-jamstack-sites-to-cloudcannon-31lg</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;We're going to learn how we can easily deploy a Jamstack app and manage git-based Markdown content with cloudcannon. Cloudcannon gives you and your team awesome collaborative features with a great UX developer experience that generally allows you to deploy sites that are going to be performant for your user experience. If you want to learn more about all the awesome features cloudcannon provides on top of what we're going to work through, make sure you head over to &lt;a href="https://cloudcannon.com/" rel="noopener noreferrer"&gt;cloudcannon&lt;/a&gt; where you can sign up for your account for a free trial...&lt;/p&gt;

&lt;h2&gt;
  
  
  Hands-on Lab:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Effort&lt;/strong&gt; : 30 mins&lt;/p&gt;

&lt;h3&gt;
  
  
  Objectives
&lt;/h3&gt;

&lt;p&gt;After completing this reading, you will be able to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone project files from a remote repository using the command line.&lt;/li&gt;
&lt;li&gt;Install Dependencies.&lt;/li&gt;
&lt;li&gt;Create a new Repository on Github.&lt;/li&gt;
&lt;li&gt;Signup for Cloudcannon.&lt;/li&gt;
&lt;li&gt;Add a new site synced to a remote repository on Github.&lt;/li&gt;
&lt;li&gt;Commit and push changes to a remote repository.&lt;/li&gt;
&lt;li&gt;Deploy new site to cloudcannon.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;If you intend to run this lab on your system, please ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A basic understanding of working with the terminal.&lt;/li&gt;
&lt;li&gt;A Laptop or PC with Windows installed&lt;/li&gt;
&lt;li&gt;A Internet connection&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;Git&lt;/a&gt; installed on your local machine. For more details on accomplishing this, review &lt;a href="https://creativelightbox.net/how-to-get-started-with-branches-using-git-commands-on-a-local-repository#heading-installing-git-on-windows" rel="noopener noreferrer"&gt;Installing &amp;amp; Setting Up Git on Windows&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; account.&lt;/li&gt;
&lt;li&gt;The latest version of &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; is installed on your machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tools &amp;amp; Frameworks
&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%2Ffs81yky2q90nix2bsf34.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%2Ffs81yky2q90nix2bsf34.png" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're not familiar with the &lt;a href="https://creativelightbox.net/why-the-jamstack-is-the-future-of-web-development" rel="noopener noreferrer"&gt;Jamstack&lt;/a&gt;, it's traditionally based on being able to provide users static sites where that first load isn't going to have to do any kind of rendering on the server, instead, we use our static site generator or framework of choice, which pulls in all of our content at compile time, where we then can publish that site basically wherever we want, such as an awesome provider like cloudcannon.&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%2Fkzxq30uakzxpjieiy4k6.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%2Fkzxq30uakzxpjieiy4k6.png" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To see how this works, we're going to use the &lt;a href="https://reactjs.org/" rel="noopener noreferrer"&gt;REACT framework&lt;/a&gt; and &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Nextjs&lt;/a&gt; which give us a ton of features out of the box, including routing and data fetching, and it just helps us get super productive with our apps.&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%2F2mfat20n6pc7pz0j9fot.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%2F2mfat20n6pc7pz0j9fot.png" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now if you're already familiar with &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Nextjs&lt;/a&gt; maybe you're wondering, doesn't it need a server? And while we do this at compile time, we can use tools like &lt;a href="https://nextjs.org/docs/basic-features/data-fetching/get-static-props" rel="noopener noreferrer"&gt;get static props&lt;/a&gt; and then statically export our site, which we'll see how we can do that, and then deliver a pure static HTML site with all the assets included.&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%2F1leohx1auj6l2ix0gj0o.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%2F1leohx1auj6l2ix0gj0o.png" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a new app from a demo website starter
&lt;/h2&gt;

&lt;p&gt;Now, particularly, we're going to use this &lt;a href="https://github.com/Joshhortt/demo-website-starter" rel="noopener noreferrer"&gt;demo website starter&lt;/a&gt; that I put together, which is just going to give us a simple blog website out of the box with some markdown capabilities that are generating the content for the site.&lt;/p&gt;

&lt;p&gt;If you want to follow along, you can find the link to this starter right &lt;a href="https://github.com/Joshhortt/demo-website-starter" rel="noopener noreferrer"&gt;here&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%2Fj18e0cstt6w8kbvins42.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%2Fj18e0cstt6w8kbvins42.png" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; So to get started, I'm going to go ahead and copy the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nv"&gt;$ &lt;/span&gt;git clone https://github.com/Joshhortt/demo-website-starter.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F6978qys8x84t8imkdr68.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%2F6978qys8x84t8imkdr68.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; I'm going to go ahead and paste that code into my terminal.&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%2F85hmnq02lad0l6watko4.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%2F85hmnq02lad0l6watko4.png" width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 -&lt;/strong&gt; I'm going to type &lt;code&gt;cloudcannon-app&lt;/code&gt; after that URL because I want my app to have a nicer name.&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%2Fdenpb2qpy4vrwht7hvwz.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%2Fdenpb2qpy4vrwht7hvwz.png" width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It's going to clone down that project from GitHub to your chosen Local Directory&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;4 -&lt;/strong&gt; I can now change &lt;code&gt;cd&lt;/code&gt; into that directory.&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%2Fuwddjpg65i7cekmdllsu.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%2Fuwddjpg65i7cekmdllsu.png" width="800" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm going to run &lt;code&gt;yarn install&lt;/code&gt; or &lt;code&gt;npm install&lt;/code&gt; which is going to install the dependencies.&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%2F97m06v94s6i9xn2crzuz.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%2F97m06v94s6i9xn2crzuz.png" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 -&lt;/strong&gt; After that, I'm going to run &lt;code&gt;yarn dev&lt;/code&gt; or &lt;code&gt;npm run dev&lt;/code&gt; which is going to start up a local development server, which I can open up in a new tab. (url: &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&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%2F01awa7l25hnzi8objyts.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%2F01awa7l25hnzi8objyts.png" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 -&lt;/strong&gt; Once it's loaded, we can see our new website, where we just have some blog posts on our main page, an about page, and a newsletter page, and it's just some sample content that we have in there to get started with our new website.&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%2Fmo3lk353avjuf00ijy2y.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%2Fmo3lk353avjuf00ijy2y.png" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we're not going to dig too much into the code, but if we go to pages and go to &lt;strong&gt;index.js&lt;/strong&gt; we can see that for the most part, this looks like a pretty basic react application, but if we scroll down to the bottom, we see we have this function that we talked about earlier called &lt;code&gt;get static props&lt;/code&gt; which is going to allow us to do, is get our data at compile time, meaning before we upload it and deploy it, that way we can save all that hard work for the network request for when it's getting built and we can grab all that post data and pass it in as props into our application and not make our user pay for that actual networking time but ultimately get this application up and deployed over to cloudcannon.&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%2Fmu19pegj1et4hulen062.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%2Fmu19pegj1et4hulen062.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Set up a new site on CloudCannon
&lt;/h2&gt;

&lt;p&gt;So let's see how we can do that now if this is our first time logging into cloudcannon&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%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1677939227705%2F55852e35-1ed3-40b5-9042-ee723ccecbd8.png%2520align%3D" 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%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1677939227705%2F55852e35-1ed3-40b5-9042-ee723ccecbd8.png%2520align%3D" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll see that we're going to start on our account summary and we don't have any sites yet so we want to click &lt;strong&gt;return to sites&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%2Fn3hd8chrdjgocrsyd3nm.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%2Fn3hd8chrdjgocrsyd3nm.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is going to show us this UI&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%2Fpkbn3hf3zgjx3nks43mu.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%2Fpkbn3hf3zgjx3nks43mu.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we can hit &lt;strong&gt;add your first site&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A new page opens up. We have a few options but we're going to choose to &lt;strong&gt;connect our own files&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%2Fhm1ep1j8yanrfbpaei06.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%2Fhm1ep1j8yanrfbpaei06.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can say whatever our site name is going to be. Let's call it &lt;strong&gt;cloudcannon-app&lt;/strong&gt; or whatever you want your site to be called.&lt;/p&gt;

&lt;p&gt;We can then choose our source, and in particular, we're going to use &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;github&lt;/a&gt; for this walkthrough.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: We also have support for &lt;a href="https://about.gitlab.com/" rel="noopener noreferrer"&gt;gitlab&lt;/a&gt; and &lt;a href="https://bitbucket.org/" rel="noopener noreferrer"&gt;bitbucket&lt;/a&gt; or even uploading a folder from our computer if we'd like to.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Click on &lt;strong&gt;Authenticate&lt;/strong&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%2Fyntagqtxujp2cndih61j.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%2Fyntagqtxujp2cndih61j.png" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After selecting github and authenticating, this webpage opens up for us to give cloudcannon permission to access our github repository.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Just click &lt;strong&gt;Authorize Cloudcannon&lt;/strong&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%2Fek53w4vwr30w6kcuiu44.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%2Fek53w4vwr30w6kcuiu44.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we're going to need to select our repository, this means we're going to need to get our site up to a github before we can move forward.&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%2F7r5uzdyle4609wuo1ubc.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%2F7r5uzdyle4609wuo1ubc.png" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm going to go ahead and first create a new repository over on github.&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%2Fn1gogyd43lgniqciy8vi.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%2Fn1gogyd43lgniqciy8vi.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm going to call that &lt;strong&gt;cloudcannon-app&lt;/strong&gt; just like I did locally, and I'm also going to click &lt;strong&gt;New repository&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%2Fb4bxw68wc1qrkxbz55fy.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%2Fb4bxw68wc1qrkxbz55fy.png" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we have a few instructions on how we can get our local project up and running now because of the way that NEXTjs already initialized git for us, and it already has a &lt;strong&gt;main branch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A new window will pop up with some git instructions, which we should type into our terminal.&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%2F4egm0kv0hl3twji3q2pl.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%2F4egm0kv0hl3twji3q2pl.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All we need to do is these last two steps.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git remote add origin https://github.com/YOUR-USER-NAME/cloudcannon-app.git
&lt;span class="nv"&gt;$ &lt;/span&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Note: Just in case &lt;code&gt;git&lt;/code&gt; wasn't initialized follow all these commands below&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git init
&lt;span class="nv"&gt;$ &lt;/span&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"first commit"&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git branch &lt;span class="nt"&gt;-M&lt;/span&gt; main
&lt;span class="nv"&gt;$ &lt;/span&gt;git remote add origin https://github.com/YOUR-USER-NAME/cloudcannon-app.git
&lt;span class="nv"&gt;$ &lt;/span&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now after we finish pushing all files to our newly created github remote repository, if I refresh the page, we can see that I have my new github repository with all those files.&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%2Fplp2tvamyyf8ygnvqihd.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%2Fplp2tvamyyf8ygnvqihd.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Going back over cloudcannon, I'm going to refresh the page and then reselect my github repository file source, that way inside of this search for your repository once it collects all my repositories I can search for my &lt;strong&gt;cloudcannon-app&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%2Frd925558bvpt0z3vxy6a.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%2Frd925558bvpt0z3vxy6a.png" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see that it will pop up right here, and we can see that I have an option for either using my existing branch or creating a new branch. Now, because I only have a main branch at this point, I'm just going to use that and select &lt;strong&gt;main&lt;/strong&gt; as that'll be the default production branch.&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%2Farunf1qmswwhe3lxxgxq.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%2Farunf1qmswwhe3lxxgxq.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, click &lt;strong&gt;sync files&lt;/strong&gt; to keep moving this process forward.&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%2Fed4oom844zn0ewvq19wb.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%2Fed4oom844zn0ewvq19wb.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we can see that cloudcannon has actually detected what kind of site we have, particularly in NEXTjs, but we can also see that we have the ability to define our build options where we have our preserved paths, ours is going to be &lt;strong&gt;node modules&lt;/strong&gt;. That makes a lot of sense. Note that we don't have any &lt;strong&gt;environment variables&lt;/strong&gt; at this time, but if you do, this would be the place to add them.&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%2Fiuy9xo67gy21ksijtcqq.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%2Fiuy9xo67gy21ksijtcqq.png" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When we go further down to our &lt;strong&gt;install options&lt;/strong&gt;, like our &lt;strong&gt;command line options&lt;/strong&gt;, this has &lt;code&gt;npm install&lt;/code&gt; by default. Because I'm using &lt;code&gt;yarn&lt;/code&gt; locally, I'm just going to go ahead and use &lt;code&gt;yarn install&lt;/code&gt; but you can keep &lt;code&gt;npm install&lt;/code&gt; if you decide to use &lt;code&gt;npx&lt;/code&gt; and &lt;code&gt;npm&lt;/code&gt; for your project, and then also for the build command: &lt;code&gt;yarn build&lt;/code&gt; or leave &lt;code&gt;npm build&lt;/code&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%2Fzutwgtstrkf0fu0c6ysd.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%2Fzutwgtstrkf0fu0c6ysd.png" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now the tricky thing for the build command is that when we're using NEXTjs, we want to make sure that we're statically compiling this, and we'll see in a second that what we want to do is not only &lt;code&gt;yarn build&lt;/code&gt; this, but we also want to do something called &lt;code&gt;next export&lt;/code&gt; which we don't currently have an option for in our project.&lt;/p&gt;

&lt;p&gt;So we're going to leave this as &lt;code&gt;yarn build&lt;/code&gt; for now, and we're going to set the output path to &lt;code&gt;out&lt;/code&gt; because that's where the folder is going to get compiled to, but then we can scroll down and we can see that we have two other options where we have to &lt;strong&gt;use the beta integration version&lt;/strong&gt; of the cloudcannon reader, which we're going to select to check because we want cloudcannon to try to read the information of our repository, and then finally we can just leave the include get folder off as we don't need that part of our system.&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%2Fqlqpd1jt839owzjai6j4.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%2Fqlqpd1jt839owzjai6j4.png" width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, as I said, we can click &lt;strong&gt;build site&lt;/strong&gt; and that's going to go through and run all the commands and try to deploy our site once cloudcannon gets through all those steps,&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%2F8q46b34dif9jj0rdel46.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%2F8q46b34dif9jj0rdel46.png" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see that mine was deployed to the random name of &lt;strong&gt;green-cassowary&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%2Fdhdgbhsolq9ntxzv8str.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%2Fdhdgbhsolq9ntxzv8str.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If I open that up in a new tab we can see that it's &lt;strong&gt;Page Not Found&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%2Fq0mzfcs7pjrldzinyw0k.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%2Fq0mzfcs7pjrldzinyw0k.png" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we click over to the status tab inside cloudcannon and I look inside, I can see all the build logs. I'm going to particularly select NEXTjs, and if I look through, it says that it cannot find that &lt;strong&gt;out&lt;/strong&gt; directory as it doesn't exist, and that's because we're only currently building our NEXTjs site and now we also need to export it, as I said a while back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Statically export the NEXT.js app
&lt;/h2&gt;

&lt;p&gt;Inside the project, I'm going to open up my &lt;code&gt;package.json&lt;/code&gt; file, and we can see under &lt;code&gt;scripts&lt;/code&gt; that we already have a few options, and particularly, we see our &lt;code&gt;build script&lt;/code&gt; going on, where all it's doing is running &lt;code&gt;next build&lt;/code&gt; and that's great, but we want to also export it, so I'm going to tack on two &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; (and) signs and I'm going to add also next export right after &lt;code&gt;next build&lt;/code&gt; which is going to export it to static files for us, so we can even test locally.&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%2F9jszwau9mgsmc5l32opc.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%2F9jszwau9mgsmc5l32opc.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inside the terminal, run &lt;code&gt;yarn build&lt;/code&gt; or &lt;code&gt;npm run build&lt;/code&gt;, where we can already see that it ran &lt;code&gt;next build &amp;amp;&amp;amp; next export&lt;/code&gt; and we can see that as it goes through, it's going to first build the site, just as we'd expect, and then we can see how it's going to work when we try to export it.&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%2Flnwh5vtmjenrktcdmhyd.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%2Flnwh5vtmjenrktcdmhyd.png" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see after it goes through the build process that we had a &lt;strong&gt;successful export&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And we can even look inside our project under the out directory, where we see all those HTML files, which are exactly what's going to get deployed out to cloudcannon.&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%2Fkkt3kku3a4zpnkwq9k7t.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%2Fkkt3kku3a4zpnkwq9k7t.png" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm going to run the following commands to commit my changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"updating build script"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What's going to happen is that as soon as we push that out, we can see that cloudcannon is already &lt;strong&gt;building&lt;/strong&gt; that new site with that new commit automatically without us having to trigger a &lt;code&gt;new build&lt;/code&gt;. That way, we can always make sure that we're keeping our production branch nice and up-to-date.&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%2Famb57m89agdv26m3q846.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%2Famb57m89agdv26m3q846.png" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once it's complete, we can open up that URL again, and we can now see that our new site is deployed to cloudcannon.&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%2Fyi1mk6f37sr6gce0milo.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%2Fyi1mk6f37sr6gce0milo.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Cloudcannon gives us a great way to deploy our projects to the web.&lt;/p&gt;

&lt;p&gt;Are you a fan of the Jamstack? Let me know in the comments what's your favorite part of the building with the Jamstack is.&lt;/p&gt;

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

&lt;p&gt;If you want to follow along with more advanced stuff in the next article I'll talk about &lt;strong&gt;Making Page content editable and making Git-based changes through the CloudCannon UI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for the read! Now go practice &amp;amp; build something awesome!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to use Reduce in JavaScript</title>
      <dc:creator>Jose Calvario</dc:creator>
      <pubDate>Mon, 20 Feb 2023 11:00:12 +0000</pubDate>
      <link>https://dev.to/joshhortt/how-to-use-reduce-in-javascript-4pel</link>
      <guid>https://dev.to/joshhortt/how-to-use-reduce-in-javascript-4pel</guid>
      <description>&lt;p&gt;The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce" rel="noopener noreferrer"&gt;reduce&lt;/a&gt; function of an &lt;code&gt;Array&lt;/code&gt; is one of the most versatile functions in JavaScript. With it you can accomplish a lot of the functions from the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array" rel="noopener noreferrer"&gt;Array&lt;/a&gt; and &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math" rel="noopener noreferrer"&gt;Math&lt;/a&gt; objects. It's job is to start with an array, and reduce those elements into some other type of data... which sounds vague, but you could use it to convert from an array to an object, an array to another array, an array to a number or an array to a boolean. Understanding how it works opens up a world of possibilities.&lt;/p&gt;



&lt;p&gt;A few of the Math/Array functions we will cover in this article:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min" rel="noopener noreferrer"&gt;Math.min()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max" rel="noopener noreferrer"&gt;Math.max()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/length" rel="noopener noreferrer"&gt;Array.length&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" rel="noopener noreferrer"&gt;Array.prototype.map()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find" rel="noopener noreferrer"&gt;Array.prototype.find()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every" rel="noopener noreferrer"&gt;Array.prototype.every()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some" rel="noopener noreferrer"&gt;Array.prototype.some()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat" rel="noopener noreferrer"&gt;Array.prototype.flat()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let's Recreate Reduce
&lt;/h2&gt;

&lt;p&gt;Before we see all of reduce's flexibility, let's understand how it works! Reduce's job is to iterate over each element of an array, calling a function (callback), passing both the current element, and what is called an "accumulator" value. The callback's job is to take the accumulator and the array element, and return the new version of that accumulator.&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%2F2f1w6q4xaztbq2ryyonh.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%2F2f1w6q4xaztbq2ryyonh.png" alt="reduce" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This may mean taking an accumulator that is a number and returning its value + 1, or taking an accumulator which is an array and returning that array with an additional element on the end. It's up to you, depending what type of data you would like to &lt;em&gt;reduce&lt;/em&gt; your array to.&lt;/p&gt;

&lt;p&gt;We also need an &lt;em&gt;initial value&lt;/em&gt;, which will be the first value our accumulator takes before the callback is ever called.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;initial&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// start our accumulator off as the initial value&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;initial&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// iterate over each element in the array&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// pass the accumulator and current element to callback function&lt;/span&gt;
    &lt;span class="c1"&gt;// override the accumulator with the callback's response&lt;/span&gt;
    &lt;span class="nx"&gt;acc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// return the final accumulator value&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Learn 10 different use cases of reduce()
&lt;/h2&gt;

&lt;p&gt;The JavaScript reduce() method is very versatile, with some really handy use cases, even though it is widely considered to be the most confusing of all JavaScript iterators.&lt;/p&gt;

&lt;p&gt;Let's take a look at some use cases for the JavaScript reduce() method.&lt;/p&gt;

&lt;h3&gt;
  
  
  Counting Array Length
&lt;/h3&gt;

&lt;p&gt;The data we are starting with is an array of objects which represent people:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;people&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Leigh&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Jenny&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Heather&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Although &lt;code&gt;people.length&lt;/code&gt; would be the more performant and better solution, we can count an array's length by using reduce. Our initial value is 0, and each iteration will add 1 to the previous accumulated value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;people&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  1. Sum Numbers
&lt;/h3&gt;

&lt;p&gt;We can sum numbers using reduce. Much like the length example above, we can start with 0, and instead of adding 1 upon each iteration, we can add the &lt;code&gt;person.age&lt;/code&gt; property to our accumulated value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;people&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Mapping with Reduce
&lt;/h3&gt;

&lt;p&gt;Yup... you can map using reduce! In this case our initial value is an empty array, and upon each iteration we can return an array with its previous value, plus the newest value added to the end of our array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;people&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Array to Object
&lt;/h3&gt;

&lt;p&gt;This is a technique I use all the time when I have an array of some object with an &lt;code&gt;id&lt;/code&gt;, and I want to easily access these objects by their ID, rather than having to find them in an array each time. By having an object with each person's ID as the key, I can access them using the ID's value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;people&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Find Max Value
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;Math.max()&lt;/code&gt; function can be immitated using reduce by checking if the current element's value is greater than the accumulator. If it is, that becomes (by returning the value) the new max value, otherwise the previous accumulator (current max value) is returned.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;people&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Find Min Value
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;Math.min()&lt;/code&gt; function can be immitated using reduce by checking if the current element's value is less than the accumulator. If it is, that becomes (by returning the value) the new min value, otherwise the previous accumulator (current min value) is returned.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;people&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6. Find Matching Element
&lt;/h3&gt;

&lt;p&gt;The reduce callback function when immitating &lt;code&gt;Array.prototype.find()&lt;/code&gt; contains three possibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The accumulator is not null, meaning we have already found the value, so let's return it.&lt;/li&gt;
&lt;li&gt;The current array element meets our criteria, so let's return it.&lt;/li&gt;
&lt;li&gt;By returning null we tell the next iteration that the value has not yet been found.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;people&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Leigh&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7. Check If Every Value Matches
&lt;/h3&gt;

&lt;p&gt;When checking if every value matches a specific criteria, we will start with the assumption that every value will match... very optimistic!! If the accumulator becomes false, our callback will continue to return false, since every value must match, and otherwise will return &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt; for the current element.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;people&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8. Check If Some Value Matches
&lt;/h3&gt;

&lt;p&gt;Checking if some value matches a condition in our array involves a bit of pessimism. We'll start off with the assumption of &lt;code&gt;false&lt;/code&gt;, and our callback function will return true as soon as the accumulator is true for the first time, and otherwise will return &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt; on the current element.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;people&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  9. Group and Count Occurrences
&lt;/h3&gt;

&lt;p&gt;As we've seen in the "Array to Object" example above, we can convert an array to an object, but this time we are looking to count the occurrences for a given key, in this case the &lt;code&gt;status&lt;/code&gt;. Our return value will take the existing accumulated object, adding 1 for the current key's value (or initializing it to 0 if this is the first occurrence).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;orders&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pending&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pending&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cancelled&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;4&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;shipped&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;orders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  10. Flatten Nested Arrays
&lt;/h3&gt;

&lt;p&gt;In this last example we will start with an array of nested arrays, and reduce it into a flattened array of values. Because we will need to recursively reduce (flatten) arrays, we'll need to give our callback function a name (so it can be called within itself).&lt;/p&gt;

&lt;p&gt;If the current element is an &lt;code&gt;Array&lt;/code&gt;, it means we must reduce it until we arrive at at an element that can be appended to the end of the array we are producing. The &lt;em&gt;initial&lt;/em&gt; value of our inner reduce call is the &lt;em&gt;current&lt;/em&gt; accumulator value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;folders&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;index.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;flatten.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;map.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;any.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;all.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;count.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;flatten&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;flatten&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;acc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;folders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;flatten&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Mistakes to Avoid
&lt;/h2&gt;

&lt;p&gt;If you don’t pass in an initial value, reduce will assume the first item in your array is your initial value. This worked fine in the first few examples because we were adding up a list of numbers.&lt;/p&gt;

&lt;p&gt;If you’re trying to tally up fruit, and you leave out the initial value then things get weird. Not entering an initial value is an easy mistake to make and one of the first things you should check when debugging.&lt;/p&gt;

&lt;p&gt;Another common mistake is to forget to return the total. You must return something for the reduce function to work. Always double check and make sure that you’re actually returning the value you want.&lt;/p&gt;

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

&lt;p&gt;Knowing the use cases of some built-in functions in JavaScript can help you to improve your coding skills. Learning the use cases can gain some insights for you. You can implement some functions elegantly.&lt;br&gt;
The reduce() method in JavaScript is also a useful built-in function. If you know how to use it, it is powerful. It helps you to write a smaller number of code lines, as in the example of summing numbers and so on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools, Tips &amp;amp; References
&lt;/h2&gt;

&lt;p&gt;Everything in this post came from a fantastic video on Youtube &lt;a href="https://youtu.be/NiLUGy1Mh4U" rel="noopener noreferrer"&gt;"Reduce: 10 Different Examples"&lt;/a&gt;. I give &lt;a href="https://www.leighhalliday.com/" rel="noopener noreferrer"&gt;Leigh Halliday&lt;/a&gt; full credit and I am grateful to him for everything I now know about using the Reduce Method In JavaScript​. I have tried to rewrite much of what he explains in my own words as an exercise to better understand each concept. Also, it’s easier for me to reference an article, as opposed to a video, when I need to remember how to do something.&lt;br&gt;
The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce" rel="noopener noreferrer"&gt;MDN Reduce documentation&lt;/a&gt; labels what I called a total the accumulator. It is important to know this because most people will refer to it as an &lt;code&gt;accumulator&lt;/code&gt; if you read about it online. Some people call it &lt;code&gt;prev&lt;/code&gt; as in previous value. It all refers to the same thing. I found it easier to think of a total when I was learning reduce.&lt;br&gt;
If you would like to practice using reduce I recommend signing up to &lt;a href="https://www.freecodecamp.org" rel="noopener noreferrer"&gt;freeCodeCamp&lt;/a&gt; and completing as many of the &lt;a href="https://www.freecodecamp.org/learn/#nested-collapseIntermediateAlgorithmScripting" rel="noopener noreferrer"&gt;intermediate algorithms&lt;/a&gt; as you can using the reduce javascript method.&lt;/p&gt;

&lt;p&gt;Thanks for the read! Now go practice &amp;amp; build something awesome!&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>plugin</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>How to install Git Bash for Windows to your local system?</title>
      <dc:creator>Jose Calvario</dc:creator>
      <pubDate>Mon, 13 Feb 2023 19:54:53 +0000</pubDate>
      <link>https://dev.to/joshhortt/how-to-install-git-bash-for-windows-to-your-local-system-5bi5</link>
      <guid>https://dev.to/joshhortt/how-to-install-git-bash-for-windows-to-your-local-system-5bi5</guid>
      <description>&lt;h2&gt;
  
  
  What is Git Bash?
&lt;/h2&gt;

&lt;p&gt;Git Bash for Windows is simply a package that includes both &lt;em&gt;Git&lt;/em&gt; and &lt;em&gt;Bash&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Git is an open-source version control system for tracking source code changes when developing software. It keeps a commit history that allows you to revert to a stable state in case you make errors in your code. Git also enables multiple developers to collaborate on the same code base.&lt;/p&gt;

&lt;p&gt;Bash is a Unix command-line shell. The name is an acronym for &lt;em&gt;Bourne-Again Shell&lt;/em&gt;. It comes with useful Unix commands like cat, ssh, SCP, etc., which are not usually found on Windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Objectives
&lt;/h3&gt;

&lt;p&gt;After completing this reading, you will be able to &lt;strong&gt;Install Git Bash to your Local Computer&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;If you intend to run this lab on your system, please ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Laptop or PC with Windows installed&lt;/li&gt;
&lt;li&gt;A Internet connection&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installing Git Bash for Windows
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Estimated time&lt;/strong&gt;: 10 minutes&lt;/p&gt;

&lt;p&gt;To install Git Bash for Windows to your local system, complete the following steps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; Go to the &lt;a href="https://cdn.hashnode.com/res/hashnode/image/upload/v1676314408790/l5FTrY60a.png?auto=compress" rel="noopener noreferrer"&gt;Git download image 1&lt;/a&gt;. Click &lt;strong&gt;Download [version number] for Windows&lt;/strong&gt;, as shown in the following image:&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%2Fapcoh1n53l21bhlcc23b.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%2Fapcoh1n53l21bhlcc23b.png" alt="image 2" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You will be redirected to a new page and the download will start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If the download doesn't start, click &lt;strong&gt;Click here to download manually&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; Go to the folder where you saved the file and double-click to open it. Click &lt;strong&gt;Run&lt;/strong&gt; to begin the installation.&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%2Fn3w4oan1axfyenw3i15r.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%2Fn3w4oan1axfyenw3i15r.png" alt="image 3" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 -&lt;/strong&gt; A &lt;strong&gt;GNU General Public License&lt;/strong&gt; information window will open. Now Click &lt;strong&gt;Next&lt;/strong&gt; to begin the installation.&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%2F44nr2uslfz4pg9nrm8qo.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%2F44nr2uslfz4pg9nrm8qo.png" alt="image 4" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 -&lt;/strong&gt; Select the location where you want to install Git Bash.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: It's recommended that you simply install to the default location. Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&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%2Fl83wgbt0b8kduly1gv4t.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%2Fl83wgbt0b8kduly1gv4t.png" alt="image 5" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 -&lt;/strong&gt; Choose the components you want to install, or simply leave the default options selected. Click &lt;strong&gt;Next&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%2Fz4bgcw0oacxwpw79t0wq.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%2Fz4bgcw0oacxwpw79t0wq.png" alt="image 6" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6 -&lt;/strong&gt; You can change the name of the start menu folder or simply leave the default name &lt;strong&gt;Git&lt;/strong&gt; as is. Click &lt;strong&gt;Next&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%2Fh2qhr8ezsta0ijbnushe.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%2Fh2qhr8ezsta0ijbnushe.png" alt="image 7" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7 -&lt;/strong&gt; Select the default editor for Git to use.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: You can use VIM, VSCode, etc. Just choose clicking the Dropdown Arrow to choose your preferred one. Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&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%2Fto3g6qsfft8btggnb51j.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%2Fto3g6qsfft8btggnb51j.png" alt="image 8" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8 -&lt;/strong&gt; Choose how you want to use Git from the command line. Click &lt;strong&gt;Next&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%2Ffqj14iijb7z2b0u5ld07.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%2Ffqj14iijb7z2b0u5ld07.png" alt="image 9" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9 -&lt;/strong&gt; Select &lt;strong&gt;Use the OpenSSL library&lt;/strong&gt;. Click &lt;strong&gt;Next&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%2Fkaiyhyh2yof0k3wphtqg.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%2Fkaiyhyh2yof0k3wphtqg.png" alt="image 10" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10 -&lt;/strong&gt; Configure your line ending conversions for Windows by selecting the default option, &lt;strong&gt;Checkout Windows-style, commit Unix-style line endings&lt;/strong&gt;. Click &lt;strong&gt;Next&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%2Fuv9ytirvt0slzcr7bwf1.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%2Fuv9ytirvt0slzcr7bwf1.png" alt="image 11" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11 -&lt;/strong&gt; Configure your terminal emulator to use with Git Bash by selecting the default option, &lt;strong&gt;Use MinTTY(the default terminal of MSYS2)&lt;/strong&gt;. Click &lt;strong&gt;Next&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%2Fcjrdsmdomkttgmeh9u82.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%2Fcjrdsmdomkttgmeh9u82.png" alt="image 12" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12 -&lt;/strong&gt; Configure the default behavior for a &lt;code&gt;git pull&lt;/code&gt; by selecting &lt;strong&gt;Default (fast-forward or merge)&lt;/strong&gt;. Click &lt;strong&gt;Next&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%2Fy8ski1eq2cj27epcbjrm.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%2Fy8ski1eq2cj27epcbjrm.png" alt="image 13" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13 -&lt;/strong&gt; Select any additional options you want to install. (The default option is sufficient to use Git Bash successfully.) Click &lt;strong&gt;Next&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%2Fwurwo0r0weexs5u823jx.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%2Fwurwo0r0weexs5u823jx.png" alt="image 14" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14 -&lt;/strong&gt; You can enable experimental options if you choose to. By enabling these options, you will be able to try newer features that are still being developed. However, you do not have to select any experimental options to use Git Bash. Click &lt;strong&gt;Install&lt;/strong&gt; to complete the installation with the options you have chosen. The installation runs and when complete, a Completing the Git Setup Wizard window opens.&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%2Fwiyf52il9veg6k5fe1t4.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%2Fwiyf52il9veg6k5fe1t4.png" alt="image 15" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;15 -&lt;/strong&gt;Leave the checkboxes selected and click &lt;strong&gt;Next&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%2Fo0u55z1hxku56uad6tic.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%2Fo0u55z1hxku56uad6tic.png" alt="image 16" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Git Bash terminal opens. You are now able to enter Git and Bash commands.&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%2F8pt062nh0efyi0g7xqjv.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%2F8pt062nh0efyi0g7xqjv.png" alt="image 17" width="800" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Congratulations, you have now successfully installed and launched Git Bash for Windows.&lt;/p&gt;

&lt;p&gt;Download this Git commands &lt;a href="https://phoenixnap.com/kb/wp-content/uploads/2021/11/git-commands-cheat-sheet-by-pnap-v2.pdf" rel="noopener noreferrer"&gt;cheat sheet&lt;/a&gt; to have all Git commands in one place for future use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for the read! Now go practice &amp;amp; build something awesome!&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Generate and add an SSH key to GitHub</title>
      <dc:creator>Jose Calvario</dc:creator>
      <pubDate>Mon, 06 Feb 2023 18:49:55 +0000</pubDate>
      <link>https://dev.to/joshhortt/how-to-generate-and-add-an-ssh-key-to-github-1fe1</link>
      <guid>https://dev.to/joshhortt/how-to-generate-and-add-an-ssh-key-to-github-1fe1</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When dealing with a GitHub repository using commands, you will frequently need to identify yourself with your &lt;strong&gt;username&lt;/strong&gt; and &lt;strong&gt;password&lt;/strong&gt;. Instead, you can use an &lt;strong&gt;SSH key to authenticate&lt;/strong&gt; yourself. As a result, entering the &lt;strong&gt;email&lt;/strong&gt; and &lt;strong&gt;password&lt;/strong&gt; will no longer be necessary.&lt;/p&gt;

&lt;p&gt;SSH keys come in pairs, with a &lt;strong&gt;public key&lt;/strong&gt; shared with services such as GitHub and a &lt;strong&gt;private key&lt;/strong&gt; held solely on your machine. You will be allowed access if the keys match.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an SSH key?
&lt;/h2&gt;

&lt;p&gt;An &lt;strong&gt;SSH key&lt;/strong&gt; is an access credential in the &lt;strong&gt;SSH protocol&lt;/strong&gt;. Its function is similar to that of user names and passwords, but the keys are primarily used for &lt;strong&gt;automated processes&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hands-on Lab:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Effort&lt;/strong&gt; : 30 mins&lt;/p&gt;

&lt;h3&gt;
  
  
  Objectives
&lt;/h3&gt;

&lt;p&gt;After completing this reading, you will be able to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Generate an SSH key&lt;/li&gt;
&lt;li&gt; Adding an SSH key to GitHub&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;If you intend to run this lab on your system, please ensure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A basic understanding of working with the bash terminal&lt;/li&gt;
&lt;li&gt;A Laptop or PC with Windows installed&lt;/li&gt;
&lt;li&gt;A Internet connection&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;Git&lt;/a&gt; installed on your local machine. For more details on accomplishing this, review &lt;a href="https://creativelightbox.net/how-to-get-started-with-branches-using-git-commands-on-a-local-repository#heading-installing-git-on-windows" rel="noopener noreferrer"&gt;Installing &amp;amp; Setting Up Git on Windows&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; account.&lt;/li&gt;
&lt;li&gt;The latest version of &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt; is installed on your machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1. Creating a GitHub account (optional)
&lt;/h3&gt;

&lt;p&gt;To create an account in &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, complete the following steps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; Go to the &lt;strong&gt;&lt;a href="https://github.com/login" rel="noopener noreferrer"&gt;Join GitHub page&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://github.com/signup?ref_cta=Sign+up&amp;amp;ref_loc=header+logged+out&amp;amp;ref_page=%2F&amp;amp;source=header-home" rel="noopener noreferrer"&gt;signup&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;create an account&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If you already have a GitHub account, &lt;strong&gt;log in&lt;/strong&gt; now.&lt;/p&gt;
&lt;/blockquote&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%2Fv86rea9f9680u687sl72.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%2Fv86rea9f9680u687sl72.png" alt="GitHub sign in/sign up" width="800" height="383"&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; For more details on accomplishing this, review:&lt;br&gt;
&lt;a href="https://creativelightbox.net/how-to-get-started-with-git-and-github#heading-getting-started-with-github" rel="noopener noreferrer"&gt;How to get started with git and github&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Generating an SSH key
&lt;/h3&gt;

&lt;p&gt;To generate an SSH key, complete the following steps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; Launch a terminal. If you are using Windows, launch Git Bash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; Type the following command in your terminal, replacing &lt;code&gt;your email address&lt;/code&gt; with the email address that is linked to your GitHub account. When you have typed the command, press Enter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen &lt;span class="nt"&gt;-t&lt;/span&gt; rsa &lt;span class="nt"&gt;-b&lt;/span&gt; 4096 &lt;span class="nt"&gt;-C&lt;/span&gt; &lt;span class="s2"&gt;"your email address"&lt;/span&gt;
&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;A new SSH key is generated.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;3 -&lt;/strong&gt; You will be prompted to enter a directory to save the key. You can simply press Enter to accept the default location, which is a .ssh folder in the home directory. This means you will be able to locate the key in &lt;code&gt;~/.ssh/id_rsa&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 -&lt;/strong&gt; You will be prompted to choose a passphrase. You also have the option not to create a passphrase. To skip the passphrase, press Enter twice to confirm that the passphrase is empty.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 - Optional&lt;/strong&gt;: To navigate to the .ssh directory, and check the contents of the directory, run the following commands in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/.ssh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and then,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;When you list the contents of the .ssh directory, you should see &lt;code&gt;id_rsa&lt;/code&gt; and &lt;code&gt;id_rsa.pub&lt;/code&gt; in the list of contents, where &lt;code&gt;id_rsa&lt;/code&gt; is the private version of your key and &lt;code&gt;id_rsa.pub&lt;/code&gt; is the public version of your key.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;6 -&lt;/strong&gt; You now need to add the SSH key to the ssh-agent, which helps with the authentication process. To start the ssh-agent, run the following command in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ssh-agent &lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;7 -&lt;/strong&gt; To add the key to the agent, run the following command in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-add ~/.ssh/id_rsa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Adding an SSH key to GitHub
&lt;/h3&gt;

&lt;p&gt;To add an SSH key to GitHub, you need to copy the SSH key that you generated in the previous lab. Open a terminal and then complete the following steps:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1 -&lt;/strong&gt; In the terminal, run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/id_rsa.pub | clip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If &lt;code&gt;clip&lt;/code&gt; doesn't work, run &lt;code&gt;cat ~/.ssh/id_rsa.pub&lt;/code&gt; in the command line and copy the output.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;2 -&lt;/strong&gt; Sign in to GitHub. At the top right, click the drop-down menu on your profile image and select &lt;strong&gt;Settings&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%2Fzig0gesn09h009k9t8i8.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%2Fzig0gesn09h009k9t8i8.png" alt="image 1" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 -&lt;/strong&gt; From the "Personal settings" menu, select &lt;strong&gt;SSH and GPG keys&lt;/strong&gt;, as shown in the following image:&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%2F1kgcl45f2s6ke1nr1nss.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%2F1kgcl45f2s6ke1nr1nss.png" alt="image 2" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 -&lt;/strong&gt; Click &lt;strong&gt;New SSH key&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%2Fjcc81lwnglwyk421vn2k.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%2Fjcc81lwnglwyk421vn2k.png" alt="image 3" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5 -&lt;/strong&gt; &lt;strong&gt;Enter a title&lt;/strong&gt; for the new SSH key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.2 -&lt;/strong&gt; In the &lt;strong&gt;Key&lt;/strong&gt; field, paste the key that you copied in step &lt;strong&gt;2. Genarating an SSH key&lt;/strong&gt;, above.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The pasted key should include &lt;strong&gt;Your email address&lt;/strong&gt; at the end.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;5.3 -&lt;/strong&gt; Hit the button &lt;strong&gt;Add SSH key&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%2F46unc3f9ip6pzqzqsn97.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%2F46unc3f9ip6pzqzqsn97.png" alt="image 4" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6 -&lt;/strong&gt; Click &lt;strong&gt;Add SSH Key&lt;/strong&gt;. The SSH key is added to your account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Congratulations! You have now learned how to generate the SSH key and add an SSH key to GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Git and GitHub learning resources
&lt;/h2&gt;

&lt;p&gt;There are a lot of helpful Git and GitHub learning resources on the web. This is a short list of my favorites!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/skills" rel="noopener noreferrer"&gt;GitHub Skills&lt;/a&gt;&lt;br&gt;
Learn how to use GitHub with interactive courses designed for beginners.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.blog/" rel="noopener noreferrer"&gt;GitHub Blog&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://git-scm.com/book/en/v2" rel="noopener noreferrer"&gt;Pro Git book&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://git-scm.com/docs" rel="noopener noreferrer"&gt;Git command list&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.youtube.com/githubguides" rel="noopener noreferrer"&gt;GitHub Training Guides (Youtube channel)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/skills/introduction-to-github" rel="noopener noreferrer"&gt;Introduction to GitHub&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/services/#upcoming-events" rel="noopener noreferrer"&gt;GitHub Live Training&lt;/a&gt;, with a hands-on, project-based approach for those who love the command line and those who don't.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.pluralsight.com/courses/code-school-git-real" rel="noopener noreferrer"&gt;Code School: Git Real&lt;/a&gt;. Learn basic concepts of Git version control. Explore staging, cloning, branching, and collaborating with Git.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.atlassian.com/git" rel="noopener noreferrer"&gt;Atlassian | Bitbucket | Git basics&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Now you know more about generating and adding an SSH key to Github, Feel free to these steps to make sure you understand how they work.&lt;/p&gt;

&lt;p&gt;Download this Git commands &lt;a href="https://phoenixnap.com/kb/wp-content/uploads/2021/11/git-commands-cheat-sheet-by-pnap-v2.pdf" rel="noopener noreferrer"&gt;cheat sheet&lt;/a&gt; to have all Git commands in one place for future use.&lt;/p&gt;

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

&lt;p&gt;If you want to follow along with more advanced stuff in the next article I'll talk about &lt;strong&gt;GitBash Installation on your Desktop&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks for the read! Now go practice &amp;amp; build something awesome!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>entityframework</category>
      <category>howto</category>
    </item>
  </channel>
</rss>
