<?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: Saad Irfan</title>
    <description>The latest articles on DEV Community by Saad Irfan (@msaaddev).</description>
    <link>https://dev.to/msaaddev</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%2F209574%2F017111e8-e7b7-474d-822d-89b79e5b4ea2.JPG</url>
      <title>DEV Community: Saad Irfan</title>
      <link>https://dev.to/msaaddev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/msaaddev"/>
    <language>en</language>
    <item>
      <title>Setup Next.js blog under a minute</title>
      <dc:creator>Saad Irfan</dc:creator>
      <pubDate>Sat, 07 Jan 2023 15:41:08 +0000</pubDate>
      <link>https://dev.to/msaaddev/setup-nextjs-blog-under-a-minute-56l7</link>
      <guid>https://dev.to/msaaddev/setup-nextjs-blog-under-a-minute-56l7</guid>
      <description>&lt;p&gt;The title pretty much gives it away. I have built an open-source tool that you can use to build a Next.js blog with Markdown in under a minute without looking at tutorials online.&lt;/p&gt;

&lt;p&gt;When I was building my blog with Next.js last year, I had to read a lot of documentation to develop the basic infrastructure. So when I was thinking about 2023 and my goals in terms of open-source, I got this idea to build an unopinionated tool that anyone can use to set up a Next.js blog site quickly.&lt;/p&gt;

&lt;p&gt;Hence, introducing you to &lt;a href="https://github.com/msaaddev/create-nextjs-blog" rel="noopener noreferrer"&gt;create-nextjs-blog&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  create-nextjs-blog
&lt;/h2&gt;

&lt;p&gt;Let’s look at what &lt;a href="https://github.com/msaaddev/create-nextjs-blog" rel="noopener noreferrer"&gt;create-nextjs-blog&lt;/a&gt; has to offer right now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blog:&lt;/strong&gt; Run a single command to set up TypeScript or JavaScript blog&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS:&lt;/strong&gt; Supports Tailwind CSS out of the box so you don’t have to set it up if you want to use it for your blog&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unopinionated:&lt;/strong&gt; Completely unopinionated meaning you can build whatever UI you want without thinking about breaking anything&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Category&lt;/strong&gt;: Easily create different blog categories with each category having its individual page where all the blogs of that category are listed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Post:&lt;/strong&gt; Create a new blog post by creating a new markdown file inside the &lt;code&gt;posts&lt;/code&gt; directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Route:&lt;/strong&gt; Automatically create routes for your blog posts based on the markdown file name. For instance, if the file name is &lt;code&gt;hello-world.md&lt;/code&gt;, its route will be &lt;code&gt;/blog/hello-world&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO:&lt;/strong&gt; Offers basic SEO using markdown file frontmatter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown components:&lt;/strong&gt; Build React components and use them in your blog markdown file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://create-nextjs-blog.vercel.app/blog" rel="noopener noreferrer"&gt;&lt;em&gt;Live demo of the blog&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# use it with npx (recommended)&lt;/span&gt;
npx create-nextjs-blog@latest

&lt;span class="c"&gt;# install the CLI globally&lt;/span&gt;
npm i &lt;span class="nt"&gt;-g&lt;/span&gt; create-nextjs-blog@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# npx: create a new Next.js blog&lt;/span&gt;
npx create-nextjs-blog@latest

&lt;span class="c"&gt;# npx create a next Next.js blog with TypeScript&lt;/span&gt;
npx create-nextjs-blog@latest &lt;span class="nt"&gt;--typescript&lt;/span&gt;

&lt;span class="c"&gt;# npx create a next Next.js blog with Tailwind CSS &amp;amp; TypeScript&lt;/span&gt;
npx create-nextjs-blog@latest &lt;span class="nt"&gt;--withTailwind&lt;/span&gt;

&lt;span class="c"&gt;# npx create a next Next.js blog with JavaScript&lt;/span&gt;
npx create-nextjs-blog@latest &lt;span class="nt"&gt;--javascript&lt;/span&gt;

&lt;span class="c"&gt;# global: create a new Next.js blog&lt;/span&gt;
cnb

&lt;span class="c"&gt;# global: create a next Next.js blog with TypeScript&lt;/span&gt;
cnb &lt;span class="nt"&gt;--typescript&lt;/span&gt;

&lt;span class="c"&gt;# global: create a next Next.js blog with Tailwind CSS &amp;amp; TypeScript&lt;/span&gt;
cnb &lt;span class="nt"&gt;--withTailwind&lt;/span&gt;

&lt;span class="c"&gt;# global: create a next Next.js blog with JavaScript&lt;/span&gt;
cnb &lt;span class="nt"&gt;--javascript&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Once the blog is set up, run the Next.js app and navigate to &lt;a href="http://localhost:3000/blog" rel="noopener noreferrer"&gt;&lt;code&gt;http://localhost:3000/blog&lt;/code&gt;&lt;/a&gt; to see your blog. I highly recommend using &lt;a href="https://vercel.com" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt; to deploy your blog.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Demo
&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%2Flnsaz5nv2kzwsj8us9n6.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flnsaz5nv2kzwsj8us9n6.gif" alt="Demo" width="720" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can read the complete documentation &lt;a href="https://github.com/msaaddev/create-nextjs-blog" rel="noopener noreferrer"&gt;here&lt;/a&gt; to learn more about how to create a blog post, new category, and React components that you can call in your markdown file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap Up
&lt;/h2&gt;

&lt;p&gt;That’s all, folks! If you find this tool useful, don’t forget to give it a &lt;a href="https://github.com/msaaddev/create-nextjs-blog" rel="noopener noreferrer"&gt;star&lt;/a&gt; on GitHub. Also, I am looking to expand this tool and I would highly appreciate your feature requests. You can use the GitHub &lt;a href="https://github.com/msaaddev/create-nextjs-blog/issues" rel="noopener noreferrer"&gt;issues&lt;/a&gt; to submit them. &lt;/p&gt;

&lt;p&gt;Cheerios 🙌&lt;/p&gt;

</description>
      <category>watercooler</category>
    </item>
    <item>
      <title>Want to learn frontend development? Read this!</title>
      <dc:creator>Saad Irfan</dc:creator>
      <pubDate>Fri, 19 Aug 2022 17:12:00 +0000</pubDate>
      <link>https://dev.to/msaaddev/want-to-learn-frontend-development-read-this-1k69</link>
      <guid>https://dev.to/msaaddev/want-to-learn-frontend-development-read-this-1k69</guid>
      <description>&lt;p&gt;In the past, many people have asked me about a course or tutorial I recommend or know of to learn something (mostly related to frontend). So when I taught frontend development from beginner to advance level, I collected some resources. They had been in my Google Docs for more than a year. &lt;/p&gt;

&lt;p&gt;Finally, I decided to curate a list of these resources and put them on GitHub. I compiled resources related to learning Git, HTML, CSS, JavaScript, Asynchronous JavaScript, React, Next.js, and more. I also listed some job boards where you can find jobs related to front-end development.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/msaaddev" rel="noopener noreferrer"&gt;
        msaaddev
      &lt;/a&gt; / &lt;a href="https://github.com/msaaddev/frontend-resources" rel="noopener noreferrer"&gt;
        frontend-resources
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A list of frontend resources from very basic to advance. Feel free to add new resources!
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/msaaddev/frontend-resources/assets/cover.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmsaaddev%2Ffrontend-resources%2Fassets%2Fcover.png" alt="cover image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;&lt;i&gt;A curated list of frontend resources from very basic to advance. Feel free to add new resources!&lt;/i&gt;&lt;/strong&gt;
&lt;/p&gt;

