<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Thu Nghiem</title>
    <description>The latest articles on Forem by Thu Nghiem (@nghiemthu).</description>
    <link>https://forem.com/nghiemthu</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%2F367332%2F542beb5e-8a86-44eb-a167-090815ae4ecd.jpg</url>
      <title>Forem: Thu Nghiem</title>
      <link>https://forem.com/nghiemthu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nghiemthu"/>
    <language>en</language>
    <item>
      <title>Learn HTML basics in 15 minutes for Absolute Beginners | HTML Tutorial (2021)</title>
      <dc:creator>Thu Nghiem</dc:creator>
      <pubDate>Fri, 08 Jan 2021 22:49:19 +0000</pubDate>
      <link>https://forem.com/nghiemthu/learn-html-basics-in-15-minutes-for-absolute-beginners-html-tutorial-2021-2ok2</link>
      <guid>https://forem.com/nghiemthu/learn-html-basics-in-15-minutes-for-absolute-beginners-html-tutorial-2021-2ok2</guid>
      <description>&lt;p&gt;If you want to build a website, the first language that you need to learn is HTML.&lt;/p&gt;

&lt;p&gt;In this video, we are going through the basics of HTML and we are going to build a basic website using only HTML.&lt;/p&gt;

&lt;p&gt;By the end, you will understand HTML and will be unable to use it to create basics websites&lt;/p&gt;

&lt;p&gt;Video:&lt;/p&gt;

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

&lt;p&gt;__________ 🔖  Tutorial Structure __________&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;INTRODUCTION --
[00:00]   - Introduction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-- HTML basics --&lt;br&gt;
[00:24]   - HTML element&lt;br&gt;
[01:48]   - HTML nesting&lt;br&gt;
[02:07]   - Element Attributes&lt;br&gt;
[03:28]   - Most common HTML elements&lt;br&gt;
[04:32]   - Block-level and Inline elements&lt;br&gt;
[05:51]   - Other topics&lt;br&gt;
[06:20]   - Beginner Commom Mistakes&lt;/p&gt;

&lt;p&gt;-- HTML document --&lt;br&gt;
[07:22]   - HTML document explain&lt;/p&gt;

&lt;p&gt;-- Build Pancake recipe page --&lt;br&gt;
[08:43]   - Setups&lt;br&gt;
[09:28]   - Header Section&lt;br&gt;
[10:33]   - Main Section&lt;br&gt;
[13:39]   - Footer Section&lt;/p&gt;

&lt;p&gt;-- Happy coding --&lt;br&gt;
[15:41]   - Happy Coding&lt;/p&gt;

&lt;p&gt;__________ 🐣 About me __________&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I am the founder of &lt;a href="https://devchallenges.io/"&gt;https://devchallenges.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow my Twitter &lt;a href="https://twitter.com/thunghiemdinh"&gt;https://twitter.com/thunghiemdinh&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Join Discord &lt;a href="https://discord.com/invite/3R6vFeM"&gt;https://discord.com/invite/3R6vFeM&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>html</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Build a Modern Website from Scratch - FULL Tutorial 1+ hour [FREE]
</title>
      <dc:creator>Thu Nghiem</dc:creator>
      <pubDate>Sun, 20 Dec 2020 20:56:03 +0000</pubDate>
      <link>https://forem.com/nghiemthu/build-a-modern-website-from-scratch-full-tutorial-1-hour-free-1io</link>
      <guid>https://forem.com/nghiemthu/build-a-modern-website-from-scratch-full-tutorial-1-hour-free-1io</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xDkz7XV8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6g5ozyfpt7cgea13p8rj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xDkz7XV8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6g5ozyfpt7cgea13p8rj.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the modern web, responsiveness is so important that your website needs to respond to every device with different screen sizes.&lt;/p&gt;

&lt;p&gt;In this tutorial, we are going to build a Modern and Professional website using HTML, CSS, and a bit of JavaScript. &lt;/p&gt;

&lt;p&gt;We are going to use the Mobile-First Approach.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If you want to follow along, be sure to download the resource: &lt;a href="https://learn.devchallenges.io/tutorial/highmos-responsive-website"&gt;HERE&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Demo Website: &lt;a href="https://nghiemthu.github.io/higmos-responsive/"&gt;HERE&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;__________ 🎥 Video Tutorial __________&lt;/p&gt;

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

&lt;p&gt;__________ 🔖  Tutorial Structure __________&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;INTRODUCTION &lt;br&gt;
[00:00]   - Introduction&lt;br&gt;
[00:48]   - Project setups + Working Figma&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;HERO AREA&lt;br&gt;
[01:42]   - Hero Area section HTML&lt;br&gt;
[06:13]   - Hero Area section CSS&lt;br&gt;
[19:56]   - Hero Area section Responsiveness&lt;br&gt;
[22:34]   - Organizing CSS + Comment sections&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ABOUT US &lt;br&gt;
[25:02]   - About us section HTML&lt;br&gt;
[26:52]   - About us section CSS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ACCOMMODATIONS &lt;br&gt;
[33:36]   - Accommodations section HTML&lt;br&gt;
[38:17]   - Accommodations section CSS&lt;br&gt;
[44:37]   - Accommodations section Responsiveness + Animation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TESTIMONIALS&lt;br&gt;
[49:35]   - Testimonials section HTML&lt;br&gt;
[54:16]   - Testimonials section CSS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;IMPROVEMENTS&lt;br&gt;
[01:01:32] - Fixed Top Navigation With Transition&lt;br&gt;
[01:06:39] - Date input Safari, Default Date input value&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DEPLOYMENT&lt;br&gt;
[01:07:53] - Deploy Website with Github Pages&lt;br&gt;
[01:09:27] - Happy Coding&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;__________ 🐣 About me __________&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I am the founder of &lt;a href="https://devchallenges.io/"&gt;https://devchallenges.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow my Twitter &lt;a href="https://twitter.com/thunghiemdinh"&gt;https://twitter.com/thunghiemdinh&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Join Discord &lt;a href="https://discord.com/invite/3R6vFeM"&gt;https://discord.com/invite/3R6vFeM&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Web Developer Roadmap 2021 in 10 minutes</title>
      <dc:creator>Thu Nghiem</dc:creator>
      <pubDate>Tue, 08 Dec 2020 18:59:59 +0000</pubDate>
      <link>https://forem.com/nghiemthu/web-developer-2010-in-10-minutes-271b</link>
      <guid>https://forem.com/nghiemthu/web-developer-2010-in-10-minutes-271b</guid>
      <description>&lt;p&gt;I am going to tell you what exactly I would do if I had to start to learn web development in 2021.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Essential Tools&lt;/li&gt;
&lt;li&gt;Programming Languages&lt;/li&gt;
&lt;li&gt;Libraries/Frameworks&lt;/li&gt;
&lt;li&gt;Projects you can do&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More on &lt;a href="https://learn.devchallenges.io/tutorial/web-developer-roadmap-2021" rel="noopener noreferrer"&gt;learn.devchallenges.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can watch the video here:&lt;/p&gt;

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