&lt;div&gt;
    &lt;a href="https://stars.github.com/nominate/" rel="noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/81994d5a353d784d361a726593c8c548b98334e14530f2e3d6edba97d4743cf1/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476974487562253230537461722d4e6f6d696e6174652532302534306d736161646465762d253233304632333435" alt="nominate @msaaddev for GitHub Star"&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/msaaddev/frontend-resources/assets/separator.jpeg"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmsaaddev%2Ffrontend-resources%2Fassets%2Fseparator.jpeg" alt="separator"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/msaaddev/frontend-resources#code-editor" rel="noopener noreferrer"&gt;Code Editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/msaaddev/frontend-resources#code-hosting-platforms" rel="noopener noreferrer"&gt;Code Hosting Platforms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/msaaddev/frontend-resources#version-control-tool" rel="noopener noreferrer"&gt;Version Control Tool&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/msaaddev/frontend-resources#html" rel="noopener noreferrer"&gt;HTML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/msaaddev/frontend-resources#css" rel="noopener noreferrer"&gt;CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/msaaddev/frontend-resources#javascript" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/msaaddev/frontend-resources#apis" rel="noopener noreferrer"&gt;APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/msaaddev/frontend-resources#react" rel="noopener noreferrer"&gt;React&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/msaaddev/frontend-resources#nextjs" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/msaaddev/frontend-resources#firebase" rel="noopener noreferrer"&gt;Firebase&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/msaaddev/frontend-resources#frontend-development-complete" rel="noopener noreferrer"&gt;Frontend Development (Complete)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/msaaddev/frontend-resources#jobs" rel="noopener noreferrer"&gt;Jobs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Code Editor&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;br&gt;
&lt;thead&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/thead&gt;
&lt;br&gt;
&lt;tbody&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://code.visualstudio.com/" rel="nofollow noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;A free and open source code editor for the cloud.&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://www.sublimetext.com/" rel="nofollow noopener noreferrer"&gt;Sublime Text&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;A sophisticated, open source text editor for code, markup and prose.&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://atom.io/" rel="nofollow noopener noreferrer"&gt;Atom&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;A hackable text editor for the 21st Century&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://www.vim.org/" rel="nofollow noopener noreferrer"&gt;Vim&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;Vim is a highly configurable text editor built to make creating and changing any kind of text very efficient.&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://notepad-plus-plus.org/downloads/" rel="nofollow noopener noreferrer"&gt;Notepad++&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;Notepad++ is a text and source code editor for use with Microsoft Windows.&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://brackets.io/" rel="nofollow noopener noreferrer"&gt;Brackets&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;With focused visual tools and preprocessor support, Brackets is a modern text editor that makes it easy to design in the browser.&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/tbody&gt;
&lt;br&gt;
&lt;/table&gt;&lt;/div&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Resources&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;br&gt;
&lt;thead&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/thead&gt;
&lt;br&gt;
&lt;tbody&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;&lt;a href="https://www.youtube.com/watch?v=WPqXP_kLzpo" rel="nofollow noopener noreferrer"&gt;Visual Studio Code Crash Course&lt;/a&gt;&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;In this&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/tbody&gt;
&lt;br&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/msaaddev/frontend-resources" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;The following are some JavaScript resources:&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://nodejs.org/en/download/" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Resources
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.youtube.com/watch?v=PkZNo7MFNFg" rel="noopener noreferrer"&gt;Learn JavaScript - Full Course for Beginners&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;This complete 134-part JavaScript tutorial for beginners will teach you everything you need to know to get started with the JavaScript programming language.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.youtube.com/watch?v=0ik6X4DJKCc" rel="noopener noreferrer"&gt;JavaScript DOM Crash Course - Part 1&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;This crash course focuses on the DOM WITHOUT JQUERY. In this part we will talk about what the JavaScript DOM (Document Object Model). We will also look at how to change content and styles via these selectors&lt;/td&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.youtube.com/watch?v=mPd2aJXCZ2g" rel="noopener noreferrer"&gt;JavaScript DOM Crash Course - Part 2&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;In this video we will learn how to traverse and move around the DOM with properties like parentNode, parentElement, nextElementSibling and so on. We will also learn how to insert elements with createElement() and createTextNode().&lt;/td&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.youtube.com/watch?v=wK2cBMcDTss" rel="noopener noreferrer"&gt;JavaScript DOM Crash Course - Part 3&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;In this lesson in the JavaScript DOM, we will be looking at different events and how to attach them to DOM elements with addEventListener().&lt;/td&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.youtube.com/watch?v=i37KVt_IcXw" rel="noopener noreferrer"&gt;JavaScript DOM Crash Course - Part 4&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;In this video we will take what we learned in the last 3 videos and create a simple Item lister project where we can add list items with a form, delete them and filter through them all with vanilla JavaScript and DOM properties and methods.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.youtube.com/watch?v=_8gHHBlbziw" rel="noopener noreferrer"&gt;Async Javascript Tutorial For Beginners (Callbacks, Promises, Async Await)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Asynchronous JavaScript crash course&lt;/td&gt;
&lt;td&gt;&lt;code&gt;free&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Want more resources?
&lt;/h2&gt;

&lt;p&gt;You can find more of these resources on the GitHub &lt;a href="https://github.com/msaaddev/frontend-resources" rel="noopener noreferrer"&gt;repository&lt;/a&gt; I have placed above. Don’t forget to star the repo if you found the resources I have collected useful. &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>react</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>I got featured for my work with Tailwind CSS</title>
      <dc:creator>Saad Irfan</dc:creator>
      <pubDate>Thu, 15 Jul 2021 19:26:12 +0000</pubDate>
      <link>https://dev.to/msaaddev/i-got-featured-for-my-work-with-tailwind-css-3hhm</link>
      <guid>https://dev.to/msaaddev/i-got-featured-for-my-work-with-tailwind-css-3hhm</guid>
      <description>&lt;p&gt;I am thrilled to share that my &lt;a href="https://github.com/msaaddev/new-tailwind-app" rel="noopener noreferrer"&gt;open-source&lt;/a&gt; work got featured in &lt;a href="https://cooperpress.com/" rel="noopener noreferrer"&gt;Cooperpress's&lt;/a&gt; Node Weekly newsletter. Cooperpress newsletter is one of the most reputable, followed newsletters in the developer community with almost half a million subscribers. You can read the newsletter &lt;a href="https://nodeweekly.com/issues/397" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I subscribed to Cooperpress a year ago. I remember at the time I thought what would one has to do in order to get featured in such newsletters. Hence, you can imagine my excitement when I got to know that it finally happened.&lt;/p&gt;

&lt;p&gt;The funny part is someone who I don't know reached out to me on Facebook to let me know that hey you got featured.&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%2Fu8dc2g16o8xqffeqf6im.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%2Fu8dc2g16o8xqffeqf6im.png" alt="node weekly featured" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  But why?
&lt;/h2&gt;