&lt;p&gt;Or a short summary here:&lt;/p&gt;

&lt;h3&gt;
  
  
  Essential Tools:
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  Programming Languages
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  Libraries/Frameworks
&lt;/h3&gt;

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

&lt;h2&gt;
  
  
  __________ 🐣 About me __________
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I am the founder of &lt;a href="https://devchallenges.io/" rel="noopener noreferrer"&gt;DevChallenges&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Subscribe to my &lt;a href="https://www.youtube.com/channel/UCmSmLukBF--YrKZ2g4akYAQ?sub_confirmation=1" rel="noopener noreferrer"&gt;Youtube Channel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow my &lt;a href="https://twitter.com/thunghiemdinh" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Join &lt;a href="https://discord.com/invite/3R6vFeM" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Full Project-based Tutorial - React + Next.js [FREE]✨</title>
      <dc:creator>Thu Nghiem</dc:creator>
      <pubDate>Wed, 04 Nov 2020 23:09:04 +0000</pubDate>
      <link>https://forem.com/nghiemthu/full-project-based-tutorial-react-next-js-free-434l</link>
      <guid>https://forem.com/nghiemthu/full-project-based-tutorial-react-next-js-free-434l</guid>
      <description>&lt;p&gt;If you want to learn to code by building real-life projects, this tutorial is for you. Together, we will build a complete application (World Ranks) using React and Next.js.&lt;/p&gt;

&lt;p&gt;LIVE APP: &lt;a href="https://world-ranks.vercel.app/" rel="noopener noreferrer"&gt;https://world-ranks.vercel.app/&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;📖 You will learn: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data sorting, filtering&lt;/li&gt;
&lt;li&gt;Responsive Layout without any CSS framework&lt;/li&gt;
&lt;li&gt;Dark/Light Mode&lt;/li&gt;
&lt;li&gt;Server-side rendering&lt;/li&gt;
&lt;li&gt;Deploying with Vercel&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🍜 Resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Design: &lt;a href="https://bit.ly/3l1aH3D" rel="noopener noreferrer"&gt;https://bit.ly/3l1aH3D&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Resources: &lt;a href="https://bit.ly/36p79SX" rel="noopener noreferrer"&gt;https://bit.ly/36p79SX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;API: &lt;a href="https://restcountries.eu/" rel="noopener noreferrer"&gt;https://restcountries.eu/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Source Code: &lt;a href="https://github.com/nghiemthu/world-ranks" rel="noopener noreferrer"&gt;https://github.com/nghiemthu/world-ranks&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✨ You can find the tutorial here:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  __________ 🔖 Tutorial Structure __________
&lt;/h2&gt;

&lt;p&gt;[00:00]   - Introduction&lt;br&gt;
[1:37]    - Setting up Next.js project&lt;br&gt;
[6:00]    - Build Layout Component&lt;br&gt;
[10:25]   - getStaticProps&lt;br&gt;
[12:30]   - Build Input Component&lt;br&gt;
[18:40]   - Build Country Table Component&lt;br&gt;
[27:10]   - Sort Countries by state (value and direction)&lt;br&gt;
[38:47]   - Filter Countries by Name, Region and Subregion&lt;br&gt;
[41:46]   - Dymanic Route in Next.js&lt;br&gt;
[43:47]   - getServerSideProps (Server Side Rendering)&lt;br&gt;
[45:43]   - Styling Country Page&lt;br&gt;
[1:11:52] - Build Responsive Layouts&lt;br&gt;
[1:29:51] - Build Dark/Light Theme Switcher&lt;br&gt;
[1:36:42] - Create new Github repo and deploy to Vercel&lt;br&gt;
[1:39:15] - getServerSideProps and getStaticProps/getStaticPaths&lt;br&gt;
[1:43:01] - Happy Coding!&lt;/p&gt;

&lt;h2&gt;
  
  
  __________ 🐣 About me __________
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I am the founder of &lt;a href="https://devchallenges.io/" rel="noopener noreferrer"&gt;DevChallenges&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Subscribe my &lt;a href="https://www.youtube.com/channel/UCmSmLukBF--YrKZ2g4akYAQ?sub_confirmation=1" rel="noopener noreferrer"&gt;Youtube Channel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Follow my &lt;a href="https://twitter.com/thunghiemdinh" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Join &lt;a href="https://discord.com/invite/3R6vFeM" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tutorial</category>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Complete tutorial - Grid component with React + Typescript + Storybook + SCSS</title>
      <dc:creator>Thu Nghiem</dc:creator>
      <pubDate>Wed, 28 Oct 2020 13:08:11 +0000</pubDate>
      <link>https://forem.com/nghiemthu/complete-tutorial-grid-component-with-react-typescript-storybook-scss-2dhp</link>
      <guid>https://forem.com/nghiemthu/complete-tutorial-grid-component-with-react-typescript-storybook-scss-2dhp</guid>
      <description>&lt;p&gt;One of the best ways to learn React is by creating reusable components. Instead of using bootstrap or other frameworks when working with Grid layout, why don't make it yourself?&lt;/p&gt;

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

&lt;h1&gt;
  
  
  In this tutorial, I am going to show you:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Set up create-react-app with typescript template&lt;/li&gt;
&lt;li&gt;Create a simple Box component&lt;/li&gt;
&lt;li&gt;Create a Reusable Grid Component using Flexbox&lt;/li&gt;
&lt;li&gt;Create Grid Ruler using CSS Grid&lt;/li&gt;
&lt;li&gt;Handle Responsiveness in Grid Layout&lt;/li&gt;
&lt;li&gt;Add dynamic props JustifyContent and AlignItems&lt;/li&gt;
&lt;li&gt;Set up storybook&lt;/li&gt;
&lt;li&gt;Write Grid Document in storybook&lt;/li&gt;
&lt;li&gt;Deploy storybook with Netlify&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  What you will learn in this tutorial:
&lt;/h1&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://reactjs.org/" rel="noopener noreferrer"&gt;React&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;React is a popular Front-end framework and one reason for that is the ability to create Reusable component, so why not start learning by creating those amazing components?&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.typescriptlang.org/docs/" rel="noopener noreferrer"&gt;Typescript&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;I am not going to go into details about Typescript in this video but you will have an idea of how React and Typescript working together&lt;/p&gt;

&lt;h2&gt;
  
  
  Flexbox and CSS Grid
&lt;/h2&gt;

&lt;p&gt;By working with the basic concept, we will use and master the basics of Flexbox and CSS Grid&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://sass-lang.com/documentation" rel="noopener noreferrer"&gt;SCSS&lt;/a&gt; + CSS modules
&lt;/h2&gt;

&lt;p&gt;We are going to work with some of the most common features in SCSS like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variables&lt;/li&gt;
&lt;li&gt;List&lt;/li&gt;
&lt;li&gt;Map&lt;/li&gt;
&lt;li&gt;Mixins,...&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://storybook.js.org/" rel="noopener noreferrer"&gt;Storybook&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;One of my first tasks, when I started my job, was maintaining the storybook for our design system. &lt;/p&gt;

&lt;p&gt;Storybook is a great tool to document Reusable components or even multiple flows in UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;We are going to use Netlify to deploy and host our storybook&lt;br&gt;
&lt;a href="https://tender-ride-20dfc0.netlify.app/" rel="noopener noreferrer"&gt;Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🏝 Source code: &lt;a href="https://github.com/nghiemthu/grid-react-component" rel="noopener noreferrer"&gt;Grid React Component&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📝  Text Editor: &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;https://code.visualstudio.com/&lt;/a&gt;&lt;br&gt;
Plugin:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prettier&lt;/li&gt;
&lt;li&gt;ESLint&lt;/li&gt;
&lt;li&gt;Auto Import&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Video:&lt;/p&gt;

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

&lt;p&gt;For other resources, check out:&lt;br&gt;
👉  &lt;a href="https://devchallenges.io/" rel="noopener noreferrer"&gt;https://devchallenges.io/&lt;/a&gt;&lt;/p&gt;

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

</description>
      <category>tutorial</category>
      <category>webdev</category>
      <category>react</category>
      <category>css</category>
    </item>
    <item>
      <title>Build Registration Page with HTML and CSS in 30 minutes</title>
      <dc:creator>Thu Nghiem</dc:creator>
      <pubDate>Sat, 17 Oct 2020 16:02:37 +0000</pubDate>
      <link>https://forem.com/nghiemthu/build-registration-page-with-html-and-css-in-30-minutes-563p</link>
      <guid>https://forem.com/nghiemthu/build-registration-page-with-html-and-css-in-30-minutes-563p</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9xicuox9nisa4ge8xqf2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9xicuox9nisa4ge8xqf2.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Building a Login/Registration page can be tricky. In the video, by using HTML and CSS, I will show how to create Behold registration form. &lt;/p&gt;

&lt;p&gt;We are going to work with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inputs, Form,..&lt;/li&gt;
&lt;li&gt;Grid, Flex, Media query, Transition,...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All the resources will be provided. If you want to try before watching the video or code along, be sure to check out the resources and design below:&lt;/p&gt;

&lt;p&gt;🚀 Download the resources and design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The starter: &lt;a href="https://github.com/nghiemthu/behold-starter" rel="noopener noreferrer"&gt;https://github.com/nghiemthu/behold-starter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Design: &lt;a href="https://bit.ly/2IGn5Ib" rel="noopener noreferrer"&gt;https://bit.ly/2IGn5Ib&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🏝 Source code: You have to create yourself &lt;/p&gt;

&lt;p&gt;📝  Text Editor: &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;https://code.visualstudio.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧑‍💻 BEM naming convention: &lt;a href="https://en.bem.info/methodology/naming-convention/" rel="noopener noreferrer"&gt;https://en.bem.info/methodology/naming-convention/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⛑ Other tools that I use&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/editor/emmet" rel="noopener noreferrer"&gt;Emmet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/prettier/prettier-vscode" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer" rel="noopener noreferrer"&gt;Live Server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Video:&lt;/p&gt;

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

&lt;p&gt;For other resources, check out &lt;a href="https://devchallenges.io/" rel="noopener noreferrer"&gt;https://devchallenges.io/&lt;/a&gt;&lt;/p&gt;

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

</description>
      <category>tutorial</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Build a Responsive Website Using HTML and CSS in 30 minutes</title>
      <dc:creator>Thu Nghiem</dc:creator>
      <pubDate>Mon, 12 Oct 2020 18:48:17 +0000</pubDate>
      <link>https://forem.com/nghiemthu/how-to-create-responsive-website-using-html-and-css-in-30-minutes-2a3k</link>
      <guid>https://forem.com/nghiemthu/how-to-create-responsive-website-using-html-and-css-in-30-minutes-2a3k</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/d-qVF18Q7es"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In this video, I will show you how to create a responsive website using HTML and CSS. We will use Grid, Flex, Google Font, Font Awesome,... This tutorial is suitable for people who are starting with HTML and CSS.&lt;/p&gt;

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

&lt;p&gt;We are going to create this website and you will be provided with the resources and design.&lt;/p&gt;

&lt;p&gt;🚀  &lt;strong&gt;Download the resources and design&lt;/strong&gt;:&lt;br&gt;
Download starter: &lt;a href="https://bit.ly/2Ifvxh8" rel="noopener noreferrer"&gt;https://bit.ly/2Ifvxh8&lt;/a&gt;&lt;br&gt;
Design: &lt;a href="https://bit.ly/2GVUJbV" rel="noopener noreferrer"&gt;https://bit.ly/2GVUJbV&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🏝 &lt;strong&gt;Source code&lt;/strong&gt;: You have to create yourself &lt;/p&gt;

&lt;p&gt;📝  &lt;strong&gt;Text Editor&lt;/strong&gt;: &lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;VS code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧑‍💻 &lt;strong&gt;BEM naming convention&lt;/strong&gt; - I created my own, you can follow me or read more &lt;a href="https://en.bem.info/methodology/naming-convention/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Words within the names of BEM entities are separated by a hyphen (-).&lt;/li&gt;
&lt;li&gt;The element name is separated from the block name by a double hyphen (--).&lt;/li&gt;
&lt;li&gt;Boolean modifiers are separated from the name of the block or element by a double underscore (__).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⛑ &lt;strong&gt;Other tools that I use&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/editor/emmet" rel="noopener noreferrer"&gt;Emmet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/prettier/prettier-vscode" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer" rel="noopener noreferrer"&gt;Live Server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For other resources, check out &lt;strong&gt;&lt;a href="https://devchallenges.io/" rel="noopener noreferrer"&gt;devchallenges.io&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Follow me:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🐦 &lt;a href="https://twitter.com/thunghiemdinh" rel="noopener noreferrer"&gt;Thu Nghiem Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>An Introduction to Reusable Components and how to create Typography Component</title>
      <dc:creator>Thu Nghiem</dc:creator>
      <pubDate>Tue, 08 Sep 2020 15:41:25 +0000</pubDate>
      <link>https://forem.com/nghiemthu/an-introduction-about-reusable-components-and-creating-typography-component-4c6o</link>
      <guid>https://forem.com/nghiemthu/an-introduction-about-reusable-components-and-creating-typography-component-4c6o</guid>
      <description>&lt;p&gt;One reason why React has become so popular is because of its reusable components. During the last few years, the concept of design system has also become popular among web developers.&lt;/p&gt;

&lt;p&gt;I see many people making a mistake when learning React: they go straight to learning Redux and start building complex applications. They forget about learning the basics. &lt;/p&gt;

&lt;p&gt;Because of that, they don't know why they are using React. Is it really useful or is it just trendy?&lt;/p&gt;

&lt;p&gt;In this article, we will look at what reusable components are, and why they are one of the best ways to get started with React. And we will build a typography component together.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are reusable components?
&lt;/h2&gt;