&lt;p&gt;A month ago, I started dabbling with Tailwind and I totally loved it. But I hated the steps I had to go through in order to get started with it across different web apps. At the time, I thought I should just create a template repository with Next.js and React.js Tailwind integrated boilerplate.&lt;/p&gt;

&lt;p&gt;The next day I thought why not just create a tool that can get me started with Tailwind and Next.js and React.js with a single command. And eventually, I started working on &lt;a href="https://github.com/msaaddev/new-tailwind-app" rel="noopener noreferrer"&gt;new-tailwind-app&lt;/a&gt;. One thing led to another and I expanded it to support almost all the frameworks that are in the documentation of Tailwind CSS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;I am planning to integrate many different frameworks with the &lt;a href="https://github.com/msaaddev/new-tailwind-app" rel="noopener noreferrer"&gt;new-tailwind-app&lt;/a&gt; and also to included TypeScript support in the upcoming weeks. I am also planning to shape it in a way to make it a one-stop tool for developers which they can use to easily get started with Tailwind across many web frameworks.&lt;/p&gt;

&lt;p&gt;I also wrote a piece about why here on dev.to explaining why I built this tool. You can read it &lt;a href="https://dev.to/msaaddev/tailwind-css-user-read-this-488n"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Cheerios 🤞🏻&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>opensource</category>
      <category>tailwindcss</category>
      <category>node</category>
    </item>
    <item>
      <title>Hitchhiker's Guide To Writing Your First Open-source software</title>
      <dc:creator>Saad Irfan</dc:creator>
      <pubDate>Mon, 12 Jul 2021 14:21:55 +0000</pubDate>
      <link>https://dev.to/msaaddev/hitchhiker-s-guide-to-writing-your-first-open-source-software-dh0</link>
      <guid>https://dev.to/msaaddev/hitchhiker-s-guide-to-writing-your-first-open-source-software-dh0</guid>
      <description>&lt;p&gt;&lt;em&gt;This article is written just from my perspective to help out beginners. If you disagree from anything in this piece, I respect that.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Before you start reading this article, let me just stop you right there. Why!? You asked and I obliged. To congratulate you! Confused!? If you have decided to give this piece a go then at some part of your mind you want to take the first step towards open-source and I am really glad that I can contribute to it. 🥂&lt;/p&gt;

&lt;p&gt;Well today, I have something special for you. In the past, you might have used packages from one of the biggest open-source package repositories, i.e., npmjs. Today, I am going to teach you just how simple it is to write your own open-source node package and then publish it on npmjs. &lt;/p&gt;

&lt;p&gt;Let’s do it in steps to make things simpler.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗 STEP #1 – Setting Up Everything
&lt;/h2&gt;

&lt;p&gt;Every good open-source project contains some files that build confidence. For instance, having a code of conduct, contributing guidelines, and proper documentation goes a long way. Plus, don’t forget the license while we are talking about such files.&lt;/p&gt;

&lt;p&gt;Since I have some experience myself writing open-source automation tools and packages, I decided to save you some time and &lt;a href="https://github.com/msaaddev/create-foss-files" rel="noopener noreferrer"&gt;cooked&lt;/a&gt; up something that you could use to get started with everything using a single command. But before I tell you about that, let’s create a folder called &lt;code&gt;cross-path&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cross-path&lt;/code&gt; is going to be an npm package that will convert darwin paths to win32 and win32 paths to darwin.&lt;/p&gt;

&lt;p&gt;Navigate inside this folder and type the following 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;npx create-foss-files &lt;span class="nt"&gt;--javascript&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is going to go ahead and set up everything you need for an open-source 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%2Fftczzlpa82aq4ufhllz2.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%2Fftczzlpa82aq4ufhllz2.png" alt="create-foss-files" width="800" height="682"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just so you know, I have also written a piece about the &lt;a href="https://dev.to/msaaddev/files-every-open-source-project-must-have-2mmm"&gt;files you should have in an open-source project&lt;/a&gt; if you want to read it.&lt;/p&gt;

&lt;p&gt;Once you are done, open this folder in your VSCode or preferred code editor and write your contributing guidelines in the &lt;code&gt;contributing.md&lt;/code&gt; file. &lt;/p&gt;

&lt;h2&gt;
  
  
  🎩 STEP #2 – Writing Your Package Metadata
&lt;/h2&gt;

&lt;p&gt;The files that have just been created would contain a &lt;code&gt;package.json&lt;/code&gt; file. Safe to say that this file contains all the metadata of your project. Open it.&lt;/p&gt;

&lt;p&gt;You will see many empty fields inside of it. Fill them one by one. Give your package a name, description, version, etc. Since I am writing a package to generate cross-platform paths, I am going to give it the name &lt;code&gt;cross-path&lt;/code&gt;, some description to explain the functionality of the package, and fill out other stuff as well.&lt;/p&gt;

&lt;p&gt;The file will look something like this:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cross-paths"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.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;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Converts paths from darwin to win32 platform and vice versa"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"repository"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://github.com/msaaddev/cross-paths"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"author"&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;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Saad Irfan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"me@msaad.dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://twitter.com/msaaddev"&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;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MIT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&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;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prettier --write &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;./**/*.{js,json}&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;"&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;"keywords"&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="s2"&gt;"cross paths"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"windows to unix paths"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"unix to windows path"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"darwin to windows path"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"windows to darwin path"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"path converter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"convert paths"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"Saad Irfan"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"msaaddev"&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;"devDependencies"&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;"prettier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.3.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;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;Make sure to give your package appropriate keywords related to the package you are building so people can find your package on npmjs.&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 STEP #3 – Coding
&lt;/h2&gt;

&lt;p&gt;The next step is to write the magic which some people also call code. Open the &lt;code&gt;index.js&lt;/code&gt; file for this. I am not going to waste your time with this part of the process since it varies from package to package.&lt;/p&gt;

&lt;p&gt;Although, I am still sharing the code of this &lt;code&gt;cross-path&lt;/code&gt; package.&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="cm"&gt;/**
 *
 * Author: Saad Irfan
 * GitHub: msaaddev
 * Twitter: https://twitter.com/msaaddev
 */&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logSymbols&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;log-symbols&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nodePath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;toUnix&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;upath&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cm"&gt;/**
 *
 *
 * @param {path} - darwin path
 * @returns {path} - win32 path
 */&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;darwinToWin32&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;path&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;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;logSymbols&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; Please provide a valid path`&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="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;nodePath&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;win32&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;normalize&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="p"&gt;};&lt;/span&gt;

&lt;span class="cm"&gt;/**
 *
 *
 * @param {path} - win32 path
 * @returns {path} - darwin path
 */&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;win32ToDarwin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;path&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;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;logSymbols&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; Please provide a valid path`&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="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;toUnix&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="p"&gt;};&lt;/span&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="nx"&gt;darwinToWin32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;win32ToDarwin&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is one extremely important thing which I need to explain to you. You need to know what &lt;code&gt;module.exports&lt;/code&gt; does. &lt;/p&gt;

&lt;p&gt;‼️ &lt;code&gt;module.exports&lt;/code&gt; exports anything you set equal to it. You can export anything (variable, object, arrays, functions, classes) from a file through this and it will export it as a module. If you look at the code above, you will notice that I am exporting an object through &lt;code&gt;module.exports&lt;/code&gt;. The object contains two functions. So in turn, I am exporting two functions from this file via an object.&lt;/p&gt;

&lt;p&gt;Make sure the function/s that you want other people to use via your package must be put inside of this object. I recommend you read this &lt;a href="https://www.tutorialsteacher.com/nodejs/nodejs-module-exports" rel="noopener noreferrer"&gt;article&lt;/a&gt; to get a better understanding of &lt;code&gt;module.exports&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can use &lt;code&gt;module.exports&lt;/code&gt; to modularize your code across multiple files. This will help the readability of your codebase. &lt;/p&gt;

&lt;p&gt;Every module that you export can be imported in another file using the &lt;code&gt;require&lt;/code&gt; keyword. ⚡️&lt;/p&gt;

&lt;p&gt;I don’t know if you have noticed but I am using three other packages in the code above. I am importing it into my &lt;code&gt;index.js&lt;/code&gt; file using the &lt;code&gt;require&lt;/code&gt; keyword. Just so you know, this is how someone is going to use your code in their project.&lt;/p&gt;

&lt;h2&gt;
  
  
  📖 STEP #4 – Documentation
&lt;/h2&gt;

&lt;p&gt;Once you are done coding your package, be sure to write a good documentation so people can actually use your package. The documentation plays a vital part in the success of any project.&lt;/p&gt;

&lt;p&gt;For this purpose, open &lt;code&gt;readme.md&lt;/code&gt; file and write things like features, installation guide, usage, any other information that you think is important, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 STEP #5 – Sign Up And Login
&lt;/h2&gt;

&lt;p&gt;Before you can publish your package, you need to first sign up on &lt;a href="https://www.npmjs.com/" rel="noopener noreferrer"&gt;npmjs.com&lt;/a&gt;. So go ahead and do this. &lt;/p&gt;

&lt;p&gt;When you are done, open your terminal and type the following command there:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;You will asked a bunch of questions like your username, email, password, etc. Answer them one by one. Now your computer terminal is connected with your npmjs account.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 STEP #6 – Publishing
&lt;/h2&gt;

&lt;p&gt;The last thing you need now is to publish your package on npmjs. For this, all you need to do is open your project terminal, and type the following there:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This command is going to go ahead and publish your project. And that’s all. You have successfully published your first open-source software on one of the biggest platforms out there.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚠️ Common Errors
&lt;/h2&gt;

&lt;p&gt;This post can’t be completed with me telling you some of the common errors that you might see while publishing your open-source package. &lt;/p&gt;

&lt;p&gt;Sometimes when you try to publish your package, you run into an error. It can be due to any of these two reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A package with the same name already exists. In this case, either you need to change the name of your package or make a scoped package. Read more about scoped package &lt;a href="https://docs.npmjs.com/cli/v7/using-npm/scope/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You have not updated the version number of your package before publishing it again. Everytime you have made a change and now you are publishing your package again, you would need to change its version. It is because you can not publish again on an existing version. I would suggest following &lt;a href="https://docs.npmjs.com/about-semantic-versioning" rel="noopener noreferrer"&gt;semantic versioning&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I know I have not talked about writing tests. It is because I have tried to make this piece as beginner oriented as possible. &lt;/p&gt;

&lt;p&gt;I think every developer is a magician who can produce magic via a few strokes of the keyboard (maybe not a few but you get the idea). I have also tried making a bit of a magic myself. One of them is the &lt;a href="https://github.com/msaaddev/new-tailwind-app" rel="noopener noreferrer"&gt;new-tailwind-app&lt;/a&gt; that can get you started with Tailwind integrated web app with a single command. You can see more of my projects &lt;a href="https://github.com/msaaddev?tab=repositories" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Be sure to follow me while you are at it. 🙌🏻 &lt;/p&gt;

&lt;p&gt;Cheerios 🤞🏻&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>tutorial</category>
      <category>javascript</category>
      <category>node</category>
    </item>
    <item>
      <title>Files every open-source project should have</title>
      <dc:creator>Saad Irfan</dc:creator>
      <pubDate>Wed, 30 Jun 2021 16:52:00 +0000</pubDate>
      <link>https://dev.to/msaaddev/files-every-open-source-project-must-have-2mmm</link>
      <guid>https://dev.to/msaaddev/files-every-open-source-project-must-have-2mmm</guid>
      <description>&lt;p&gt;&lt;em&gt;This is just how I like to go. Hence, I am sharing this with everyone. But if you do things differently and you don’t agree with what I have to say next then I respect your opinion.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Well, well, well! I see you are reading this post. That means you are intrigued and curious to know all the files you should have in your open-source project. Before I jump into this, I think you may also like my earlier &lt;a href="https://dev.to/msaaddev/tailwind-css-user-read-this-488n"&gt;article&lt;/a&gt; which you should definitely give a read if you are into Tailwind. &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/msaaddev" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F209574%2F017111e8-e7b7-474d-822d-89b79e5b4ea2.JPG" alt="msaaddev"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/msaaddev/tailwind-css-user-read-this-488n" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Tailwind CSS User? Read this!&lt;/h2&gt;
      &lt;h3&gt;Saad Irfan ・ Jun 24 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#tailwindcss&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#css&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;So that’s said, let’s jump into the highlight of this piece. Well, you see, I am not going to take much of your time. So if you just want to know the files, here is the list of them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;.editorconfig&lt;/li&gt;
&lt;li&gt;.gitignore&lt;/li&gt;
&lt;li&gt;.prettierrc.json&lt;/li&gt;
&lt;li&gt;.npmrc&lt;/li&gt;
&lt;li&gt;License&lt;/li&gt;
&lt;li&gt;Code of Conduct&lt;/li&gt;
&lt;li&gt;Contributing&lt;/li&gt;
&lt;li&gt;Changelog&lt;/li&gt;
&lt;li&gt;Readme &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I see you are still reading. That’s awesome. That means I have your undivided attention (at least I hope so). So while I have it, let me explain each of these files and why you should have them in your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎩 .editorconfig
&lt;/h2&gt;

&lt;p&gt;In my opinion, every open-source project should have this file. Why? Glad you asked. You are building an open-source project. You are using your code editor and that editor is configured according to your needs. Now someone else wants to contribute to your project. When they clone your repo and open it in their code editor, they will have different editor settings. And now if they open a PR, you will notice all the weird style changes in the code. 😐&lt;/p&gt;

&lt;p&gt;This is where &lt;code&gt;.editorconfig&lt;/code&gt; file comes into the picture. The settings that you have added to this file will ultimately be used by all the other code editors. So if you have this in your project, and someone then clones your project, they will also get a copy of this file that has all the editor settings, and if they have set indent style to spaces and you have set it to tabs then for this project, tabs will be used for indentation. &lt;/p&gt;

&lt;p&gt;Here is an example of the contents of this file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
indent_style &lt;span class="o"&gt;=&lt;/span&gt; tab
end_of_line &lt;span class="o"&gt;=&lt;/span&gt; lf
trim_trailing_whitespace &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true
&lt;/span&gt;insert_final_newline &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Handy. Right?!&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗 .gitignore
&lt;/h2&gt;