&lt;p&gt;When a component is used more than once, it is reusable. For example in a list, we don't want to make a list item more than once. So we have to make that component reusable.&lt;/p&gt;

&lt;p&gt;But reusable components are more than just an item inside a list. Some examples of reusable components are button and input. These are global components as they can be used anywhere.&lt;/p&gt;

&lt;p&gt;Some are reusable but it's not necessary that they can be used everywhere. One example is that &lt;code&gt;&amp;lt;tr&amp;gt;, &amp;lt;th&amp;gt;, &amp;lt;td&amp;gt;&lt;/code&gt; are reusable in &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; but cannot (should not) be used anywhere else.&lt;/p&gt;

&lt;p&gt;You might already use reusable components. For example, if you are using BEM naming, you can see that Block names are global components, and Element names are scoped components.&lt;/p&gt;

&lt;p&gt;Reusable components get more exciting when it comes to React.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why you should care about them
&lt;/h2&gt;

&lt;p&gt;At this point, you might already see the benefits of reusable components. But here is a list:&lt;/p&gt;

&lt;h3&gt;
  
  
  Efficient
&lt;/h3&gt;

&lt;p&gt;You no longer have to spend your time thinking about pixels and doing the same things over and over again. You can save time by relying on your reusable components. This means that you have more time to improve quality, get your app done faster, and reduce costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Consistent
&lt;/h3&gt;

&lt;p&gt;Having consistency in your application is more important than you might think. As your users start to use your application, they will start to learn about it. They will start to find a pattern. &lt;/p&gt;

&lt;p&gt;An application with consistency will help your users find information faster and with less confusion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Maintainable
&lt;/h3&gt;

&lt;p&gt;Let's say that your designers decide to change the padding in the buttons. Now you have to search for every place that has &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;, go to every CSS file, and try to find where the padding is.&lt;/p&gt;

&lt;p&gt;That is a lot of work. So instead of doing that, if you have reusable components you just need to change it in one place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Avoids duplicated code
&lt;/h3&gt;

&lt;p&gt;Duplicated code is not a bad thing, as it makes your app more flexible. But the code that you have to write again more than three times is not a good thing. Using reusable components helps you avoid copying your code every time.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to make a good reusable component
&lt;/h2&gt;

&lt;p&gt;Building a reusable component can be tricky. Here are a few things you want to look out for:&lt;/p&gt;

&lt;h3&gt;
  
  
  Component should be dumb
&lt;/h3&gt;

&lt;p&gt;For example, the Button should not know the current theme. Instead, the application should tell the Button which theme it is.&lt;/p&gt;

&lt;h4&gt;
  
  
  Incorrect
&lt;/h4&gt;

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

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&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="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
      &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;cn&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button--theme-dark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dark&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="si"&gt;}&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&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 this example, we get the global state from &lt;code&gt;AppContext&lt;/code&gt; in &lt;code&gt;Button&lt;/code&gt; component. This means we have created a dependency between the &lt;code&gt;Button&lt;/code&gt; and the &lt;code&gt;Application&lt;/code&gt;. Therefore, the component is only reusable in the Application Context and we want to avoid this.&lt;/p&gt;

&lt;h4&gt;
  
  
  Correct
&lt;/h4&gt;

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

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;  &lt;span class="nx"&gt;theme&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="nx"&gt;props&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
      &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;cn&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button--theme-dark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dark&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="si"&gt;}&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&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;The button in this example is independent and can be used in any application. This is what we want to do.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scalable
&lt;/h3&gt;

&lt;p&gt;The component should be flexible enough that you can add more configuration easily later on. &lt;/p&gt;

&lt;p&gt;In this example, instead of having &lt;code&gt;hasPrimaryColor&lt;/code&gt; as a boolean, it should have a prop: &lt;code&gt;backgroundColor="primary"&lt;/code&gt;. Some other props should not be &lt;code&gt;boolean&lt;/code&gt; like: &lt;code&gt;size&lt;/code&gt;, &lt;code&gt;varient&lt;/code&gt;,...&lt;/p&gt;

&lt;h3&gt;
  
  
  Incorrect
&lt;/h3&gt;

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

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;hasPrimaryColor&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="nx"&gt;props&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
      &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;cn&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button--color-primary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hasPrimaryColor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&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;Correct&lt;/p&gt;

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

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;color&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="nx"&gt;props&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
      &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;cn&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button--color-primary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;primary&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="si"&gt;}&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&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;h3&gt;
  
  
  Simple
&lt;/h3&gt;

&lt;p&gt;The more complex the component is, the harder to maintain it. You might hear the terms: Stateless Components and Stateful Components, most of the time Stateless Components are simpler than Stateful Components. &lt;/p&gt;

&lt;p&gt;But what are the differences? Well.. it deserves a separate post. But basically, if you can move the logic outside the component and keep it dumb, then you should do it 🙂&lt;/p&gt;
&lt;h2&gt;
  
  
  Building a Typography Component
&lt;/h2&gt;
&lt;h3&gt;
  
  
  User stories
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;As a user, I can choose to have 10 variants: h1, h2, h3, h4, h5, h6, subheading 1, subheading 2, body 1, and body 2&lt;/li&gt;
&lt;li&gt;As a user, I can choose to have primary or error colors&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;a href="https://www.figma.com/file/mDcHD5OOm3kz82hpIWFsjE/Typography-Example" rel="noopener noreferrer"&gt;Design On Figma&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Step 1: Create-react-app and install classnames
&lt;/h4&gt;

&lt;p&gt;Let's create a React app and install &lt;a href="https://www.npmjs.com/package/classnames" rel="noopener noreferrer"&gt;classnames&lt;/a&gt;. &lt;code&gt;Classnames&lt;/code&gt; will allow you to have multiple classes conditionally.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npx create-react-app typography
cd typography
npm i classnames



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

&lt;/div&gt;
&lt;h4&gt;
  
  
  Step 2: Import font
&lt;/h4&gt;

&lt;p&gt;You can go to &lt;a href="https://fonts.google.com/" rel="noopener noreferrer"&gt;Google Font&lt;/a&gt; to choose the ones you wish. In our case, we use &lt;a href="https://fonts.google.com/specimen/Ubuntu?query=Ubuntu" rel="noopener noreferrer"&gt;Ubuntu&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can import by using &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tag inside &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&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;link&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://fonts.googleapis.com/css2?family=Poppins:wght@400;500&amp;amp;family=Ubuntu+Mono&amp;amp;display=swap"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;or you can import in your css file&lt;/p&gt;


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