&lt;p&gt;I am not going to explain this file much because I know you are a developer and if you are here, then you must have heard about this strange place called GitHub where all the developers put their work on display. And you must also have used git for version controlling your software.&lt;/p&gt;

&lt;p&gt;Well if you have this file in your project then git will ignore all the files or folders you add to this file. Since you never commit your node modules to GitHub, you can just node modules inside this file and you are gold. Git will just ignore it now and you won’t see it when you write &lt;code&gt;git status&lt;/code&gt; in your terminal. 🥂&lt;/p&gt;

&lt;p&gt;Here is an example of the contents of this file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node_modules/
/node_modules/

&lt;span class="k"&gt;**&lt;/span&gt;.DS_Store&lt;span class="k"&gt;*&lt;/span&gt;
ehthumbs.db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ✨ .prettierrc.json
&lt;/h2&gt;

&lt;p&gt;You need to write code that looks pretty and easy to read. Well, you can use prettier to do just this. Since I work mostly with JavaScript and Node.js for my open-source work, I always install Prettier as my dev dependency and add an additional script to my &lt;code&gt;package.json&lt;/code&gt; file:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"scripts"&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;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prettier --write &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;./**/*.{js,json}&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;"&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="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;This script allows me to format my entire codebase using &lt;code&gt;npm run format&lt;/code&gt;. If you carefully look at the script, you will notice that it actually contains a regular expression. You can modify it to include all the different file types you want to format.&lt;/p&gt;

&lt;p&gt;Well, I still need to set some ground rules for Prettier to follow. Otherwise, again different code editors have different Prettier configurations set. So, in &lt;code&gt;.prettierrc.json&lt;/code&gt; file, you define all the Prettier-related configurations. So if you run &lt;code&gt;npm run format&lt;/code&gt; now, Prettier is going to follow this configs. ⚡️&lt;/p&gt;

&lt;p&gt;Here is an example of the contents of this file:&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"trailingComma"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"none"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"singleQuote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"printWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"useTabs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tabWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;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;"semi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&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;h2&gt;
  
  
  💥 .npmrc
&lt;/h2&gt;

&lt;p&gt;If you want to set any npm-related configurations locally in your project, you can use this file to add them. For me, I just use this file to not generate a &lt;code&gt;package-lock.json&lt;/code&gt; file. Well, because I don’t need it in production.&lt;/p&gt;

&lt;p&gt;Here is an example of the contents of this file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;package-lock&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔑 License
&lt;/h2&gt;

&lt;p&gt;Every and I mean EVERY open-source project should be licensed. This is a license file and the contents of it determine which license you want to use. Since I have authored more than 10 open-source tools, I often find myself going with the MIT license. &lt;/p&gt;

&lt;p&gt;You can easily create this file by running a single command in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx license &lt;span class="o"&gt;[&lt;/span&gt;license_name]

&lt;span class="c"&gt;# for instance, npx license MIT&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🧑🏻‍💼 Code of Conduct
&lt;/h2&gt;

&lt;p&gt;This is another MUST have file for an open-source project. I think the name is quite self-explanatory. You can add a code of conduct in your project again using a single command. Just open your terminal and run this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx conduct
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🙋🏻 Contributing
&lt;/h2&gt;

&lt;p&gt;This is a markdown file that includes all the instructions that you want the potential contributors of your open-source project to follow. Everyone has different instructions. You can find the instructions that I usually go with &lt;a href="https://github.com/msaaddev/new-tailwind-app/blob/master/contributing.md" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ‼ Changelog
&lt;/h2&gt;

&lt;p&gt;Every open-source software should be properly versioned. With every new release, a new version comes in. This is another markdown file. It contains the changes that you have done across multiple versions of your project.&lt;/p&gt;

&lt;p&gt;For instance, in version 1.0.0, you launched the beta version of your project. With version 1.1.0, you fixed a couple of bugs. Now you might want to add the changes you made to &lt;code&gt;changelog.md&lt;/code&gt; file. So if anyone is using your tool, they can read this file and know instantly what exactly changed across a version. 💻&lt;/p&gt;

&lt;p&gt;You can write your changelog file any way you want. Here is an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;
&lt;span class="gu"&gt;### v1.1.0&lt;/span&gt;

Fixed bug _____
Improve code of ____
Implemented feature ____

&lt;span class="gu"&gt;### v1.0.0&lt;/span&gt;

Implemented feature x that does ___
Implemented feature y that does ___
Implemented feature z that does ___
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I am not going to get into how you should version your software. Maybe I will write another piece on it. &lt;/p&gt;

&lt;h2&gt;
  
  
  📖 Readme
&lt;/h2&gt;

&lt;p&gt;I guess this is the most magical file in a project. The content you have in this file is shown in your project repository. So mainly, this file is used for documentation. And you should have great documentation if you want your project to be successful.&lt;/p&gt;

&lt;p&gt;And there you have it, folks. These are all the files you should add to your open-source project. You can check this open-source project of &lt;a href="https://github.com/msaaddev/new-tailwind-app" rel="noopener noreferrer"&gt;mine&lt;/a&gt; where I have used all of these files. And while you at it, if you like it, don’t forget to star it. 😛&lt;/p&gt;

&lt;p&gt;You can also follow me on &lt;a href="https://github.com/msaaddev" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; where like many other magicians, all my magic lies.&lt;/p&gt;

&lt;p&gt;Until next time, cheerios. 🤞🏻&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Tailwind CSS User? Read this!</title>
      <dc:creator>Saad Irfan</dc:creator>
      <pubDate>Thu, 24 Jun 2021 17:30:00 +0000</pubDate>
      <link>https://dev.to/msaaddev/tailwind-css-user-read-this-488n</link>
      <guid>https://dev.to/msaaddev/tailwind-css-user-read-this-488n</guid>
      <description>&lt;p&gt;So, if you are like me, a frontend developer who loves to work with Tailwind CSS, then this article may just save you a minute or two in the future. You see folks when I started my journey with Tailwind, I went to the place where all the secrets lie when it comes to any framework or library. And yeah! you guessed it right. The holy documentation. 👨🏻‍💻&lt;/p&gt;

&lt;p&gt;I opened the Next.js Tailwind set up guide and found out that that there were a bunch of steps that I needed to perform in order to get started with this beauty. And just like you, I did all the steps and voila! I had Tailwind integrated with my project.&lt;/p&gt;

&lt;p&gt;After this, I started reading documentation and found out that the setting up process of Tailwind varies from framework to framework. So now, if you want to use Tailwind with your React.js project after using it with Next.js, the same setup steps won't do the trick.&lt;/p&gt;

&lt;p&gt;Turns out I really hate when I have to spend an extra minute or two to get started with something. So like any other developer, I used my magic prowess to automate the crap out of it. And voila! Here comes the era of &lt;a href="https://github.com/msaaddev/new-tailwind-app" rel="noopener noreferrer"&gt;new-tailwind-app&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡️ new-tailwind-app
&lt;/h2&gt;

&lt;p&gt;So, &lt;a href="https://github.com/msaaddev/new-tailwind-app" rel="noopener noreferrer"&gt;new-tailwind-app&lt;/a&gt; is a zero-configuration cross-platform tool that can integrate Tailwind with six different kinds of web frameworks using a single command. Yeah! I know. Magic, right?!&lt;/p&gt;

&lt;p&gt;All you need to do is have Node installed in your computer and from there I got you covered. Just run the following in your terminal, and you are good to go:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx new-tailwind-app@latest 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can see all the supported frameworks by typing 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="c"&gt;# see all the features you get with the CLI&lt;/span&gt;
npx new-tailwind-app@latest &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/msaaddev/new-tailwind-app" rel="noopener noreferrer"&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%2F29w06vuc9duejlapvy9u.png" alt="help" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And that's a wrap, folks! If you find this tool useful, don't forget to &lt;a href="https://github.com/msaaddev/new-tailwind-app" rel="noopener noreferrer"&gt;star&lt;/a&gt; it. Now go ahead and utilise the power of open-source to do good and save yourself some time. &lt;/p&gt;

&lt;p&gt;Cheerios 🤞🏻&lt;/p&gt;

</description>
      <category>tailwindcss</category>
      <category>javascript</category>
      <category>css</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Create a Next.js based PWA With Tailwind — create-next-pwa</title>
      <dc:creator>Saad Irfan</dc:creator>
      <pubDate>Mon, 07 Jun 2021 11:20:25 +0000</pubDate>
      <link>https://dev.to/msaaddev/create-a-next-js-based-pwa-with-tailwind-create-next-pwa-147j</link>
      <guid>https://dev.to/msaaddev/create-a-next-js-based-pwa-with-tailwind-create-next-pwa-147j</guid>
      <description>&lt;p&gt;So a couple of days back, I started learning about Progressive Web Apps (PWA) and how they make your web app a standalone desktop application and sort of like an android application. I was really intrigued by the whole concept. I knew about PWAs before but I have never experimented with them. And this time, I decided to do just that. &lt;/p&gt;

&lt;p&gt;So to indulge in my curiosity, I went ahead and created a Next.js app with create-next-app. And afterward, I started making all the changes in the code that were required for a PWA. In the end, I was successful but it took me some time since I was coming from a background where I had no experience with PWAs. &lt;/p&gt;

&lt;p&gt;Later I decided to use Tailwind for my project. I looked up its documentation and followed all the steps I needed to perform to set up Tailwind in my Next.js application. And here again, I spent some time figuring out what to do and what not to do.&lt;/p&gt;

&lt;p&gt;After going through all this, figuring stuff out, I realized that some kind of automation tool can come in real handy when doing all these configurations. And that is when I started building &lt;a href="https://github.com/msaaddev/create-next-pwa" rel="noopener noreferrer"&gt;create-next-pwa&lt;/a&gt;. 🏗&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡️ CREATE-NEXT-PWA
&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%2F331s3rxzrwgrifylvdko.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F331s3rxzrwgrifylvdko.jpg" alt="Alt Text" width="800" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/create-next-pwa" rel="noopener noreferrer"&gt;create-next-pwa&lt;/a&gt; is an extremely lightweight, zero-configuration Node.js-based CLI tool that I have built to automate everything I have talked about above. It can set up your Next.js PWA with a single command:&lt;br&gt;
&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-pwa@latest &lt;span class="o"&gt;[&lt;/span&gt;app_name]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you want to set up Tailwind for your PWA, you can easily do this with &lt;a href="https://github.com/msaaddev/create-next-pwa" rel="noopener noreferrer"&gt;create-next-pwa&lt;/a&gt; with a single --tailwind flag like this:&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-pwa@latest &lt;span class="o"&gt;[&lt;/span&gt;app_name] &lt;span class="nt"&gt;--tailwind&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I have also integrated Prettier as a dev dependency in the PWA. It means you can format your entire project when you are building your PWA by just running:&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 format
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything you needed to do before in order to set up a Next.js-based PWA with or without Tailwind can now be done with a single command. How awesome is that?! 🥂&lt;/p&gt;

&lt;p&gt;If you still want to set up Next.js-based PWA by yourself, I would then recommend reading this awesome &lt;a href="https://itnext.io/pwa-with-next-js-create-next-app-in-2020-%EF%B8%8F-9ee0e1a6313d" rel="noopener noreferrer"&gt;article&lt;/a&gt; by Eshwaren. And on top of this to integrate tailwind, you can follow the official &lt;a href="https://tailwindcss.com/docs/guides/nextjs" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  🙌🏻 WRAP UP
&lt;/h2&gt;

&lt;p&gt;If you folks want me to integrate something else like I have integrated Tailwind then open an issue in the &lt;a href="https://github.com/msaaddev/create-next-pwa" rel="noopener noreferrer"&gt;repository&lt;/a&gt; and I will get back to you. Also if you like this application, be sure to star it as well. 😉 &lt;/p&gt;

&lt;p&gt;Cheerios ✌🏻&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>pwa</category>
      <category>tailwindcss</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Who Unfollowed Me – GitHub CLI 😢</title>
      <dc:creator>Saad Irfan</dc:creator>
      <pubDate>Sun, 30 Aug 2020 10:28:13 +0000</pubDate>
      <link>https://dev.to/msaaddev/who-unfollowed-me-github-cli-1gd4</link>
      <guid>https://dev.to/msaaddev/who-unfollowed-me-github-cli-1gd4</guid>
      <description>&lt;p&gt;There is a saying in the developer community that getting followers on GitHub is super hard. There are in fact memes about 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%2Fi%2Fv1lbpim76kj77pnx6582.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fv1lbpim76kj77pnx6582.jpg" alt="GitHub Meme" width="772" height="960"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am a Computer Science student who mostly works with JavaScript and builds open-source tools. These tools are mostly Node.js based Command-Line Interfaces (CLIs) to automate stuff. You can check them out on my &lt;a href="https://github.com/msaaddev" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Two months back, I tweeted that I'm 14 people short of reaching 100 followers on my &lt;a href="https://github.com/msaaddev" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. This tweet got viral and more people followed me in two days than in two years.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/msaaddev/status/1275504587705847811" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fs74r8oi4gdx065jmnu6i.png" alt="Alt Text" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  😠 Who Unfollowed Me
&lt;/h2&gt;

&lt;p&gt;Yesterday, I launched a &lt;a href="https://github.com/msaaddev/who-unfollowed-me" rel="noopener noreferrer"&gt;CLI&lt;/a&gt; that lets you know who recently unfollowed you on GitHub. There is a small story behind why I build this CLI.&lt;/p&gt;

&lt;p&gt;Actually, it happened to me more than twice that when I was about to reach 200, someone unfollowed me. GitHub does not provide any feature to let you know who did that. So I blended GitHub REST API and a little bit of creativity and voila! &lt;a href="https://github.com/msaaddev/who-unfollowed-me" rel="noopener noreferrer"&gt;who-unfollowed-me&lt;/a&gt; came to life. &lt;/p&gt;

&lt;h3&gt;
  
  
  👨🏻‍💻 How It Works
&lt;/h3&gt;