&lt;p&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="sx"&gt;url('&lt;a href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500&amp;amp;family=Ubuntu+Mono&amp;amp;display=swap'" rel="noopener noreferrer"&gt;https://fonts.googleapis.com/css2?family=Poppins:wght@400;500&amp;amp;amp;family=Ubuntu+Mono&amp;amp;amp;display=swap'&lt;/a&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/p&gt;

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

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Step 3: Use the font and reset the default styling&lt;br&gt;
&lt;/h4&gt;

&lt;p&gt;Let's reset some of the default styles and use our font. By resetting the default, we are free to give it our own style without knowing what the default values are.&lt;/p&gt;

&lt;p&gt;In our cause, let's remove the default padding and margin. Some other components might have &lt;code&gt;border&lt;/code&gt;, &lt;code&gt;background-color&lt;/code&gt;, &lt;code&gt;text-decoration&lt;/code&gt;,..&lt;/p&gt;


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

&lt;p&gt;&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"Poppins"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;-webkit-font-smoothing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;antialiased&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;-moz-osx-font-smoothing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grayscale&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="o"&gt;&lt;em&gt;,&lt;/em&gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="o"&gt;&lt;/span&gt;&lt;span class="nd"&gt;::after&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;br&gt;
&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;::before&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inherit&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;br&gt;
&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;br&gt;
&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;br&gt;
&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;br&gt;
&lt;span class="nt"&gt;h5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;br&gt;
&lt;span class="nt"&gt;h6&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;br&gt;
&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

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

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Step 4: Create a typography component&lt;br&gt;
&lt;/h4&gt;

&lt;p&gt;Always remember to pass &lt;code&gt;...props&lt;/code&gt; to your component, so that we don't lose the &lt;a href="https://www.w3schools.com/tags/ref_attributes.asp" rel="noopener noreferrer"&gt;default attribute&lt;/a&gt;.&lt;/p&gt;


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

&lt;p&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;br&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;cn&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;classnames&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./typography.css&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="c1"&gt;// Defining the HTML tag that the component will support&lt;/span&gt;&lt;br&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;variantsMapping&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="na"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;h1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
  &lt;span class="na"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;h2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
  &lt;span class="na"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;h3&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
  &lt;span class="na"&gt;h4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;h4&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
  &lt;span class="na"&gt;h5&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;h5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
  &lt;span class="na"&gt;h6&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;h6&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
  &lt;span class="na"&gt;subheading1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;h6&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
  &lt;span class="na"&gt;subheading2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;h6&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
  &lt;span class="na"&gt;body1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;p&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
  &lt;span class="na"&gt;body2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;p&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;};&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="c1"&gt;// Create a functional component that take &lt;/span&gt;&lt;br&gt;