&lt;p&gt;Copy-paste the following command in your Terminal. If you're a Windows user, first run your Command Prompt or Terminal as Administrator. If you're using macOS, make sure to add &lt;code&gt;sudo&lt;/code&gt; before 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;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; who-unfollowed-me
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now run the CLI by writing the following command on your terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;unfollow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you run the CLI for the first time, it will ask for your GitHub username. It will save it for later use. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/msaaddev/who-unfollowed-me" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0fee06dd25c42e9d25fff7ec761d9454e22b75b7/68747470733a2f2f692e696d6775722e636f6d2f7344335844724f2e706e67" alt="first run" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After this, whenever you run the CLI by writing &lt;code&gt;unfollow&lt;/code&gt; in your terminal, the CLI will show you who recently unfollowed you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/msaaddev/who-unfollowed-me" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/70311f23b4aac105d763b04de30abf9c58bcab38/68747470733a2f2f692e696d6775722e636f6d2f30395434594b712e706e67" alt="unfollow" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If no one has unfollowed you, it will also let you know this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/msaaddev/who-unfollowed-me" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/879340e9f12e44b275633e42f990f4ab92b6906d/68747470733a2f2f692e696d6775722e636f6d2f6a67776834794e2e706e67" alt="no one unfollowed" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are a Windows user, make sure that whenever you run the CLI, first run your Terminal or Command Prompt as Administrator.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🙌 Wrap Up
&lt;/h2&gt;

&lt;p&gt;Whenever you lose some followers on GitHub, you can use this CLI to know who unfollowed you. It would not be wrong to say that getting followers on GitHub is a different kind of happiness and at the same time losing them is an entirely different kind of pain. &lt;/p&gt;

&lt;p&gt;The CLI is also on Product Hunt. Kindly, show some love and check it out.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.producthunt.com/posts/who-unfollowed-me-github?utm_source=badge-featured&amp;amp;utm_medium=badge&amp;amp;utm_souce=badge-who-unfollowed-me-github" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.producthunt.com%2Fwidgets%2Fembed-image%2Fv1%2Ffeatured.svg%3Fpost_id%3D247477%26theme%3Dlight" alt="Product Hunt" width="250" height="54"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cheerios 🤞&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>github</category>
      <category>showdev</category>
      <category>node</category>
    </item>
    <item>
      <title>🔍 Find Your Outdated VSCode Extensions</title>
      <dc:creator>Saad Irfan</dc:creator>
      <pubDate>Thu, 30 Apr 2020 15:23:06 +0000</pubDate>
      <link>https://dev.to/vscode/find-your-vscode-outdated-extensions-1ned</link>
      <guid>https://dev.to/vscode/find-your-vscode-outdated-extensions-1ned</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/nYnTT59rgOk"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;If you are like me &amp;amp; use VSCode as your code editor, you might then want to learn some tips &amp;amp; tricks about it. There is an awesome &lt;a href="https://vscode.pro/" rel="noopener noreferrer"&gt;course&lt;/a&gt; on VSCode just for this, which at the end of it, turns you into a VSCode power user. ⚡️&lt;/p&gt;

&lt;p&gt;Staying up-to-date with everything has become crucial nowadays whether it's your OS, a CLI, or your VSCode extensions. In this piece, I am going to show you guys an easy way to check your outdated VSCode extensions so you can then update them. Now without further ado, let's jump right in! 🙌🏻&lt;/p&gt;

&lt;h2&gt;
  
  
  👨🏻‍💻 VSCode Outdated Extensions
&lt;/h2&gt;

&lt;p&gt;Follow the steps below to see your outdated extensions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🚀 STEP #1: Launch your VSCode&lt;/li&gt;
&lt;li&gt;📦 STEP #2: Open Extension's Area located at the sidebar.&lt;/li&gt;
&lt;li&gt;✍️ STEP #3: Write &lt;code&gt;@outdated&lt;/code&gt; in the extension search box.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you are through these steps, you will see a list of your outdated VSCode Extensions, if there are any. If there isn't, you will get the message of &lt;code&gt;No extensions found&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%2Fi7fnh00hqjrz7cma2b98.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%2Fi7fnh00hqjrz7cma2b98.png" alt="VSCode outdated extensions" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it for today, folks! If you have found this piece useful then please hit the like button. If you have any questions, just drop them in the comment section below. Till then, cheerios! 🤞&lt;/p&gt;

</description>
      <category>vscode</category>
      <category>extensions</category>
      <category>microsoft</category>
      <category>editor</category>
    </item>
    <item>
      <title>VSCode Command Line Interface</title>
      <dc:creator>Saad Irfan</dc:creator>
      <pubDate>Sun, 26 Apr 2020 16:50:06 +0000</pubDate>
      <link>https://dev.to/vscode/vscode-command-line-interface-1pbe</link>
      <guid>https://dev.to/vscode/vscode-command-line-interface-1pbe</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/uKCiAA4AJcI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Just when I thought VSCode can't surprise me anymore, it came out of the closet with something awesome &amp;amp; shocked me again. Did you folks know VSCode offers a Command Line Interface (CLI) that lets you do a bunch of amazing VSCode stuff right inside your terminal. &lt;/p&gt;

&lt;p&gt;Before we go into details, let's first activate this CLI.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ Setting Up the CLI
&lt;/h2&gt;

&lt;p&gt;Open your VSCode. Press ⌘command + ⇧shift + p to open the Command Palette. Once it's open, search for &lt;em&gt;shell command&lt;/em&gt; &amp;amp; then select the option: &lt;code&gt;Shell Command: Install 'code' command in PATH&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%2Fh2q0lun0q45m5xn0jer1.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%2Fh2q0lun0q45m5xn0jer1.png" alt="Activating VSCode CLI" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you are done, you will see a confirmation message at the bottom right corner of your VSCode &amp;amp; that's it. You have activated the CLI. 🙌🏻&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Code CLI
&lt;/h2&gt;

&lt;p&gt;As the name suggests, every Code CLI command will start with &lt;strong&gt;code&lt;/strong&gt;. For instance, if you want to get your VSCode version, you can just type &lt;code&gt;code -v&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%2Fd1t5c80hw7bmjxqfecpe.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%2Fd1t5c80hw7bmjxqfecpe.png" alt="Code CLI" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also open any folder in VSCode by just typing &lt;code&gt;code .&lt;/code&gt; in any terminal &amp;amp; then pressing enter &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%2Ff7gkx45aa2iglx5wq9rq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7gkx45aa2iglx5wq9rq.gif" alt="VSCode launch" width="800" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code CLI also allows you to open any file of your project from your terminal. Just write &lt;code&gt;code -r filename&lt;/code&gt; in the terminal &amp;amp; you are good to go. &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%2Fhjtwtwz842hn53sjhvof.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhjtwtwz842hn53sjhvof.gif" alt="Code CLI open file" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have added &lt;code&gt;-r&lt;/code&gt; to reuse the existing window instead of opening a new one. You can also use the command &lt;code&gt;code -d filename1 filename2&lt;/code&gt; to compare to files with each other. ⚡️&lt;/p&gt;

&lt;p&gt;These are just the tip of the iceberg. You can see all of the options that this CLI provides by writing  &lt;code&gt;code --help&lt;/code&gt;  in the 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%2F44pzl5tawzr4xsqzphjw.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%2F44pzl5tawzr4xsqzphjw.png" alt="Code CLI help" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it for today's, folks! If you like this piece, please hit the like button, and if you have a question, just drop it down in the comments section below. 🙌🏻&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🔥 Make Your Code Look Pretty – Prettier</title>
      <dc:creator>Saad Irfan</dc:creator>
      <pubDate>Fri, 24 Apr 2020 10:03:25 +0000</pubDate>
      <link>https://dev.to/msaaddev/make-your-code-look-pretty-prettier-591g</link>
      <guid>https://dev.to/msaaddev/make-your-code-look-pretty-prettier-591g</guid>
      <description>&lt;p&gt;VSCode Marketplace offers more than 15k+ extensions to the developers. These extensions save tons of hours &amp;amp; make VSCode developer experience more &amp;amp; more impressive. All of these extensions are open-source which means you can contribute to any of your favorite extensions.&lt;/p&gt;

&lt;p&gt;🙌🏻 Today we are going to talk about an extension that has made my life &amp;amp; the life of 6M+ developers so much easier. It is none other than &lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode" rel="noopener noreferrer"&gt;Prettier – Code Formatter&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode" rel="noopener noreferrer"&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%2Fyv834d7vpctjkr3ctp74.png" alt="Prettier – Code Formatter" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤩 Prettier Auto-formatting with VSCode
&lt;/h2&gt;

&lt;p&gt;Prettier is an opinionated code formatter that lets you format your code any way you like. It provides a lot of &lt;a href="https://prettier.io/docs/en/options.html" rel="noopener noreferrer"&gt;customizable&lt;/a&gt; options that you can use to define standards for your code. Hence, ultimately allowing you to code more &amp;amp; more without worrying about formatting. ⚡️&lt;/p&gt;

&lt;h2&gt;
  
  
  👨🏻‍💻 My Workflow
&lt;/h2&gt;

&lt;p&gt;It would be unfair of me to not share with you folks my personal workflow with the Prettier. I like to code carefree. Formatting the code every time I write something new is a bit of hassle for me. Also, there are some other settings that I prefer like single quotes over double quotes, etc.&lt;/p&gt;

&lt;p&gt;So to take care of that, I make use of a combination of VSCode settings that allows my code to format using Prettier. If you are interested in adapting my workflow then follow the steps below.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚙️ STEP 1: Turning on AutoSave
&lt;/h3&gt;

&lt;p&gt;Open your VSCode Settings and set the Auto Save to &lt;strong&gt;afterDelay&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%2Fmhee6qnf4dd4lp6o10ue.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%2Fmhee6qnf4dd4lp6o10ue.png" alt="Auto Save Settings" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📦 STEP 2: Adding key/value Pairs to settings.json
&lt;/h3&gt;

&lt;p&gt;The next &amp;amp; final step is adding some key/value pairs in your settings.json.To open it, press  ⌘ command + ⇧ shift + p &amp;amp; then search for &lt;em&gt;settings.json&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xxx68t6ieqtvlqdp9ne.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%2F6xxx68t6ieqtvlqdp9ne.png" alt="VSCode settings.json" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you find it, hit Enter. It will open a JSON file. Add the following key/value pairs anywhere in this file.&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"editor.formatOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"editor.formatOnPaste"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prettier.printWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prettier.singleQuote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prettier.jsxSingleQuote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prettier.tabWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&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;And, voila!! Now you can code carefree just like me 🙌🏻 &lt;/p&gt;

</description>
      <category>vscode</category>
      <category>formatter</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>🎩 Top 3 VSCode Themes in 2020</title>
      <dc:creator>Saad Irfan</dc:creator>
      <pubDate>Wed, 15 Apr 2020 13:55:57 +0000</pubDate>
      <link>https://dev.to/vscode/top-3-vscode-themes-in-2020-2fm2</link>
      <guid>https://dev.to/vscode/top-3-vscode-themes-in-2020-2fm2</guid>
      <description>&lt;p&gt;VSCode is the most popular code editor. The best part of VSCode is how extendable it is. It's actually a JavaScript and Electron-based application. &lt;/p&gt;

&lt;p&gt;Today, I'm going to share three top VSCode themes you should try in 2020. This is an opinionated post on what I believe are the top themes in the VSCode marketplace.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. 🦄 Shades of Purple
&lt;/h2&gt;

&lt;p&gt;If you haven't tried &lt;a href="https://marketplace.visualstudio.com/items?itemName=ahmadawais.shades-of-purple" rel="noopener noreferrer"&gt;Shades of Purple&lt;/a&gt; till now then, believe me, you are in for a treat. The author, &lt;a href="https://twitter.com/mrahmadawais" rel="noopener noreferrer"&gt;Ahmad Awais&lt;/a&gt;, has so meticulously designed this theme that it makes you fall in love with your code editor. The documentation itself is a piece of art. Millions of developers are using this theme. Over 100 five-star ratings.  ⭐️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=ahmadawais.shades-of-purple" rel="noopener noreferrer"&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%2F949xxjf01t6duymoxrbo.gif" alt="Shades of purple" width="720" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. 🦉 Night Owl
&lt;/h2&gt;

&lt;p&gt;The number 2 on our list is &lt;a href="https://marketplace.visualstudio.com/items?itemName=sdras.night-owl" rel="noopener noreferrer"&gt;Night Owl&lt;/a&gt; developed by &lt;a href="https://twitter.com/sarah_edo" rel="noopener noreferrer"&gt;Sarah Drasner&lt;/a&gt; who is the VP of the Developer Experience at Netlify. As the name suggests, this theme is specially designed for folks who work at night &amp;amp; need a theme that doesn't hurt their eyes. The theme also offers a lighter version for developers who are not into night mode. It has a five-star rating with over 400k+ installs. ⚡️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=sdras.night-owl" rel="noopener noreferrer"&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%2F0t67dk41gwdr9g3kwa8f.png" alt="Night Owl" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. 🎛 Material Theme
&lt;/h2&gt;

&lt;p&gt;The last one we got is the amazing &lt;a href="https://marketplace.visualstudio.com/items?itemName=Equinusocio.vsc-material-theme" rel="noopener noreferrer"&gt;Material Theme&lt;/a&gt; designed by &lt;a href="https://twitter.com/equinusocio" rel="noopener noreferrer"&gt;Mattia Astorino&lt;/a&gt;. This theme has over 8M+ downloads &amp;amp; 2M+ installs. It gives you a blend of dark green with light green &amp;amp; makes your code look so elegant. It got a four-star rating and definitely worth a shot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=Equinusocio.vsc-material-theme" rel="noopener noreferrer"&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%2Flof9v9ws14opyjqkqfi6.png" alt="Material Theme" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🙌🏻 So that's all for today. Do let me know what your favorite VSCode theme is in the comment section down below. Also, if you are interested in saving tons of productivity hours on a weekly basis then check the &lt;a href="https://vscode.pro/" rel="noopener noreferrer"&gt;VSCode.pro&lt;/a&gt; course. This course will make you a VSCode Power User in no time. &lt;/p&gt;

</description>
      <category>vscode</category>
      <category>themes</category>
      <category>top3</category>
    </item>
  </channel>
</rss>