&lt;span class="c1"&gt;// variant: the selected html tag&lt;/span&gt;&lt;br&gt;
&lt;span class="c1"&gt;// color: the selected color&lt;/span&gt;&lt;br&gt;
&lt;span class="c1"&gt;// children: the node passed inside the Component&lt;/span&gt;&lt;br&gt;
&lt;span class="c1"&gt;// ...props: the default attribute of the Component&lt;/span&gt;&lt;br&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Typography&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;color&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="nx"&gt;props&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;br&gt;
&lt;span class="c1"&gt;// If the variant exists in variantsMapping, we use it. &lt;/span&gt;&lt;br&gt;
&lt;span class="c1"&gt;// Otherwise, use p tag instead.&lt;/span&gt;&lt;br&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;variantsMapping&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;variant&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;p&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Component&lt;/span&gt;&lt;br&gt;
      &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;cn&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;br&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&lt;code&gt;typography--variant-&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;${&amp;lt;/span&amp;gt;&amp;lt;span class="nx"&amp;gt;variant&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;span class="s2"&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
        &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&lt;code&gt;typography--color-&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;${&amp;lt;/span&amp;gt;&amp;lt;span class="nx"&amp;gt;color&amp;lt;/span&amp;gt;&amp;lt;span class="p"&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;span class="s2"&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;br&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;br&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;br&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Component&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;};&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Typography&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/p&gt;

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

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Step 5: Add styling to your component&lt;br&gt;
&lt;/h4&gt;

&lt;p&gt;The last step is to give style to our component. This code is straightforward, we add different &lt;code&gt;font-size&lt;/code&gt; and &lt;code&gt;font-weight&lt;/code&gt; to each variant option and &lt;code&gt;color&lt;/code&gt; to color option.&lt;/p&gt;


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

&lt;p&gt;&lt;span class="nc"&gt;.typography--variant-h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nc"&gt;.typography--variant-h2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3.75rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nc"&gt;.typography--variant-h3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nc"&gt;.typography--variant-h4&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2.125rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nc"&gt;.typography--variant-h5&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nc"&gt;.typography--variant-h6&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.25rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nc"&gt;.typography--variant-subheading1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nc"&gt;.typography--variant-subheading2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.875rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nc"&gt;.typography--variant-body1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nc"&gt;.typography--variant-body1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.875rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nc"&gt;.typography--color-primary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f2994a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nc"&gt;.typography--color-error&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;br&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#eb5757&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;/p&gt;

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

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Challenge&lt;br&gt;
&lt;/h4&gt;

&lt;p&gt;The component is not totally complete. I challenge you to add more props like: &lt;code&gt;align&lt;/code&gt;, &lt;code&gt;display&lt;/code&gt;, &lt;code&gt;marginButton&lt;/code&gt;,...&lt;/p&gt;

&lt;h4&gt;
  
  
  Result
&lt;/h4&gt;

&lt;p&gt;You can find the source code &lt;a href="https://github.com/nghiemthu/typography-article" rel="noopener noreferrer"&gt;here&lt;/a&gt; if you want to check it out.&lt;/p&gt;

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

&lt;p&gt;After making Typography component, we can see that making reusable components can be difficult and usually saves you a lot of time in the future. It is also a good way to get started learning React or Vue.&lt;/p&gt;

&lt;p&gt;Next time, when working with React, don't be lazy and simply copy code from other places. If you think it should be a component, make it one. It will help you out a lot.&lt;/p&gt;

&lt;p&gt;Here are 2 challenges to get started creating Reusable components and learning React:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://devchallenges.io/challenges/ohgVTyJCbm5OZyTB2gNY" rel="noopener noreferrer"&gt;Button Component&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;Do you have some questions? Free feel to leave me a comment 😁&lt;/p&gt;

&lt;p&gt;🐦 &lt;a href="https://twitter.com/thunghiemdinh" rel="noopener noreferrer"&gt;Thu Nghiem Twitter&lt;/a&gt;&lt;br&gt;
🐦 &lt;a href="https://twitter.com/devchallengesio" rel="noopener noreferrer"&gt;Devchallenge.io Twitter&lt;/a&gt;&lt;br&gt;
🔥 &lt;a href="https://devchallenges.io/" rel="noopener noreferrer"&gt;Devchallenges Website&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>8 Projects with modern designs to become a Full-stack Master 2020</title>
      <dc:creator>Thu Nghiem</dc:creator>
      <pubDate>Wed, 02 Sep 2020 13:44:09 +0000</pubDate>
      <link>https://forem.com/nghiemthu/8-projects-with-modern-designs-to-become-a-full-stack-master-2020-14j9</link>
      <guid>https://forem.com/nghiemthu/8-projects-with-modern-designs-to-become-a-full-stack-master-2020-14j9</guid>
      <description>&lt;p&gt;Are you looking for projects to sharpen your skills? Are you stuck at coming up with new ideas?&lt;/p&gt;

&lt;p&gt;As developers, we love to code, but sometimes it's hard to find designs or ideas to work on.&lt;/p&gt;

&lt;p&gt;Hi, my name is Thu. You might hear from me in some previous posts. In the last months, I have been working on creating 8 real-life projects that include designs and requirements. &lt;/p&gt;

&lt;p&gt;I have designed 8 distinct projects that help you to practice every skill needed to become a super-star developer. &lt;/p&gt;

&lt;p&gt;With these projects, you can do to build an outstanding portfolio and become a Full-stack Master.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://devchallenges.io/challenges/O2iGT9yBd6xZBrOcVirx" rel="noopener noreferrer"&gt;1. Image Uploader&lt;/a&gt;
&lt;/h2&gt;

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

&lt;h4&gt;
  
  
  What you will practice
&lt;/h4&gt;

&lt;p&gt;You will develop something that I am always afraid of. It is an Image Uploader application. You will learn how to upload a photo from the Front-end, how to store a file in the database and build a simple API. &lt;/p&gt;

&lt;h4&gt;
  
  
  Level
&lt;/h4&gt;

&lt;p&gt;Front-end: ⭐⭐&lt;br&gt;
Back-end: ⭐⭐⭐&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://devchallenges.io/challenges/rYyhwJAxMfES5jNQ9YsP" rel="noopener noreferrer"&gt;2. My Unsplash&lt;/a&gt;
&lt;/h2&gt;

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

&lt;h4&gt;
  
  
  What you will practice
&lt;/h4&gt;

&lt;p&gt;You will learn to build the basic API functionality (like GET, POST, PUT, DELETE in RESTful API).&lt;/p&gt;

&lt;p&gt;You will also learn how to make an image grid similar to Unsplash. &lt;/p&gt;

&lt;h4&gt;
  
  
  Level
&lt;/h4&gt;

&lt;p&gt;Front-end: ⭐⭐⭐⭐&lt;br&gt;
Back-end: ⭐⭐⭐⭐&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://devchallenges.io/challenges/f4NJ53rcfgrP6sBMD2jt" rel="noopener noreferrer"&gt;3. CatWiki&lt;/a&gt;
&lt;/h2&gt;

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

&lt;h4&gt;
  
  
  What you will practice
&lt;/h4&gt;

&lt;p&gt;Are you a cat lover? Using an external API to fetch the cat data, you will build an API that tracks user behavior. You will also get to practice how searching, filtering work in the backend.&lt;/p&gt;

&lt;p&gt;The project will also test your Front-end skills with a layout full of cats 🙀&lt;/p&gt;

&lt;h4&gt;
  
  
  Level
&lt;/h4&gt;

&lt;p&gt;Front-end: ⭐⭐⭐⭐&lt;br&gt;
Back-end: ⭐⭐⭐⭐&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://devchallenges.io/challenges/N1fvBjQfhlkctmwj1tnw" rel="noopener noreferrer"&gt;4. Authentication App&lt;/a&gt;
&lt;/h2&gt;

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

&lt;h4&gt;
  
  
  What you will practice
&lt;/h4&gt;

&lt;p&gt;Being a backend or full-stack developer, it's inevitable that you have to deal with user and authentication. In this project, you will learn and build a simple but powerful application to handle user authentication and user data. &lt;/p&gt;

&lt;p&gt;This project will also be the foundation for the upcoming projects.&lt;/p&gt;

&lt;h4&gt;
  
  
  Level
&lt;/h4&gt;

&lt;p&gt;Front-end: ⭐⭐&lt;br&gt;
Back-end: ⭐⭐⭐⭐&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://devchallenges.io/challenges/mGd5VpbO4JnzU6I9l96x" rel="noopener noreferrer"&gt;5. Shoppingify&lt;/a&gt;
&lt;/h2&gt;

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

&lt;h4&gt;
  
  
  What you will practice
&lt;/h4&gt;

&lt;p&gt;I mean... building an e-shop application is a really huge task. But if you want to practice building one, Shoppingify is a good start. This project does not require any authentication but it has almost every function that an e-shop has. You will learn how to build a shopping cart, add new items, edit items, manage history/data,...&lt;/p&gt;

&lt;p&gt;This project also test your Front-end skill at a high level, as you will create a complex and responsive layout&lt;/p&gt;

&lt;h4&gt;
  
  
  Level
&lt;/h4&gt;

&lt;p&gt;Front-end: ⭐⭐⭐⭐⭐&lt;br&gt;
Back-end: ⭐⭐⭐⭐&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://devchallenges.io/challenges/UgCqszKR7Q7oqb4kRfI0" rel="noopener noreferrer"&gt;6. Chat Group&lt;/a&gt;
&lt;/h2&gt;

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

&lt;h4&gt;
  
  
  What you will practice
&lt;/h4&gt;

&lt;p&gt;I had always wanted to build a chat application and I have done it and it was super fun. In this challenge, you will build a Multiple chat group application. You will learn about real-time databases, you might also get more familiar with technologies like websocket, socketio... &lt;/p&gt;

&lt;p&gt;By integrating your authentication application, you will learn how to manage your users, add them to the group, handling messages,... &lt;/p&gt;

&lt;p&gt;You will also build a simple but not so simple UI 😆&lt;/p&gt;

&lt;h4&gt;
  
  
  Level
&lt;/h4&gt;

&lt;p&gt;Front-end: ⭐⭐⭐&lt;br&gt;
Back-end: ⭐⭐⭐⭐&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://devchallenges.io/challenges/rleoQc34THclWx1cFFKH" rel="noopener noreferrer"&gt;7. Tweeter - Twitter Clone&lt;/a&gt;
&lt;/h2&gt;

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

&lt;h4&gt;
  
  
  What you will practice
&lt;/h4&gt;

&lt;p&gt;I love this UI, simple and sleek. &lt;/p&gt;

&lt;p&gt;I am telling you, if you can re-create Twitter, you can do anything 😬.&lt;/p&gt;

&lt;p&gt;In this project, you will create a profile similar to Facebook, Twitter. You will learn how to make "follower-following" system. &lt;/p&gt;

&lt;p&gt;You will also learn how to post a new Tweet, add comments to them. How to filter different Tweet type,...&lt;/p&gt;

&lt;p&gt;This is definitely one of the most challenging projects yet. But I promise you will learn a lot 😎&lt;/p&gt;

&lt;h4&gt;
  
  
  Level
&lt;/h4&gt;

&lt;p&gt;Front-end: ⭐⭐⭐⭐⭐&lt;br&gt;
Back-end: ⭐⭐⭐⭐⭐&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://devchallenges.io/challenges/wP0LbGgEeKhpFHUpPpDh" rel="noopener noreferrer"&gt;8. Thullo - Trello Clone&lt;/a&gt;
&lt;/h2&gt;

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

&lt;h4&gt;
  
  
  What you will practice
&lt;/h4&gt;

&lt;p&gt;I know... it's already the last challenge in this post. But I have to tell you. This project is damn challenging, even for me to design it 😅&lt;/p&gt;

&lt;p&gt;You will learn thousands of things in this project, as there are millions of things going on:&lt;/p&gt;

&lt;p&gt;You will learn how to create a team, project, card, list,... and at the same time, the user should be able to edit and delete them.&lt;/p&gt;

&lt;p&gt;In the Front-end, you will create Drag and Drop functionality that will haunt you for some amount of time 😜&lt;/p&gt;

&lt;p&gt;You will also create commenting, uploading, and other tricky functionalities.&lt;/p&gt;

&lt;p&gt;There are even more to this project. But I'll let you find out 😋&lt;/p&gt;

&lt;h4&gt;
  
  
  Level
&lt;/h4&gt;

&lt;p&gt;Front-end: ⭐⭐⭐⭐⭐&lt;br&gt;
Back-end: ⭐⭐⭐⭐⭐&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;You can find all projects on &lt;a href="https://devchallenges.io/challenges" rel="noopener noreferrer"&gt;DevChallenges.io&lt;/a&gt;. I really hope that these projects inspire you not only for developers but for designers. If you want to get more updates from me. Feel free to follow me and leave me a comment.&lt;/p&gt;

&lt;p&gt;🐦 &lt;a href="https://twitter.com/thunghiemdinh" rel="noopener noreferrer"&gt;Thu Nghiem Twitter&lt;/a&gt;&lt;br&gt;
🐦 &lt;a href="https://twitter.com/devchallengesio" rel="noopener noreferrer"&gt;Devchallenge.io Twitter&lt;/a&gt;&lt;br&gt;
🔥 &lt;a href="https://devchallenges.io/" rel="noopener noreferrer"&gt;Devchallenges Website&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>vue</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Steps to replicate a design with only HTML and CSS</title>
      <dc:creator>Thu Nghiem</dc:creator>
      <pubDate>Sun, 19 Jul 2020 22:14:26 +0000</pubDate>
      <link>https://forem.com/nghiemthu/steps-to-replicate-a-design-with-only-html-and-css-93e</link>
      <guid>https://forem.com/nghiemthu/steps-to-replicate-a-design-with-only-html-and-css-93e</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;Many people make mistakes that they do not plan before implementing a design. Because of that they usually get stuck or the design does not turn out as they planned. Here are the steps that I take in order to ensure that implementing is an enjoyable experience and it will turn out to be what I want.&lt;/p&gt;

&lt;p&gt;Given a design that shows &lt;code&gt;my challenges&lt;/code&gt; page. We will try to translate it into code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NtLx01Fk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zb7tidikic8tthac45dr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NtLx01Fk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zb7tidikic8tthac45dr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Draw the layout
&lt;/h2&gt;

&lt;p&gt;When working with HTML and CSS, you need to plan, you need to draw out the layout before getting started with coding. &lt;/p&gt;

&lt;p&gt;You should break the layout to the smallest components and also check if they need a container or wrapper. Here an example of how I break down the layout. You can do it quickly in your head as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XOG8uBlQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/f3yc6rrca423keai0zgl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XOG8uBlQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/f3yc6rrca423keai0zgl.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Add HTML
&lt;/h2&gt;

&lt;p&gt;After you have the structure layout, either on paper or your head, the next step is to work with HTML.&lt;/p&gt;

&lt;p&gt;You need to decide which element it is. You can ask yourself: Is it a button? Which heading is that? Should it be flex or grid?...&lt;/p&gt;

&lt;p&gt;In order to have the answers to these questions. One of the most important properties in CSS you need to understand is &lt;code&gt;display&lt;/code&gt;. You need to know the differences at least between these values:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. display: block
&lt;/h4&gt;

&lt;p&gt;Displays an element as a block element (like &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;). It starts on a new line and takes up the whole width&lt;/p&gt;

&lt;h4&gt;
  
  
  2. display: inline
&lt;/h4&gt;

&lt;p&gt;Displays an element as an inline element (like &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;). Any height and width properties will have no effect&lt;/p&gt;

&lt;h4&gt;
  
  
  3. display: flex
&lt;/h4&gt;

&lt;p&gt;Displays an element as a block-level flex container&lt;/p&gt;

&lt;h4&gt;
  
  
  4. display: inline-block
&lt;/h4&gt;

&lt;p&gt;Displays an element as an inline-level block container. The element itself is formatted as an inline element, but you can apply height and width values&lt;/p&gt;

&lt;p&gt;With these 4 basic values of the &lt;code&gt;display&lt;/code&gt; property, you can replicate almost every layout.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add classes
&lt;/h2&gt;

&lt;p&gt;If you are working with CSS without any pre-processor, I recommend you to check out &lt;a href="http://getbem.com/naming/"&gt;BEM naming&lt;/a&gt;. Try to think about components that can be reusable. For example in code below, &lt;code&gt;card&lt;/code&gt;, &lt;code&gt;tag&lt;/code&gt;, &lt;code&gt;level&lt;/code&gt;, &lt;code&gt;input&lt;/code&gt;,... are reusable components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"panel"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"heading"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;My challenges&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;i&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"material-icons"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;trending_flat&lt;span class="nt"&gt;&amp;lt;/i&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Welcone back Thu, ready to continue your challenges&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tabs"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tabs__item tabs__item--active"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;In Progress&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tabs__item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Completed&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tabs__item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Favorite&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"input-wrapper"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Search..."&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt; 

  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card__image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://firebasestorage.googleapis.com/v0/b/devchallenges-1234.appspot.com/o/challengesDesigns%2FPortfolioThumbnail.png?alt=media&amp;amp;token=417f625d-715a-4611-8215-2c19aaf490f9"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"portfolio challenge"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;          
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card__content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tag"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Responsive&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card__content__title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Portfolio Challenge&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Intermediate&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__indicator"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__indicator__item level__indicator__item--active"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__indicator__item level__indicator__item--active"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__indicator__item level__indicator__item--active"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__indicator__item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__indicator__item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card__image"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://firebasestorage.googleapis.com/v0/b/devchallenges-1234.appspot.com/o/CatwikiThumbnail.png?alt=media&amp;amp;token=4a59b587-4766-48ac-ada0-d59fe12d924e"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"catwiki challenge"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;          
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card__content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"tag"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Full-stack&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card__content__title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;CatWiki Challenge&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Advanced&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__indicator"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__indicator__item level__indicator__item--active"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__indicator__item level__indicator__item--active"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__indicator__item level__indicator__item--active"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__indicator__item level__indicator__item--active"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"level__indicator__item"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Work with CSS - the most fun part
&lt;/h2&gt;

&lt;p&gt;There are few tips when starting to work with CSS to keep it consistent and easy:&lt;/p&gt;

&lt;h4&gt;
  
  
  tip 1:
&lt;/h4&gt;

&lt;p&gt;Reset all the default stylings and use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;*,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;:before&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nd"&gt;:after&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&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;h4&gt;
  
  
  tip 2:
&lt;/h4&gt;

&lt;p&gt;Use CSS variables&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'Poppins'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--primary-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#FF7A4E&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="py"&gt;--grey-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#F2F2F2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--grey-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#BDBDBD&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="py"&gt;--text-xs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.75rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--text-sm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.875rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--text-md&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--text-lg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="py"&gt;--space-sm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--space-md&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--space-lg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="py"&gt;--rounded-sm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--rounded&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="py"&gt;--shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0px&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.05&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;Alright, so the styling is all up to you now. You can check out the final result here: &lt;a href="https://codepen.io/thunghiem/pen/WNrYqjZ?editors=0100"&gt;Final Result&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Check it on mobile and add media query if needed.
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="n"&gt;only&lt;/span&gt; &lt;span class="n"&gt;screen&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;600px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.card&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="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nc"&gt;.card__image&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&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;h2&gt;
  
  
  Step 5: Fix your spacing and color if needed.
&lt;/h2&gt;

&lt;p&gt;Checkout Figma for the correct font and spacing. And try to improve your design.&lt;/p&gt;

&lt;h1&gt;
  
  
  Wrapped up
&lt;/h1&gt;

&lt;p&gt;My name is Thu, creator of devchallenges.io. I write blogs to help my users - students. If you wonder what devchallenge is.  check it here: &lt;a href="https://devchallenges.io/"&gt;https://devchallenges.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or connect with me:&lt;/p&gt;

&lt;p&gt;Twitter: &lt;a href="https://twitter.com/thunghiemdinh"&gt;https://twitter.com/thunghiemdinh&lt;/a&gt;&lt;br&gt;
Youtube: &lt;a href="https://www.youtube.com/channel/UCmSmLukBF--YrKZ2g4akYAQ"&gt;https://www.youtube.com/channel/UCmSmLukBF--YrKZ2g4akYAQ&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How I became a software engineer</title>
      <dc:creator>Thu Nghiem</dc:creator>
      <pubDate>Fri, 17 Jul 2020 13:00:08 +0000</pubDate>
      <link>https://forem.com/nghiemthu/how-i-became-a-software-engineer-3bje</link>
      <guid>https://forem.com/nghiemthu/how-i-became-a-software-engineer-3bje</guid>
      <description>&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;You might know me from a few posts as the creator of devchallenges.io. I really wanted to make youtube videos as it's challenging and I wanted to challenge myself.&lt;/p&gt;

&lt;p&gt;Here is my first Vlog, this describes my story of coming to Finland and become a software developer and why I made devchallenges.io&lt;/p&gt;

&lt;p&gt;Please check it out. Hopefully, some of you would enjoy it.&lt;/p&gt;

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

&lt;p&gt;Channel: &lt;a href="https://www.youtube.com/channel/UCmSmLukBF--YrKZ2g4akYAQ"&gt;Thu Nghiem&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Top 5 free HOSTING sites with Instructions</title>
      <dc:creator>Thu Nghiem</dc:creator>
      <pubDate>Tue, 07 Jul 2020 20:58:58 +0000</pubDate>
      <link>https://forem.com/nghiemthu/top-5-free-hosting-sites-with-instructions-10h</link>
      <guid>https://forem.com/nghiemthu/top-5-free-hosting-sites-with-instructions-10h</guid>
      <description>&lt;p&gt;Getting your website deployed is probably the first thing you want to do and with these 5 sites, you can do it in just minutes. &lt;/p&gt;

&lt;h1&gt;
  
  
  Table of Contents - The order is alphabetical
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Firebase&lt;/li&gt;
&lt;li&gt;Netlify&lt;/li&gt;
&lt;li&gt;Render&lt;/li&gt;
&lt;li&gt;Surge&lt;/li&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Firebase
&lt;/h1&gt;

&lt;p&gt;With &lt;a href="https://firebase.google.com/docs/hosting"&gt;Firebase hosting&lt;/a&gt;, you can deploy web apps - both static and dynamic content by a single command.&lt;/p&gt;

&lt;p&gt;Step 1. Install the Firebase CLI&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;npm install -g firebase-tools
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2. Sign into Firebase&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;firebase login
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3. Navigate into your project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;firebase init
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step  4. Prepare your site&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;npm run build
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step  5. Deploy&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;firebase deploy
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Netlify
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://www.netlify.com/"&gt;Netlify&lt;/a&gt; supports GitHub, GitLab and Bitbucket, it will redeploy the site just by pushing the code without manually rebuild.&lt;/p&gt;

&lt;p&gt;Step  1. Login to Netlify and select &lt;code&gt;New site from git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Step  2. Choose your repository and configure settings with options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Branch to deploy, default &lt;code&gt;master&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Build Command, default &lt;code&gt;npm run build&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Publish directory, default &lt;code&gt;public&lt;/code&gt;, but it is usually &lt;code&gt;public, dist, build,...&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step  3. Select &lt;code&gt;Deploy site&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Render
&lt;/h1&gt;

&lt;p&gt;With &lt;a href="https://render.com/"&gt;Render&lt;/a&gt;, you can host static sites, backend APIs, databases, cron jobs, and all your other apps in one place.&lt;/p&gt;

&lt;p&gt;Step 1. Login to Render and create a new Web Service and give access to your repository&lt;/p&gt;

&lt;p&gt;Step 2. Enter your settings&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Environment&lt;/strong&gt;: &lt;code&gt;Static Site&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build Command&lt;/strong&gt;: e.g &lt;code&gt;npm run build&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish Directory&lt;/strong&gt;: e.g &lt;code&gt;public, dist, build,...&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 3. Select &lt;code&gt;Create Web Service&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Surge
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://surge.sh/"&gt;Surge&lt;/a&gt; is a cloud platform to publish static web&lt;br&gt;
for Front-End Developers.&lt;/p&gt;

&lt;p&gt;Step 1. Install the surge CLI&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;npm install -g surge
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2. Build your site&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;npm run build
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3. Deploy your site providing your Publish Directory&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;surge public/
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Vercel
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://vercel.com/"&gt;Vercel&lt;/a&gt; is a cloud platform for websites and serverless APIs, free and easy to use&lt;/p&gt;

&lt;p&gt;Step 1. Install the Vercel CLI&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;npm i -g vercel
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2. Deploy&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;vercel
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Deploy and hosting is fast and easy. These sites are perfect for you to host any solutions from &lt;a href="https://devchallenges.io/"&gt;devchallenges.io&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://devchallenges.io/"&gt;devchallenges.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter: &lt;a href="https://twitter.com/DevchallengesI"&gt;@DevchallengesI&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Blogs: &lt;a href="https://devchallenges-blogs.web.app/"&gt;devchallenges Blogs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to leave me any comments&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
