<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kumar Kalyan </title>
    <description>The latest articles on DEV Community by Kumar Kalyan  (@kumarkalyan).</description>
    <link>https://dev.to/kumarkalyan</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%2F725663%2F302f714f-fd17-4ff4-9828-67625f3c1dd6.jpg</url>
      <title>DEV Community: Kumar Kalyan </title>
      <link>https://dev.to/kumarkalyan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kumarkalyan"/>
    <language>en</language>
    <item>
      <title>Building a 🧾 PDF Invoice Generator with 📨 Twilio SendGrid, 🐍 Python, Flask, and 🖌️ Bootstrap</title>
      <dc:creator>Kumar Kalyan </dc:creator>
      <pubDate>Sat, 07 Dec 2024 09:04:42 +0000</pubDate>
      <link>https://dev.to/kumarkalyan/building-a-pdf-invoice-generator-with-twilio-sendgrid-python-flask-and-bootstrap-1pco</link>
      <guid>https://dev.to/kumarkalyan/building-a-pdf-invoice-generator-with-twilio-sendgrid-python-flask-and-bootstrap-1pco</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49p23euy1jg7tbtcg7ze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49p23euy1jg7tbtcg7ze.png" alt="save the article" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In the current digital era, virtually all online purchases, whether for goods or services, include an invoice. This document helps businesses retain records and customers keep track of their transactions in addition to serving as proof of purchase. Automating the creation of invoices can streamline processes for developers and enhance client satisfaction. In this post you will learn how to use Twilio SendGrid, Python ,Flask and Bootstrap to create a straightforward yet effective invoice generation application. &lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial Requirements 🛠️📋
&lt;/h2&gt;

&lt;p&gt;Before you start, there are a few prerequisites for this tutorial that need to be addressed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A free Twilio Sendgrid account. If you are new to Twilio Sendgrid, &lt;a href="https://signup.sendgrid.com/" rel="noopener noreferrer"&gt;signup for a free account&lt;/a&gt;. Using free account you can send 100 emails per day
&lt;/li&gt;
&lt;li&gt;Python 3.10 or latest version . If your machine does not have this version or latest python version you can download it from &lt;a href="https://www.python.org/downloads/" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ReportLab Toolkit. It is a free and open source python library for generating PDFs and graphics
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://getbootstrap.com/" rel="noopener noreferrer"&gt;Bootstrap&lt;/a&gt; version 4.6. It is a free and open-source framework for building responsive websites. You will use it for building the invoice UI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Configure Your Twilio SendGrid Account 🔧📤
&lt;/h2&gt;

&lt;p&gt;Before you start building your app, you will need a Twilio SendGrid API key to use the Twilio SendGrid API and send emails using your Flask application.&lt;/p&gt;

&lt;p&gt;To get an API key, first &lt;a href="https://login.sendgrid.com/login/identifier" rel="noopener noreferrer"&gt;log in&lt;/a&gt; to your Twilio SendGrid account using your credentials. Then, on the left side, navigate to Settings, select &lt;strong&gt;API Keys&lt;/strong&gt;, and click on &lt;strong&gt;Create API Key&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frc92fjv9okc9tfrx09q1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frc92fjv9okc9tfrx09q1.png" alt="Create Twilio Sendgrig API Key" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, add your preferred API key name (in my case, I am using &lt;strong&gt;Flask-invoice-new&lt;/strong&gt;, then choose &lt;strong&gt;Full Access&lt;/strong&gt; under API Key Permissions, and finally, click on &lt;strong&gt;Create &amp;amp; View&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now, you will see that your API key has been generated. Copy the key and store it in a secure place, as Twilio SendGrid will only allow you to view the key once for security reasons.&lt;/p&gt;

&lt;p&gt;Now that your API key has been generated successfully, you need to verify your email with Twilio SendGrid, which you will use to send emails.&lt;/p&gt;

&lt;p&gt;Navigate to &lt;strong&gt;Settings&lt;/strong&gt;, select &lt;strong&gt;Sender Authentication&lt;/strong&gt;, then click on the &lt;strong&gt;Verify a Single Sender&lt;/strong&gt; button. Next, click on &lt;strong&gt;Create New Sender&lt;/strong&gt;, fill in the required details, and click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw7galuymn6834o1buaxg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw7galuymn6834o1buaxg.png" alt="Create a Sender" width="704" height="877"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Twilio SendGrid will now send a verification email to this address with a link. Once you click on the link and complete the verification, you’re good to go.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure your  Python Virtual Environment 🌟🐍
&lt;/h2&gt;

&lt;p&gt;Now that you have generated your API keys in the previous step, you need to set up your Python virtual environment to create a Flask application and send emails using the Twilio SendGrid API. &lt;/p&gt;

&lt;p&gt;Create a directory for your app and set up the Python virtual environment using the commands provided below. (For this tutorial, I am using the directory name 'Twilio-Sendgrid-Flask-invoice-app').&lt;/p&gt;

&lt;p&gt;For unix or mac users&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;Twilio-Sendgrid-Flask-invoice-app
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;Twilio-Sendgrid-Flask-invoice-app
&lt;span class="nv"&gt;$ &lt;/span&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
&lt;span class="nv"&gt;$source&lt;/span&gt; venv/bin/activate
&lt;span class="o"&gt;(&lt;/span&gt;venv&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;$ &lt;/span&gt;_
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Windows users&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;Twilio-Sendgrid-Flask-invoice-app
&lt;span class="nb"&gt;cd &lt;/span&gt;Twilio-Sendgrid-Flask-invoice-app
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
venv&lt;span class="se"&gt;\S&lt;/span&gt;cripts&lt;span class="se"&gt;\a&lt;/span&gt;ctivate

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

&lt;/div&gt;



&lt;p&gt;Once you have configured your Python virtual environment, install the required Python dependencies using the command below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;flask sendgrid reportlab python-dotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create your Flask application 🐍🧾📧
&lt;/h2&gt;

&lt;p&gt;Create a file named “&lt;strong&gt;app.py&lt;/strong&gt;” in the root directory and add  the starter code for creating a Flask application&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;render_template&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;send_file&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;reportlab.lib.pagesizes&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;letter&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;reportlab.platypus&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Table&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TableStyle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Paragraph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;SimpleDocTemplate&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;reportlab.lib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;colors&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;reportlab.lib.units&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;inch&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;reportlab.lib.styles&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;getSampleStyleSheet&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;io&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BytesIO&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sendgrid&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SendGridAPIClient&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sendgrid.helpers.mail&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Mail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Attachment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Disposition&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileContent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FileType&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;TWILIO_SENDGRID_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;EMAIL_ADDRESS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MY_VERIFIED_EMAIL_ADDRESS&lt;/span&gt;&lt;span class="sh"&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 the above code I have imported all the necessary modules required to create a Flask application and build the invoice generator app. For security reasons, I am using environment variables to store my Twilio SendGrid API key and my email address, which will be used to send PDF invoices to clients' email addresses&lt;/p&gt;

&lt;p&gt;Now, create a file named '.env' in the root directory and store your Twilio SendGrid API key and your verified email address. For this tutorial, I am using the variable names &lt;strong&gt;TWILIO_SENDGRID_API_KEY&lt;/strong&gt; and &lt;strong&gt;MY_VERIFIED_EMAIL_ADDRESS&lt;/strong&gt;. Flask will automatically import these environment variables using the &lt;strong&gt;Python dotenv&lt;/strong&gt; package.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;TWILIO_SENDGRID_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"YOUR TWILIO SENDGRID API KEY "&lt;/span&gt;
&lt;span class="nv"&gt;MY_VERIFIED_EMAIL_ADDRESS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"YOUR EMAIL ADDRESS"&lt;/span&gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create the home page for your Flask application  🏠💻
&lt;/h2&gt;

&lt;p&gt;In Flask, you can render dynamic HTML content by combining HTML templates and data, a process called template rendering. This means that when you open a specific route in your Flask application, you can render a predefined HTML file there. For this tutorial, you will create an HTML file for the invoice UI so that whenever anyone opens the home route of your Flask application, they will see a beautiful invoice UI where they can enter invoice data.&lt;/p&gt;

&lt;p&gt;Now, create a folder named &lt;strong&gt;templates&lt;/strong&gt; in the root directory and add an &lt;strong&gt;index.html&lt;/strong&gt; file inside it. In Flask you can render any HTML file present within this folder &lt;/p&gt;

&lt;h3&gt;
  
  
  Building the invoice form using bootstrap  🧾✨
&lt;/h3&gt;

&lt;p&gt;Inside the &lt;strong&gt;index.html&lt;/strong&gt;  file paste the code below&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="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Invoice Generator&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="c"&gt;&amp;lt;!-- Bootstrap CSS --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css"&lt;/span&gt;
        &lt;span class="na"&gt;integrity=&lt;/span&gt;&lt;span class="s"&gt;"sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N"&lt;/span&gt; &lt;span class="na"&gt;crossorigin=&lt;/span&gt;&lt;span class="s"&gt;"anonymous"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;body&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-light"&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;"container mt-5"&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"&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-header bg-primary text-white"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;h3&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"mb-0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Invoice Generator&lt;span class="nt"&gt;&amp;lt;/h3&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-body"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"invoice-form"&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"/generate-invoice"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt; &lt;span class="na"&gt;onsubmit=&lt;/span&gt;&lt;span class="s"&gt;"alertSubmit()"&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;"form-group"&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;for=&lt;/span&gt;&lt;span class="s"&gt;"client_name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Client Name:&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;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;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"client_name"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"client_name"&lt;/span&gt; &lt;span class="na"&gt;required&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;"form-group"&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;for=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Client Email:&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;required&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;h4&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"mt-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Invoice Items&lt;span class="nt"&gt;&amp;lt;/h4&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"items"&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;"form-row align-items-center mb-3 item"&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;"col-md-4"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                                &lt;span class="nt"&gt;&amp;lt;label&amp;gt;&lt;/span&gt;Description&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                                &lt;span class="nt"&gt;&amp;lt;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;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"description[]"&lt;/span&gt; &lt;span class="na"&gt;required&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;"col-md-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                                &lt;span class="nt"&gt;&amp;lt;label&amp;gt;&lt;/span&gt;Quantity&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                                &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"number"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"quantity[]"&lt;/span&gt; &lt;span class="na"&gt;oninput=&lt;/span&gt;&lt;span class="s"&gt;"calculateTotal()"&lt;/span&gt;
                                    &lt;span class="na"&gt;required&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;"col-md-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                                &lt;span class="nt"&gt;&amp;lt;label&amp;gt;&lt;/span&gt;Price&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                                &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"number"&lt;/span&gt; &lt;span class="na"&gt;step=&lt;/span&gt;&lt;span class="s"&gt;"0.01"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"price[]"&lt;/span&gt;
                                    &lt;span class="na"&gt;oninput=&lt;/span&gt;&lt;span class="s"&gt;"calculateTotal()"&lt;/span&gt; &lt;span class="na"&gt;required&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;"col-md-2"&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;type=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-danger btn-block mt-4"&lt;/span&gt;
                                    &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"removeItem(this)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Remove&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&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;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-secondary"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"addItem()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Add Another Item&lt;span class="nt"&gt;&amp;lt;/button&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;"form-group mt-4"&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;for=&lt;/span&gt;&lt;span class="s"&gt;"total_amount"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Total Amount:&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
                        &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"number"&lt;/span&gt; &lt;span class="na"&gt;step=&lt;/span&gt;&lt;span class="s"&gt;"0.01"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"total_amount"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"amount"&lt;/span&gt; &lt;span class="na"&gt;readonly&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;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary btn-block"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Generate and Send Invoice&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;onclick=&lt;/span&gt;&lt;span class="s"&gt;"resetForm()"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-danger btn-block"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Reset Invoice Form &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/form&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;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvuaxs9gddpg8rbvsd0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvuaxs9gddpg8rbvsd0x.png" alt="Invoice UI" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this tutorial, I am using Bootstrap version 4.5, so make sure to add the correct CDN link for this Bootstrap version; otherwise, some features may not work properly.&lt;/p&gt;

&lt;p&gt;In the code above, I have created a form with a simple UI that submits data to the &lt;strong&gt;&lt;code&gt;/generate-invoice&lt;/code&gt;&lt;/strong&gt; route. As of now, it is just a basic HTML form without any actions, as I haven't added functionalities to the buttons yet and for that JavaScript is needed&lt;/p&gt;

&lt;h3&gt;
  
  
  Building the functionalities for buttons 🔘⚙️
&lt;/h3&gt;

&lt;p&gt;To add functionalities to the buttons, include additional invoice fields, and calculate the total invoice amount, you will need to use JavaScript. Paste the JavaScript code just above the ending &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tag to add functionalities to the form.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;alertSubmit&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Email Sent Successfully&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;resetForm&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;invoice-form&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;reset&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Function to add a new item row&lt;/span&gt;
        &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;addItem&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;itemDiv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;div&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="nx"&gt;itemDiv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;className&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;form-row align-items-center mb-3 item&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nx"&gt;itemDiv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
                &amp;lt;div class="col-md-4"&amp;gt;
                    &amp;lt;label&amp;gt;Description&amp;lt;/label&amp;gt;
                    &amp;lt;input type="text" class="form-control" name="description" required&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;div class="col-md-2"&amp;gt;
                    &amp;lt;label&amp;gt;Quantity&amp;lt;/label&amp;gt;
                    &amp;lt;input type="number" class="form-control" name="quantity" oninput="calculateTotal()" required&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;div class="col-md-2"&amp;gt;
                    &amp;lt;label&amp;gt;Price&amp;lt;/label&amp;gt;
                    &amp;lt;input type="number" step="0.01" class="form-control" name="price" oninput="calculateTotal()" required&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;div class="col-md-2"&amp;gt;
                    &amp;lt;button type="button" class="btn btn-danger btn-block mt-4" onclick="removeItem(this)"&amp;gt;Remove&amp;lt;/button&amp;gt;
                &amp;lt;/div&amp;gt;
            `&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;items&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;itemDiv&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="nf"&gt;calculateTotal&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Function to calculate total amount&lt;/span&gt;
        &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calculateTotal&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;quantities&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input[name="quantity"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input[name="price"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

            &lt;span class="nx"&gt;quantities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&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="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;prices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
                &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;qty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseFloat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseFloat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="nx"&gt;total&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;qty&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;prc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;});&lt;/span&gt;

            &lt;span class="c1"&gt;// Update the total amount field&lt;/span&gt;
            &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;total_amount&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Function to remove an item row&lt;/span&gt;
        &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;removeItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;itemDiv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentNode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;items&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;removeChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;itemDiv&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="nf"&gt;calculateTotal&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above code&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;alertSubmit()&lt;/code&gt; - Displays an alert confirming that the email was sent successfully.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;resetForm()&lt;/code&gt; - Resets the values in the invoice form.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;addItem()&lt;/code&gt; - Adds new form fields to include more items in the invoice form.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;calculateTotal()&lt;/code&gt; - Automatically updates the Total Amount field by calculating the total whenever a new item is added to the invoice.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;removeItem()&lt;/code&gt; - Removes a specific item from the invoice form.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Write the Python code that would generate invoices in PDF format and send emails.
&lt;/h2&gt;

&lt;p&gt;Once your UI for the invoice generator app is ready, it’s time to write Python functions for the backend.&lt;/p&gt;

&lt;p&gt;In this part of the tutorial, you will create the &lt;code&gt;/generate-invoice&lt;/code&gt; route to handle the POST request and the &lt;code&gt;send_invoice_via_email()&lt;/code&gt; function to send emails using the free Twilio SendGrid API.&lt;/p&gt;

&lt;h3&gt;
  
  
  Let’s code the &lt;strong&gt;genenate_invoice&lt;/strong&gt; function  💻🧾
&lt;/h3&gt;

&lt;p&gt;Open the &lt;strong&gt;app.py&lt;/strong&gt; file and write a function to fetch data from the form and generate PDF invoices.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;
&lt;span class="nd"&gt;@app.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/generate-invoice&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;POST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_invoice&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;form&lt;/span&gt;
    &lt;span class="n"&gt;client_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;client_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;total_amount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;amount&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Retrieve item details
&lt;/span&gt;    &lt;span class="n"&gt;descriptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getlist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;quantities&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getlist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;quantity&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;prices&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getlist&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;price&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Generate PDF using ReportLab
&lt;/span&gt;    &lt;span class="n"&gt;pdf_buffer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BytesIO&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;pdf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SimpleDocTemplate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf_buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pagesize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;letter&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Styles and layout
&lt;/span&gt;    &lt;span class="n"&gt;styles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getSampleStyleSheet&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; 
    &lt;span class="n"&gt;title_style&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;normal_style&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Normal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;elements&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;

    &lt;span class="c1"&gt;# Invoice Title
&lt;/span&gt;    &lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Paragraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;INVOICE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;title_style&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# Client and date details
&lt;/span&gt;    &lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Paragraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Date: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;%Y-%m-%d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;normal_style&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Paragraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Client: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;client_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;normal_style&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Paragraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;normal_style&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Add space before the table
&lt;/span&gt;
    &lt;span class="c1"&gt;# Table for invoice items
&lt;/span&gt;    &lt;span class="n"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Quantity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Price&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Total&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;price&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;descriptions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;quantities&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prices&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;price&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="c1"&gt;# Adding the Total row with only two columns
&lt;/span&gt;    &lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Total&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_amount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="c1"&gt;# Table style
&lt;/span&gt;    &lt;span class="n"&gt;table&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;items&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;colWidths&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;inch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;inch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;inch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;inch&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setStyle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;TableStyle&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;BACKGROUND&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grey&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;TEXTCOLOR&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;whitesmoke&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ALIGN&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;CENTER&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;FONTNAME&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Helvetica-Bold&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;BOTTOMPADDING&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;BACKGROUND&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beige&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;GRID&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;black&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SPAN&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;  &lt;span class="c1"&gt;# Span the first three cells in the last row
&lt;/span&gt;        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ALIGN&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;CENTER&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;FONTNAME&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Helvetica-Bold&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;]))&lt;/span&gt;

    &lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Adding space and final message
&lt;/span&gt;    &lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Paragraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;normal_style&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Add space after the table
&lt;/span&gt;    &lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Paragraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Thank you for your business!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;title_style&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="c1"&gt;# Build PDF
&lt;/span&gt;    &lt;span class="n"&gt;pdf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Rewind the buffer
&lt;/span&gt;    &lt;span class="n"&gt;pdf_buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;seek&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Send the PDF via email
&lt;/span&gt;    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;send_invoice_via_email&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf_buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;send_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf_buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;as_attachment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;download_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;invoice.pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mimetype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;application/pdf&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error sending email: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;In the above code the important points are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I created a new route, &lt;code&gt;/generate-invoice&lt;/code&gt;, of type POST, meaning this route will only handle POST requests.
&lt;/li&gt;
&lt;li&gt;I am using the &lt;code&gt;request.form&lt;/code&gt; method in Flask to process data coming from the invoice form and store the values in respective variables.
&lt;/li&gt;
&lt;li&gt;I am using the &lt;code&gt;getlist()&lt;/code&gt; method to retrieve multiple data entries using a single key. For this tutorial, there can be multiple invoice items with the same key. Using &lt;code&gt;getlist()&lt;/code&gt; allows me to store item descriptions, quantities, and prices in separate lists.
&lt;/li&gt;
&lt;li&gt;I am using the &lt;code&gt;BytesIO&lt;/code&gt; object from Python's &lt;code&gt;io&lt;/code&gt; module and the &lt;code&gt;SimpleDocTemplate&lt;/code&gt; function from ReportLab to set up a PDF template for the invoice. Note that this &lt;code&gt;BytesIO&lt;/code&gt; class will be used to write invoice data into the PDF file.
&lt;/li&gt;
&lt;li&gt;I am using &lt;code&gt;getSampleStyleSheet()&lt;/code&gt; from ReportLab to add some styles to the invoice data.
&lt;/li&gt;
&lt;li&gt;I am using Python lists and &lt;code&gt;zip&lt;/code&gt; to organize the invoice items and calculate the net total amount for each item by multiplying the quantity by the price to get the final amount.
&lt;/li&gt;
&lt;li&gt;I am using the &lt;code&gt;Table&lt;/code&gt; object from ReportLab to style the invoice table. Once all data processing and arrangement are complete, I use the &lt;code&gt;append&lt;/code&gt; method to add each invoice element to the item list, and the &lt;code&gt;build()&lt;/code&gt; method from ReportLab to generate the invoice as a PDF document.
&lt;/li&gt;
&lt;li&gt;I am using &lt;code&gt;seek()&lt;/code&gt; to reset the file handler pointer to 0.
&lt;/li&gt;
&lt;li&gt;Finally, I check if an email address is provided and, if so, whether the email is successfully sent using the &lt;code&gt;send_invoice_via_email(pdf_buffer, email)&lt;/code&gt; function. Once all conditions are met, I use the &lt;code&gt;send_file()&lt;/code&gt; function from Flask to send the invoice PDF for download. All these steps are wrapped in &lt;code&gt;try&lt;/code&gt; and &lt;code&gt;except&lt;/code&gt; blocks for exception handling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Let’s code the &lt;strong&gt;send_invoice_via_email&lt;/strong&gt; function 📧✨
&lt;/h3&gt;

&lt;p&gt;As of now, the &lt;code&gt;/generate-invoice&lt;/code&gt; route is set up but not yet functional. This means that if you try running your Flask application now, it will show an error. The reason for this is that you still need to add the &lt;code&gt;send_invoice_via_email()&lt;/code&gt; function to handle sending emails. So, let’s create this function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;send_invoice_via_email&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf_buffer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recipient_email&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Convert PDF to base64 for email attachment
&lt;/span&gt;    &lt;span class="n"&gt;pdf_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf_buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getvalue&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Create SendGrid Mail object
&lt;/span&gt;    &lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Mail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;from_email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;kum9748ar@gmail.com&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Replace with your email
&lt;/span&gt;        &lt;span class="n"&gt;to_emails&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;recipient_email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Your Invoice&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;html_content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;p&amp;gt;Please find attached your invoice.&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Create attachment for the email
&lt;/span&gt;    &lt;span class="n"&gt;attachment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Attachment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nc"&gt;FileContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pdf_data&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nc"&gt;FileName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;invoice.pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nc"&gt;FileType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nc"&gt;Disposition&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;attachment&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attachment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;attachment&lt;/span&gt;

    &lt;span class="c1"&gt;# Send email using SendGrid
&lt;/span&gt;    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;sg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;SendGridAPIClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Email sent! Status code: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error sending email: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;In the above function the important points are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The function &lt;code&gt;send_invoice_via_email(pdf_buffer, recipient_email)&lt;/code&gt; takes two arguments: &lt;code&gt;pdf_buffer&lt;/code&gt;, which is your generated invoice PDF, and &lt;code&gt;recipient_email&lt;/code&gt;, which is the email address where the invoice will be sent to the client.
&lt;/li&gt;
&lt;li&gt;I am using the &lt;code&gt;base64&lt;/code&gt; module to convert the PDF into an email attachment.
&lt;/li&gt;
&lt;li&gt;I am using the &lt;code&gt;Mail&lt;/code&gt; object from &lt;code&gt;sendgrid.helpers.mail&lt;/code&gt; to add essential details required to send an email via SendGrid, and the &lt;code&gt;Attachment&lt;/code&gt; object to include the generated PDF as an attachment with this email message.
&lt;/li&gt;
&lt;li&gt;Finally, I am using the &lt;code&gt;SendGridAPIClient()&lt;/code&gt; object, which takes the SendGrid API key as an argument, to send the email. This portion of code is also wrapped within &lt;code&gt;try&lt;/code&gt; and &lt;code&gt;except&lt;/code&gt; blocks for exception handling.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run your application 🚀💻
&lt;/h2&gt;

&lt;p&gt;To run your Flask application, you need to add a final piece of code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The above code ensures that your &lt;strong&gt;app.py&lt;/strong&gt; file will run as a script and not as a module when it is imported.&lt;/p&gt;

&lt;p&gt;Now, open your terminal, navigate to your project directory (for this tutorial, it should be &lt;strong&gt;Twilio-Sendgrid-Flask-invoice-app&lt;/strong&gt;), and use the command below to start your Flask application. Then, open your browser and go to &lt;a href="http://127.0.0.1:5000" rel="noopener noreferrer"&gt;http://127.0.0.1:5000&lt;/a&gt;, and you will see your fully functional invoice app running successfully&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python app.py 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4guh9mwk3p17u36y4uxy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4guh9mwk3p17u36y4uxy.png" alt="Final Invoice App" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The image above shows that my Flask application is working properly. &lt;br&gt;
Now, let’s check the mailbox. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ii9ybozgcekegkje9h3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ii9ybozgcekegkje9h3.png" alt="Sample email image" width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see that I have received an email via SendGrid containing my invoice attached as a PDF.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some key points to remember for deployment 🌐📝
&lt;/h2&gt;

&lt;p&gt;Now that your Flask invoice generator app is ready, and you’re excited to share it with others as a live app, keep these key points in mind: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate a requirements.txt file using &lt;code&gt;pip install -r requirements.txt&lt;/code&gt; which contains a list of python packages required to run this app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F179w5qdk2ax8jvw18pcp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F179w5qdk2ax8jvw18pcp.png" alt="Python package list" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The above image shows the &lt;code&gt;requirements.txt&lt;/code&gt; file for the &lt;strong&gt;Twilio-Sendgrid-Flask-invoice-app&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make sure to add the &lt;code&gt;.env&lt;/code&gt; file to your &lt;code&gt;.gitignore&lt;/code&gt; file so that nobody else can see your API keys.
&lt;/li&gt;
&lt;li&gt;Keep in mind that if you are using a Twilio SendGrid trial account, you can only send 100 emails per day. If you need to send more, I recommend upgrading your plan, as they offer a very flexible pricing structure.
&lt;/li&gt;
&lt;li&gt;If you want to update the application UI, make sure to check out the documentation for Bootstrap version &lt;a href="https://getbootstrap.com/docs/4.6/getting-started/introduction/" rel="noopener noreferrer"&gt;4.6.2&lt;/a&gt;, which I have used for this tutorial. Otherwise, you may need to rewrite the entire UI code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion 🎯✅
&lt;/h2&gt;

&lt;p&gt;So far in this tutorial, you have learned how to send emails using Twilio SendGrid, create a fully functional Flask app, work with Python's io module, render static HTML files, create PDFs in Python, and use Bootstrap and I hope you enjoyed it!&lt;/p&gt;

&lt;p&gt;Check out Twilio’s developer docs and blogs to learn how to build interesting apps using various Twilio products. They also offer a $15 trial credit to new users that you can use for free.&lt;br&gt;&lt;br&gt;
The entire code for this tutorial is hosted on GitLab, and you can check it using this &lt;a href="https://gitlab.com/kumar-kalyan/twilio-sendgrid-flask-invoice-app" rel="noopener noreferrer"&gt;link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>python</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>🔥 17 Best Free GitHub Repositories to Crack System Design Interviews 🛠️</title>
      <dc:creator>Kumar Kalyan </dc:creator>
      <pubDate>Sat, 07 Dec 2024 06:44:47 +0000</pubDate>
      <link>https://dev.to/kumarkalyan/17-best-free-github-repositories-to-crack-system-design-interviews-h5p</link>
      <guid>https://dev.to/kumarkalyan/17-best-free-github-repositories-to-crack-system-design-interviews-h5p</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgnqqgjsa66pf0hdqpce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgnqqgjsa66pf0hdqpce.png" alt="Save this article" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;📜 TL;DR ✂️&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Ever imagined how big tech companies build and scale large-scale products? What skills do their engineers possess? How do they decide which framework to choose for a product, or how do they handle millions of terabytes of data?&lt;/p&gt;

&lt;p&gt;The only answer to all these questions is System Design. Yes, you heard it right! System Design is the core skill required to design, manage, and build large-scale, scalable products. It involves defining the architecture, components, interfaces, modules, and data for a system to meet specific requirements.&lt;/p&gt;

&lt;p&gt;There are no specific prerequisites for this article. Anyone, from senior developers to those who have just started their coding journey, can benefit from these resources. For beginners, the only expectation is that you have a basic understanding of computers and programming.&lt;/p&gt;

&lt;p&gt;In this article, I will share the &lt;strong&gt;17 best free Github repositories&lt;/strong&gt; to learn and master system design. These resources will help you ace your technical interviews or apply the concepts to build and scale your own products.&lt;/p&gt;

&lt;p&gt;Please make sure to give a star to these repositories as it's free to start them!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzd5w4nmv5pyl8lq6yqe4.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzd5w4nmv5pyl8lq6yqe4.gif" alt="Learn System Design make money" width="640" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Repositories
&lt;/h2&gt;

&lt;p&gt;GitHub is a code hosting platform where people can share, version, manage, test, and deploy their code. This wonderful platform uses Git versioning systems, which allow developers to maintain and version their code in a tree-like structure. However, many people think that GitHub is just a code hosting platform, unaware that it is also a hidden treasure trove of free and open-source knowledge. In this article, I will share the best free GitHub repositories to learn and master system design for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;a href="https://github.com/donnemartin/system-design-primer" rel="noopener noreferrer"&gt;System Design Primer&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;System Design Primer&lt;/strong&gt; is a free and open-source GitHub repository designed to help you learn and practice all the key concepts of system design at no cost.
&lt;/li&gt;
&lt;li&gt;In this repository you will find topics like &lt;strong&gt;Performance vs scalability, Latency vs throughput, Availability vs consistency, CAP theorem, CP - consistency and partition tolerance, AP - availability and partition tolerance, Consistency patterns, Weak consistency, Eventual consistency, Strong consistency, Availability patterns, Fail-over, Replication, Availability in numbers, Domain name system, Content delivery network, Push CDNs, Pull CDNs, Load balancer, Active-passive, Active-active, Layer 4 load balancing, Layer 7 load balancing, Horizontal scaling, Reverse proxy (web server), Load balancer vs reverse proxy, Application layer, Microservices, Service discovery, Database, Relational database management system (RDBMS), Master-slave replication, Master-master replication, Federation, Sharding, Denormalization, SQL tuning, NoSQL, Key-value store, Document store, Wide column store, Graph Database, SQL or NoSQL, Cache, Client caching, CDN caching, Web server caching, Database caching, Application caching, Caching at the database query level, Caching at the object level, When to update the cache, Cache-aside, Write-through, Write-behind (write-back), Refresh-ahead, Asynchronism, Message queues, Task queues, Back pressure, Communication, Transmission control protocol (TCP), User datagram protocol (UDP), Remote procedure call (RPC), Representational state transfer (REST) &amp;amp;  Security.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The repository has received &lt;strong&gt;227k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;47k times&lt;/strong&gt; on GitHub.
&lt;/li&gt;
&lt;li&gt;It currently has &lt;strong&gt;118+ contributors&lt;/strong&gt; and is available in &lt;strong&gt;10+ languages&lt;/strong&gt;, including English, Japanese, French, German, and Bengali.
&lt;/li&gt;
&lt;li&gt;It is ideal for everyone from &lt;strong&gt;junior developers&lt;/strong&gt; to &lt;strong&gt;software architects&lt;/strong&gt; and &lt;strong&gt;CTOs&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/donnemartin/system-design-primer" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  2.&lt;a href="https://github.com/kamranahmedse/developer-roadmap" rel="noopener noreferrer"&gt;System Design Roadmap by Developer Roadmap&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Developer Roadmap&lt;/strong&gt; is a &lt;strong&gt;free&lt;/strong&gt; and &lt;strong&gt;open-source&lt;/strong&gt; GitHub repository designed to help you learn and practice &lt;strong&gt;system design&lt;/strong&gt; through a structured &lt;strong&gt;roadmap&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It also includes &lt;strong&gt;roadmaps&lt;/strong&gt; for learning &lt;strong&gt;React&lt;/strong&gt;, &lt;strong&gt;TypeScript&lt;/strong&gt;, &lt;strong&gt;JavaScript&lt;/strong&gt;, &lt;strong&gt;Python&lt;/strong&gt;, and many other &lt;strong&gt;programming languages&lt;/strong&gt; and &lt;strong&gt;frameworks&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;298k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;39.2k times&lt;/strong&gt; on GitHub.
&lt;/li&gt;
&lt;li&gt;It currently has &lt;strong&gt;1,160 contributors&lt;/strong&gt; and is available only in &lt;strong&gt;English&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It is ideal for everyone from &lt;strong&gt;junior developers&lt;/strong&gt; to &lt;strong&gt;software architects&lt;/strong&gt; and &lt;strong&gt;CTOs&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/kamranahmedse/developer-roadmap" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  3.  &lt;a href="https://github.com/ByteByteGoHq/system-design-101" rel="noopener noreferrer"&gt;System Design 1o1 by Byte Byte Go&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;System Design 101&lt;/strong&gt; from &lt;strong&gt;Byte Byte Go&lt;/strong&gt; is a free and open-source GitHub repository designed to help you learn and practice system design from scratch.
Although this repository includes a portion of their paid System Design course, it can be considered a goldmine for beginner developers or junior software engineers.
You can find important and beginner-friendly system design concepts such as &lt;strong&gt;software communication protocols&lt;/strong&gt;, &lt;strong&gt;APIs&lt;/strong&gt;, &lt;strong&gt;CI/CD&lt;/strong&gt;, &lt;strong&gt;databases&lt;/strong&gt;, &lt;strong&gt;software architecture patterns&lt;/strong&gt;, and much more.
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;64.6k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;6.8k times&lt;/strong&gt; on GitHub.
&lt;/li&gt;
&lt;li&gt;It currently has &lt;strong&gt;15 contributors&lt;/strong&gt; and is available only in &lt;strong&gt;English&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It is ideal for &lt;strong&gt;junior software engineers&lt;/strong&gt; and &lt;strong&gt;newbie software developers&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  4.  &lt;a href="https://github.com/InterviewReady/system-design-resources" rel="noopener noreferrer"&gt;System Design Resources by Interview Ready&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;System Design Resources&lt;/strong&gt; from &lt;strong&gt;InterviewReady&lt;/strong&gt; is a &lt;strong&gt;free and open-source GitHub repository&lt;/strong&gt; designed to help you learn and practice &lt;strong&gt;system design&lt;/strong&gt; from scratch.
Although this repository includes a portion of &lt;strong&gt;InterviewReady’s paid and comprehensive System Design course&lt;/strong&gt;, it can still be considered a &lt;strong&gt;valuable resource&lt;/strong&gt; for &lt;strong&gt;beginner developers&lt;/strong&gt; or &lt;strong&gt;junior software engineers&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;In this repository, you will find important topics such as &lt;strong&gt;Video Processing&lt;/strong&gt;, &lt;strong&gt;Cluster and Workflow Management&lt;/strong&gt;, &lt;strong&gt;Intra-Service Messaging&lt;/strong&gt;, &lt;strong&gt;Message Queue Antipattern&lt;/strong&gt;, &lt;strong&gt;Service Mesh&lt;/strong&gt;, &lt;strong&gt;Practical System Design&lt;/strong&gt;, &lt;strong&gt;Distributed File Systems&lt;/strong&gt;, &lt;strong&gt;Time Series Databases&lt;/strong&gt;, &lt;strong&gt;Rate Limiting&lt;/strong&gt;, &lt;strong&gt;In-Memory Databases (e.g., Redis)&lt;/strong&gt;, &lt;strong&gt;Network Protocols&lt;/strong&gt;, &lt;strong&gt;Chess Engine Design&lt;/strong&gt;, &lt;strong&gt;Subscription Management Systems&lt;/strong&gt;, &lt;strong&gt;Google Docs&lt;/strong&gt;, &lt;strong&gt;API Design&lt;/strong&gt;, &lt;strong&gt;NoSQL Database Internals&lt;/strong&gt;, &lt;strong&gt;NoSQL Database Algorithms&lt;/strong&gt;, &lt;strong&gt;Database Replication&lt;/strong&gt;, &lt;strong&gt;Containers and Docker&lt;/strong&gt;, &lt;strong&gt;Capacity Estimation&lt;/strong&gt;, &lt;strong&gt;Publisher-Subscriber Architecture&lt;/strong&gt;, &lt;strong&gt;Event-Driven Architectures&lt;/strong&gt;, &lt;strong&gt;Software Architectures&lt;/strong&gt;, &lt;strong&gt;Microservices&lt;/strong&gt;, &lt;strong&gt;Distributed Transaction Consistency Patterns&lt;/strong&gt;, &lt;strong&gt;Load Balancing&lt;/strong&gt;, &lt;strong&gt;Alerts and Anomaly Detection&lt;/strong&gt;, &lt;strong&gt;Distributed Logging&lt;/strong&gt;, &lt;strong&gt;Metrics and Text Search Engines&lt;/strong&gt;, &lt;strong&gt;Single Point of Failure&lt;/strong&gt;, &lt;strong&gt;Location-Based Services&lt;/strong&gt;, &lt;strong&gt;Batch Processing&lt;/strong&gt;, &lt;strong&gt;Real-Time Stream Processing&lt;/strong&gt;, &lt;strong&gt;Caching&lt;/strong&gt;, &lt;strong&gt;Distributed Consensus&lt;/strong&gt;, &lt;strong&gt;Authorization&lt;/strong&gt;, &lt;strong&gt;Content Delivery Networks&lt;/strong&gt;, &lt;strong&gt;Testing Distributed Systems&lt;/strong&gt;, and &lt;strong&gt;other system design resources&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;16k stars&lt;/strong&gt; and has been &lt;strong&gt;forked over 2k times&lt;/strong&gt; on GitHub.
It currently has &lt;strong&gt;12 contributors&lt;/strong&gt;, is maintained by the &lt;strong&gt;InterviewReady team&lt;/strong&gt;, and is available &lt;strong&gt;only in English&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It is ideal for &lt;strong&gt;newbie to mid-level software developers&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  5.  &lt;a href="https://github.com/ashishps1/awesome-low-level-design" rel="noopener noreferrer"&gt;Awesome Low Level Design by Ashish Pratap Singh&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Awesome Low-Level Design&lt;/strong&gt; repository by &lt;strong&gt;Asish Pratap Singh&lt;/strong&gt;( Previously Software engineer at  &lt;strong&gt;Amazon, Adobe&lt;/strong&gt; and &lt;strong&gt;Morgan Stanely&lt;/strong&gt;.)is a &lt;strong&gt;free and open-source GitHub repository&lt;/strong&gt; designed to help you learn and practice &lt;strong&gt;low-level design topics&lt;/strong&gt; from scratch.
This repository can be considered one of the most valuable resources for learning and mastering &lt;strong&gt;low-level design concepts&lt;/strong&gt; for free, catering to everyone from &lt;strong&gt;newbie&lt;/strong&gt; to &lt;strong&gt;professional developers&lt;/strong&gt; and &lt;strong&gt;software architects&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;This repository covers &lt;strong&gt;fundamental to advanced topics&lt;/strong&gt;, including &lt;strong&gt;OOP (Object-Oriented Programming)&lt;/strong&gt;, important &lt;strong&gt;SDLC principles&lt;/strong&gt; like &lt;strong&gt;SOLID&lt;/strong&gt;, &lt;strong&gt;DRY&lt;/strong&gt;, &lt;strong&gt;YAGNI&lt;/strong&gt;, and &lt;strong&gt;KISS&lt;/strong&gt;, &lt;strong&gt;Software Design Patterns&lt;/strong&gt; such as &lt;strong&gt;Creational Patterns&lt;/strong&gt;, &lt;strong&gt;Structural Patterns&lt;/strong&gt;, and &lt;strong&gt;Behavioral Patterns&lt;/strong&gt;, &lt;strong&gt;UML diagrams&lt;/strong&gt;, and &lt;strong&gt;Low-Level Design interview questions&lt;/strong&gt;, such as &lt;strong&gt;Parking Lot Design&lt;/strong&gt;, &lt;strong&gt;Vending Machine Design&lt;/strong&gt;, &lt;strong&gt;Publisher-Subscriber Design&lt;/strong&gt;, and many more.
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;8.2k stars&lt;/strong&gt; and has been &lt;strong&gt;forked over 2.3k times&lt;/strong&gt; on GitHub.
It currently has &lt;strong&gt;21 contributors&lt;/strong&gt;, is maintained by the &lt;strong&gt;Asish Pratap Singh&lt;/strong&gt;, and is available &lt;strong&gt;only in English&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It is ideal for &lt;strong&gt;newbie to professional software developers&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/ashishps1/awesome-low-level-design" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  6.  &lt;a href="https://github.com/karanpratapsingh/system-design" rel="noopener noreferrer"&gt;System Design by Karanpratap Singh&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;System Design by Karan Pratap Singh&lt;/strong&gt; is a free and open-source Github repository to learn and master Beginner friendly to &lt;strong&gt;advanced level System Design&lt;/strong&gt; concepts for free. Karan is currently working as a cloud engineer at &lt;strong&gt;Apple&lt;/strong&gt; and oftenly shares tutorials on topics like System Design and Software Development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In this repository you will find topics like &lt;strong&gt;IP, OSI Model, TCP and UDP, Domain Name System (DNS), Load Balancing, Clustering, Caching, Content Delivery Network (CDN), Proxy, Availability, Scalability, Storage,Databases and DBMS, SQL databases, NoSQL databases, SQL vs NoSQL databases, Database Replication, Indexes, Normalization and Denormalization, ACID and BASE consistency models, CAP theorem, PACELC Theorem, Transactions, Distributed Transactions, Sharding, Consistent Hashing, Database Federation,N-tier architecture, Message Brokers, Message Queues, Publish-Subscribe, Enterprise Service Bus (ESB), Monoliths and Microservices, Event-Driven Architecture (EDA), Event Sourcing, Command and Query Responsibility Segregation (CQRS), API Gateway, REST, GraphQL, gRPC, Long polling, WebSockets, Server-Sent Events (SSE),Geohashing and Quadtrees, Circuit breaker, Rate Limiting, Service Discovery, SLA, SLO, SLI, Disaster recovery, Virtual Machines (VMs) and Containers, OAuth 2.0 and OpenID Connect (OIDC), Single Sign-On (SSO), SSL, TLS, mTLS&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The repository has &lt;strong&gt;33k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;3.6k times&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt;.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It currently has &lt;strong&gt;10 contributors&lt;/strong&gt;, is maintained by*&lt;em&gt;Karan Pratap Singh&lt;/em&gt;*, and is available only in English.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It is ideal for newbie to professional software developers.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/karanpratapsingh/system-design" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7.  &lt;a href="https://github.com/prasadgujar/low-level-design-primer" rel="noopener noreferrer"&gt;Low Level Design Primer&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low Level Design Primer&lt;/strong&gt; is a free and open-source Github repository to brush up &lt;strong&gt;advanced Low Level System Design&lt;/strong&gt; concepts for free. It is built and maintained by &lt;a href="https://www.linkedin.com/in/prasad-gujar-3a9704157/" rel="noopener noreferrer"&gt;&lt;strong&gt;Prasad Gujar&lt;/strong&gt;&lt;/a&gt;  who is currently working as a Software  engineer at &lt;strong&gt;Tala Payments team&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;In this repository you will find topics like System Design Book Recommendations, links to free , popular and authentic Youtube Channels for mastering System Design, System Design Interview questions and their solutions like  Design an &lt;strong&gt;online hotel booking system, Design a Logistics System, Design Tic Tac Toe, Design a configuration management system, Design a Vending Machine, Design Maps Navigator Client for different transportation types (OOD), Design a Json Parser from scratch, Design Elevator, CricInfo/Cricbuzz,&lt;/strong&gt;etc
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;6.5k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;2.3k times&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It currently has &lt;strong&gt;7 contributors&lt;/strong&gt;, is maintained by &lt;strong&gt;Prasad Gujar&lt;/strong&gt;, and is available only in English.
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It is ideal for newbie to professional software developers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/prasadgujar/low-level-design-primer" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8.  &lt;a href="https://github.com/InterviewReady/Low-Level-Design" rel="noopener noreferrer"&gt;Low Level Design By Interview Ready&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Low Level Design&lt;/strong&gt; is a free and open-source Github repository to brush up from &lt;strong&gt;beginner to&lt;/strong&gt; &lt;strong&gt;advanced Low Level System Design&lt;/strong&gt; concepts for free. It is built and maintained by Interview Ready team which is one of the leading platforms for learning and mastermind System Design Interviews
&lt;/li&gt;
&lt;li&gt;In this repository you will find beginner level low level System Design  topics like &lt;strong&gt;Cache, Event Bus, Rate Limiter, Service Orchestrator, Design Patterns, etc&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;704 stars&lt;/strong&gt; and has been forked over &lt;strong&gt;163 times&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It currently has &lt;strong&gt;no visible team&lt;/strong&gt;, is maintained by the &lt;strong&gt;Interview Ready team&lt;/strong&gt; , and is available only in English.
&lt;/li&gt;
&lt;li&gt;It is ideal for newbie to professional software developers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/InterviewReady/Low-Level-Design" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  9.  &lt;a href="https://github.com/checkcheckzz/system-design-interview" rel="noopener noreferrer"&gt;System Design Interview&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;System Design Interview&lt;/strong&gt; is a free and open-source Github repository to level  up &lt;strong&gt;beginner to&lt;/strong&gt; &lt;strong&gt;advancedLevel System Design Interview&lt;/strong&gt;  questions for free.
&lt;/li&gt;
&lt;li&gt;In this repository you will find beginner level low level System Design  topics like &lt;strong&gt;Object Oriented Design,System Design interview tips, Product roadmaps, Design Patterns, etc&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;21.8k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;5.1k times&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It currently has &lt;strong&gt;23&lt;/strong&gt; contributors , and is available only in English.
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It is ideal for newbie to professional software developers.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/checkcheckzz/system-design-interview" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  10.  &lt;a href="https://github.com/shashank88/system_design" rel="noopener noreferrer"&gt;System Design By Shashank Khare&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;System Design By ShashanK Khare&lt;/strong&gt;  is a free and open-source Github repository to level  up &lt;strong&gt;beginner to&lt;/strong&gt; &lt;strong&gt;advancedLevel System Design Interview&lt;/strong&gt;  questions for free. It is build and maintained by &lt;strong&gt;ShashanK Khare&lt;/strong&gt; who is one of the brilliant software engineers currently working for mangroup UK.

&lt;ul&gt;
&lt;li&gt;In this repository you will find beginner level low level System Design  topics like &lt;strong&gt;Cache, Event Bus, Rate Limiter, Service Orchestrator, Design Patterns, etc&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;21.8k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;5.1k times&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It currently has &lt;strong&gt;23&lt;/strong&gt; contributors , and is available only in English.
&lt;/li&gt;
&lt;li&gt;It is ideal for newbie to professional software developers.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/shashank88/system_design" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  11.  &lt;a href="https://github.com/ashishps1/awesome-system-design-resources" rel="noopener noreferrer"&gt;Awesome System Design Resources&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;System Design By Ashish Pratap Singh&lt;/strong&gt;  is a free and open-source Github repository to level  up &lt;strong&gt;beginner to&lt;/strong&gt; &lt;strong&gt;advancedLevel System Design Interview &amp;amp;&lt;/strong&gt; &lt;strong&gt;questions&lt;/strong&gt; for free. It is built and maintained by &lt;strong&gt;Ashish Pratap Singh&lt;/strong&gt; who is one of the most  talented software engineers and previously worked at &lt;strong&gt;Amazon&lt;/strong&gt; as a senior software engineer.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In this repository you will find &lt;strong&gt;System Design Key Concepts&lt;/strong&gt;  topics like*&lt;em&gt;, Scalability, Availability, CAP Theorem, ACID Transactions, Consistent Hashing, Rate Limiting, SPOF, Fault Tolerance, Consensus Algorithms, Gossip Protocol, Service Discovery, API Design, Disaster Recovery, Distributed Tracing, 🛠️ System Design Building Blocks like , Content Delivery Network (CDN), Proxy vs Reverse Proxy, Domain Name System (DNS), Caching, Caching Strategies, Distributed Caching, Load Balancing, Databases Types, SQL vs NoSQL, Database Indexes, Consistency Patterns, HeartBeats, Circuit Breaker, Idempotency, Database Scaling, Data Replication, Data Redundancy, Database Sharding, Database Architectures, Failover, Bloom Filters, Message Queues, WebSockets, Checksums, API Gateway, Microservices Guidelines, Distributed Locking, ⚖️ System Design Tradeoffs like , Top 15 Tradeoffs, Vertical vs Horizontal Scaling, Stateful vs Stateless Design, Batch vs Stream Processing, Strong vs Eventual Consistency, Read-Through vs Write-Through Cache, Push vs Pull Architecture, Long-polling vs WebSockets, REST vs RPC, Synchronous vs asynchronous communications, Latency vs Throughput, 🖇️ System Design Architectural Patterns like, Client-Server Architecture, Microservices Architecture, Serverless Architecture, Event-Driven Architecture, Peer-to-Peer (P2P) Architecture and many more&lt;/em&gt;*
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;18.7k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;4.5k times&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It currently has &lt;strong&gt;2&lt;/strong&gt; contributors , and is available only in English.
&lt;/li&gt;
&lt;li&gt;It is ideal for newbie to professional software developers.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/ashishps1/awesome-system-design-resources" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  12.  &lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Design" rel="noopener noreferrer"&gt;Grokking System Design By Jeevan Kumar Raj&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Grokking System Design By Jeevan Kumar Raj&lt;/strong&gt;  is a free and open source repository to power up &lt;strong&gt;beginner to&lt;/strong&gt; &lt;strong&gt;advancedLevel System Design skills&lt;/strong&gt; for free. It is built and maintained by &lt;strong&gt;Jeevan Kumar Raj&lt;/strong&gt; who is an experienced HR manager with 14 years of experience   &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In this repository  you will find topics on Distributed System Design Basics like   &lt;strong&gt;Key Characteristics, Load balancing, Caching, Sharding, Indexes, Proxies, Queues, Redundancy, SQL vs. NoSQL, CAP Theorem, Consistent Hashing, Client-Server Communication, System Designs,&lt;/strong&gt;  System Design examples like &lt;strong&gt;Short URL Service, Pastebin, Instagram, Dropbox, Twitter, YouTube, Twitter Search, Web Crawler, Facebook Newsfeed&lt;/strong&gt;  and many more.
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;5.3k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;1.5k times&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It is currently maintained by Jeevan  and is available only in English.
&lt;/li&gt;
&lt;li&gt;It is ideal for newbie to professional software developers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Design" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
    &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  13.  &lt;a href="https://github.com/arpitbbhayani/system-design-questions" rel="noopener noreferrer"&gt;System Design questions by Arpit Bhayani&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;System Design questions by Arpit Bhayani&lt;/strong&gt;  is a free and open source repository to boot up &lt;strong&gt;advanced level  System Designs&lt;/strong&gt; for free. It is built and maintained by &lt;strong&gt;Arpit Bhayani&lt;/strong&gt; who is one of the most talented software architects in the industry having experience working in top notch companies like Google and Amazon and is the creator of Dice Db (a redis-compliant, reactive, scalable, highly-available, unified cache optimized for modern hardware.)

&lt;ul&gt;
&lt;li&gt;In this repository  you will find popular System Design interview questions like designing   &lt;strong&gt;Design a Blogging Platform, Design Online Offline Indicator, Design Airline Check-in, Design SQL-backed KV Store, Design Slack's Real Time Communication - NEW, Design a Load Balancer, Design Synchronized Queue Consumers, Design an Image Service, Design a HashTag Service, Design OnePic, Design Photo Tagging, Design User Affinity, Design Newly Unread Message Indicator, Design a Distributed Cache, Design a Word Dictionary, Design a Superfast KV Store, Design S3, Design a Faster Superfast KV Store, Design a Video Processing Pipeline for Streaming Service, Design a Text-based Search Engine&lt;/strong&gt;  and many more.
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;2.1k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;445 times&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It is currently maintained by Arpit  and is available only in English.
&lt;/li&gt;
&lt;li&gt;It is ideal for newbie to professional software developers.
&lt;/li&gt;
&lt;li&gt;Arpit also provides masterclass System Design Topics so make sure to check out that too&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/arpitbbhayani/system-design-questions" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
 &lt;/p&gt;
&lt;h2&gt;
  
  
  14.  &lt;a href="https://github.com/puncsky/system-design-and-architecture" rel="noopener noreferrer"&gt;System Design and Architecture By Tian Pan&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;System Design and Architecture by Tian Pan&lt;/strong&gt;  is a free and open source repository to skill up &lt;strong&gt;beginner&lt;/strong&gt; to  &lt;strong&gt;advanced level  System Designs Topics&lt;/strong&gt; for free. It is built and maintained by &lt;strong&gt;Tain Pan&lt;/strong&gt; who is one of the most brilliant  and  high-performing software engineers and engineering manager working in the San Francisco Bay Area for 10 years, previously working at Uber, Oracle, IoTeX, and Microsoft. If you are preparing for your &lt;strong&gt;FAANG&lt;/strong&gt; interviews then this repository is a gold mine for you   &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In this repository  you will find the most popular and real world  System Design interview questions like &lt;strong&gt;designing Instagram or Pinterest, Designing Uber, How Facebook Scale its Social Graph Store? TAO, How Netflix Serves Viewing Data?, How to design robust and predictable APIs with idempotency?, How to stream video over HTTP for mobile devices? HTTP Live Streaming (HLS), Designing a distributed logging system, Designing a URL shortener, Designing a KV store with external storage, Designing a distributed in-memory KV store or Memcached, Designing Facebook photo storage, Designing Stock Exchange, Designing Smart Notification of Stock Price Changes, Designing Square Cash or PayPal Money Transfer System, Designing payment webhook, Designing a metric system, Designing a recommendation system, Designing Airbnb or a hotel booking system, Lyft's Marketing Automation Platform -- Symphony, Designing typeahead search or autocomplete, Designing a Load Balancer or Dropbox Bandaid, Fraud Detection with Semi-supervised Learning, and&lt;/strong&gt; System Design theoretical topics &lt;strong&gt;like Introduction to Architecture, How to scale a web service?, ACID vs BASE, Data Partition and Routing, Replica, Consistency, and CAP theorem, Load Balancer Types, Concurrency Model, Improving availability with failover, Bloom Filter, Skiplist, B tree vs. B+ tree, Intro to Relational Database, 4 Kinds of No-SQL, Key value cache, Stream and Batch Processing Frameworks, Cloud Design Patterns, Public API Choices, Lambda Architecture, iOS Architecture Patterns Revisited, What can we communicate in soft skills interview?, Experience Deep Dive, 3 Programming Paradigms, SOLID Design Principles&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;2.6k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;587 times&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It is primarily maintained by Tina  and is available only in English.
&lt;/li&gt;
&lt;li&gt;It is ideal for newbie to professional software architects.
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tian also writes blogs on popular System Design and engineering  topics so make sure to check out that &lt;a href="https://tianpan.co/blog" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/puncsky/system-design-and-architecture" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
    &lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  15.  &lt;a href="https://github.com/Coder-World04/Complete-System-Design" rel="noopener noreferrer"&gt;Complete System Design by Coder World&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Complete System Design By Coder World&lt;/strong&gt;   is a free and open source repository to learn and master  &lt;strong&gt;beginner&lt;/strong&gt; to  &lt;strong&gt;advanced level  System Designs Topics&lt;/strong&gt; for free. It is built and maintained by &lt;strong&gt;Naina Chaturvedi&lt;/strong&gt; who is a Senior Software Engineer with past working experience in Goldman Sachs.   &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In this repository  you will find the most popular and real world  System Design case studies like &lt;strong&gt;Complete Cheat Sheet for Tech Interviews - How to prepare efficiently, Mega Launch - 200+ System Design Case Studies, System Design Most Important Terms, System Design Template, Complete System Design Case Studies, How to solve any System Design Question (approach that you should take), ML System Design Case Studies Series, All tech system design case studies pulse -, How Lyft Handles 2x Traffic Spikes during Peak Hours with Auto scaling Infrastructure, Facebook's News Feed Algorithm Marvel: How it Serves 2.9 Billion Daily Active Users Using PyTorch and Cassandra, 8+ Billion Daily Views: How Facebook's Live Video Ranking Algorithm Processes Daily Views Using Storm and Memcache, 500+ Million Users Daily: The Tech Behind Instagram Stories, At Amazon How 310 Million Users Experience Lightning-Fast Load Times, How PayPal Manages Over 400 Million Active Accounts Seamlessly?, The Billion-Dollar Question - What's My ETA? How Uber Calculates ETA -, What happens Once You Press Play button on Netflix, How Netflix handles millions of memberships efficiently?, Impressive Tech Behind YouTube's Scaling to 3 Billion Users: Inside Vitess Database Clustering, How Microservices Work?, How Distributed Message Queues Work?, How to Efficiently Build Scalable Machine Learning Pipelines, FAANG level - How to Write Production Ready Code?&lt;/strong&gt;  and many more System Design topics.
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;4k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;522 times&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It is primarily maintained by Naina   and is available only in English.
&lt;/li&gt;
&lt;li&gt;It is ideal for newbie to professional software architects.
&lt;/li&gt;
&lt;li&gt;Niana also runs a Youtube channel sharing System Design and other Tech interview specific topics which you can check out &lt;a href="https://www.youtube.com/@ignito5917/about" rel="noopener noreferrer"&gt;here.&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/Coder-World04/Complete-System-Design" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  16.  &lt;a href="https://github.com/codersguild/System-Design" rel="noopener noreferrer"&gt;System Design By Coders Guild&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;System Design By Coders Guild is a free and open source Github repository to practice System Design Topics and interview questions for free. It is built by Sumit Lahiri who is a talented senior full stack developer currently pursuing PHD in Computer Science from IIT Kanpur. Sumit also has previous experience of working as a software engineer at TCS and Golem Factory.

&lt;ul&gt;
&lt;li&gt;In this repository you will find topics like &lt;strong&gt;MapReduce: Simplied Data Processing on Large Clusters, Bigtable: A Distributed Storage System for Structured Data, The Google File System, The Chubby lock service for loosely-coupled distributed systems, Dynamo: Amazon's Highly Available Key-value Store, Frontend in React, State Management using Redux, Angular Get Started, First DJango App, Build a CRUD Todo app with Django and React/Redux, The MERN Stack Tutorial – Building A React CRUD Application From Start To Finish, Introduction to Memcached, Cassandra Introduction Features, Introduction to HBase, Introduction to MongoDB, Introduction to Redis, Storm, Introduction to Zookeeper, Kafka, YouTube Architecture, Scaling Pinterest, Google Architecture, Scaling Twitter, The WhatsApp Architecture, Flickr Architecture, Amazon Architecture, Stack Overflow Architecture, Pinterest Architecture, Tumblr Architecture, Instagram Architecture, TripAdvisor Architecture, Scaling Mailbox, Salesforce Architecture, ESPN Architecture, Uber Architecture, DropBox Design, Splunk Architecture, Good Parts of AWS, Azure DataCenter Architecture, Evolution Of Search Engines Architecture - Highscalability,&lt;/strong&gt; Trending and most asked System Design problems like &lt;strong&gt;Design a CDN network,Design a random ID generation system,Design a key-value database,Design the Facebook news feed function,Design the Facebook timeline function,Design a function to return the top k requests during past time interval,Design an online multiplayer card game,Design a picture sharing system&lt;/strong&gt; and many more
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;2k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;374 times&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It is primarily maintained by Sumit   and is available only in English.
&lt;/li&gt;
&lt;li&gt;It is ideal for newbie to professional software architects.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/codersguild/System-Design" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  17.  &lt;a href="https://github.com/weeeBox/mobile-system-design" rel="noopener noreferrer"&gt;Mobile System Design Interviews&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;System-design-interviews&lt;/strong&gt; is a free and open source GitHub repository to practice and master practical System Design Skills for free   &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In this repository you will find important System Design topics like &lt;strong&gt;High-Level Diagram, Server-side component like Backend,Push Provider,CDN (Content Delivery Network), client-side components like API Service, Persistence,Repository,Tweet Feed Flow,DI Graph, Image Loader, Signals,App Module , Graphql and many more mobile engineering topics&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The repository has &lt;strong&gt;2.1k stars&lt;/strong&gt; and has been forked over &lt;strong&gt;670 times&lt;/strong&gt; on &lt;strong&gt;GitHub&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It is available only in English.
&lt;/li&gt;
&lt;li&gt;It is ideal for newbie professional mobile focused software engineers .&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/weeeBox/mobile-system-design" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give this repository a ⭐&lt;/a&gt;
&lt;/p&gt;


&lt;/li&gt;

&lt;/ul&gt;

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

&lt;p&gt;So far in this article, we have discussed 17 free GitHub repositories that will help you excel in your System Design interviews. Ensure you have a strong foundation in Computer Science fundamentals. If not, start again from the basics and take your time, as some System Design concepts can be complex and require patience to learn and master.&lt;/p&gt;

&lt;p&gt;I recommend dedicating at least six months to your preparation. Create a routine and follow a structured roadmap. If you have questions, post them on public platforms like Stack Overflow or Reddit communities, or use ChatGPT for assistance.&lt;/p&gt;

&lt;p&gt;Finally, make sure to follow my blog if you’re interested in reading more articles like this!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>systemdesign</category>
      <category>programming</category>
    </item>
    <item>
      <title>TOP 50 project ideas to become a golang hero</title>
      <dc:creator>Kumar Kalyan </dc:creator>
      <pubDate>Tue, 28 May 2024 17:11:22 +0000</pubDate>
      <link>https://dev.to/kumarkalyan/top-50-project-ideas-to-become-a-golang-hero-98k</link>
      <guid>https://dev.to/kumarkalyan/top-50-project-ideas-to-become-a-golang-hero-98k</guid>
      <description>&lt;h2&gt;
  
  
  TLDR 🔥
&lt;/h2&gt;

&lt;p&gt;Go, also known as Golang, is a statically typed, compiled programming language designed by Google. It has gained popularity due to its simplicity, performance, and strong support for concurrent programming. Go lang is used in cloud and network services , building CLI tools , Web development , Development Operations &amp;amp; Site Reliability Engineering (SRE) and block chain technology. Go lang developers are in high demand nowadays in the software development industry with an average salary ranging from  $109k/yr to $265k/yr. &lt;/p&gt;

&lt;p&gt;This article contains a list of beginner friendly to advance project ideas which you can build using golang and will definitely help you boost your developer portfolio&lt;/p&gt;

&lt;h2&gt;
  
  
  Beginner Level
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Hello World Web Server: Create a basic web server that responds with "Hello, World!".&lt;/li&gt;
&lt;li&gt;System Info Script: A script to fetch and display system information.&lt;/li&gt;
&lt;li&gt;Log File Parser: Parse and analyze log files.&lt;/li&gt;
&lt;li&gt;Basic REST API: Develop a simple RESTful API with CRUD operations.&lt;/li&gt;
&lt;li&gt;CLI Task Manager: A command-line tool to manage daily tasks.&lt;/li&gt;
&lt;li&gt;File Watcher: Monitor changes in a directory.&lt;/li&gt;
&lt;li&gt;Environment Variable Manager: Manage and load environment variables.&lt;/li&gt;
&lt;li&gt;Simple Reverse Proxy: Implement a basic reverse proxy server.&lt;/li&gt;
&lt;li&gt;Dockerfile Linter: A tool to lint and validate Dockerfiles.&lt;/li&gt;
&lt;li&gt;HTTP Status Checker: Check the status of a list of URLs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Intermediate Level
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Configuration Management Tool: Manage configuration files for different environments.&lt;/li&gt;
&lt;li&gt;Load Balancer: Build a simple load balancer.&lt;/li&gt;
&lt;li&gt;Service Health Checker: Check the health status of microservices.&lt;/li&gt;
&lt;li&gt;Log Aggregator: Aggregate logs from multiple sources.&lt;/li&gt;
&lt;li&gt;Simple CI/CD Pipeline: Implement a basic CI/CD pipeline.&lt;/li&gt;
&lt;li&gt;SSH Automation Script: Automate SSH tasks across multiple servers.&lt;/li&gt;
&lt;li&gt;Docker Image Cleaner: Clean up unused Docker images.&lt;/li&gt;
&lt;li&gt;Kubernetes Pod Monitor: Monitor the status of Kubernetes pods.&lt;/li&gt;
&lt;li&gt;Metrics Collector: Collect and visualize metrics from applications.&lt;/li&gt;
&lt;li&gt;Infrastructure as Code Tool: Manage infrastructure using code.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Advanced Level
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Custom Kubernetes Controller: Write a Kubernetes controller for custom resources.&lt;/li&gt;
&lt;li&gt;Event-Driven Microservices: Implement microservices that communicate via events.&lt;/li&gt;
&lt;li&gt;API Gateway: Build an API gateway for microservices.&lt;/li&gt;
&lt;li&gt;Service Mesh: Implement a simple service mesh.&lt;/li&gt;
&lt;li&gt;Continuous Deployment Tool: Create a tool for continuous deployment.&lt;/li&gt;
&lt;li&gt;Distributed Tracing System: Implement distributed tracing for microservices.&lt;/li&gt;
&lt;li&gt;Serverless Functions: Develop serverless functions using Go.&lt;/li&gt;
&lt;li&gt;Cloud Resource Manager: Manage cloud resources programmatically.&lt;/li&gt;
&lt;li&gt;Security Scanner: Scan infrastructure for security vulnerabilities.&lt;/li&gt;
&lt;li&gt;Log Rotation System: Implement log rotation for log files.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Expert Level
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Custom Cloud Provider: Implement a custom cloud provider interface.&lt;/li&gt;
&lt;li&gt;Kubernetes Operator: Develop a Kubernetes operator for a specific application.&lt;/li&gt;
&lt;li&gt;Infrastructure Monitoring System: Build a full-fledged monitoring system.&lt;/li&gt;
&lt;li&gt;Distributed Job Scheduler: Implement a job scheduler that runs tasks across multiple nodes.&lt;/li&gt;
&lt;li&gt;Serverless Platform: Create a serverless platform from scratch.&lt;/li&gt;
&lt;li&gt;Cluster Autoscaler: Build an autoscaler for Kubernetes clusters.&lt;/li&gt;
&lt;li&gt;Container Runtime: Develop a custom container runtime.&lt;/li&gt;
&lt;li&gt;Infrastructure Security Suite: Create a suite of tools for securing infrastructure.&lt;/li&gt;
&lt;li&gt;Network Policy Manager: Manage network policies in a Kubernetes cluster.&lt;/li&gt;
&lt;li&gt;Cloud Cost Optimization Tool: Optimize and manage cloud costs.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Bonus Projects
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Custom CI/CD Server: Develop a CI/CD server from scratch.&lt;/li&gt;
&lt;li&gt;Cloud Backup System: Implement a system for backing up data to the cloud.&lt;/li&gt;
&lt;li&gt;Dynamic DNS Service: Create a dynamic DNS service.&lt;/li&gt;
&lt;li&gt;API Rate Limiter: Build a rate-limiting service for APIs.&lt;/li&gt;
&lt;li&gt;Custom Logging Library: Develop a logging library with advanced features.&lt;/li&gt;
&lt;li&gt;Multi-Cluster Management Tool: Manage multiple Kubernetes clusters.&lt;/li&gt;
&lt;li&gt;Service Discovery System: Implement service discovery for microservices.&lt;/li&gt;
&lt;li&gt;Cloud Provisioning Tool: Automate cloud resource provisioning.&lt;/li&gt;
&lt;li&gt;Edge Computing Platform: Build a platform for edge computing.&lt;/li&gt;
&lt;li&gt;Infrastructure Drift Detection: Detect and manage infrastructure drift.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>go</category>
      <category>devops</category>
      <category>webdev</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>10 resources to become a system design hero</title>
      <dc:creator>Kumar Kalyan </dc:creator>
      <pubDate>Tue, 28 May 2024 16:44:17 +0000</pubDate>
      <link>https://dev.to/kumarkalyan/10-resources-to-become-a-system-design-hero-408m</link>
      <guid>https://dev.to/kumarkalyan/10-resources-to-become-a-system-design-hero-408m</guid>
      <description>&lt;h2&gt;
  
  
  TLDR 🔥
&lt;/h2&gt;

&lt;p&gt;System Design serves as the blueprint for creating a software system. It involves defining the architecture, components, and interfaces necessary to meet specific requirements. This topic is highly relevant in the software development industry and is frequently discussed in technical interviews. Acquiring system design skills can indeed lead to a 10x salary increase. 🚀&lt;br&gt;
Certainly! System design is indeed a very complex subject  that goes beyond mastering a coding language . It includes  understanding system architectures, design patterns, performance optimization, and other intricate topics. Learning system design from specialists or coding bootcamps can be expensive, often costing around $1000.&lt;br&gt;
To help you on your journey to becoming a system design hero, in this article I have curated a list of free and valuable resources . &lt;/p&gt;
&lt;h2&gt;
  
  
  1. System Design Roadmap
&lt;/h2&gt;

&lt;p&gt;Contains visually designed and easy to udestand roadmaps attached with useful links to master system design and other programming resources for free&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kamranahmedse" rel="noopener noreferrer"&gt;
        kamranahmedse
      &lt;/a&gt; / &lt;a href="https://github.com/kamranahmedse/developer-roadmap" rel="noopener noreferrer"&gt;
        developer-roadmap
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Interactive roadmaps, guides and other educational content to help developers grow in their careers.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/kamranahmedse/developer-roadmappublic/images/brand.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fkamranahmedse%2Fdeveloper-roadmappublic%2Fimages%2Fbrand.png" height="128"&gt;&lt;/a&gt;
  &lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;&lt;a href="https://roadmap.sh" rel="nofollow noopener noreferrer"&gt;roadmap.sh&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;
  &lt;p&gt;Community driven roadmaps, articles and resources for developers&lt;/p&gt;

&lt;p&gt;
    &lt;a href="https://roadmap.sh/roadmaps" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/23fd2caeb1ea90ebbea15b3bf1a1d67007761b8d7ae6389b2d367793104bff20/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2545322539432541382d526f61646d6170732532302d3061306130612e7376673f7374796c653d666c617426636f6c6f72413d306130613061" alt="roadmaps"&gt;
    &lt;/a&gt;
    &lt;a href="https://roadmap.sh/best-practices" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/5af50b9c06da41cce290d1adb9202477cf74d3c9c420a3f381229495609846e8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2545322539432541382d426573742532305072616374696365732d3061306130612e7376673f7374796c653d666c617426636f6c6f72413d306130613061" alt="best practices"&gt;
    &lt;/a&gt;
    &lt;a href="https://roadmap.sh/questions" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/78af0438fed16e5d1b662c06bbc8cbfbf13c00deff8ca38e06bb522dbcbf0420/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2545322539432541382d5175657374696f6e732d3061306130612e7376673f7374796c653d666c617426636f6c6f72413d306130613061" alt="videos"&gt;
    &lt;/a&gt;
    &lt;a href="https://www.youtube.com/channel/UCA0H2KIWgWTwpTFjSxp0now?sub_confirmation=1" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/61c31fd77503cc1bba61eae31a7564a54377827420f923147c5800bdcafee0d7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2545322539432541382d596f75547562652532304368616e6e656c2d3061306130612e7376673f7374796c653d666c617426636f6c6f72413d306130613061" alt="roadmaps"&gt;
    &lt;/a&gt;
  &lt;/p&gt;
&lt;br&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/2722992d519a722218f896d5f5231d49f337aaff4514e78bd59ac935334e916a/68747470733a2f2f692e696d6775722e636f6d2f77617856496d762e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/2722992d519a722218f896d5f5231d49f337aaff4514e78bd59ac935334e916a/68747470733a2f2f692e696d6775722e636f6d2f77617856496d762e706e67" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Roadmaps are now interactive, you can click the nodes to read more about the topics.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;
&lt;a href="https://roadmap.sh" rel="nofollow noopener noreferrer"&gt;View all Roadmaps&lt;/a&gt;  ·  &lt;a href="https://roadmap.sh/best-practices" rel="nofollow noopener noreferrer"&gt;Best Practices&lt;/a&gt;  ·  &lt;a href="https://roadmap.sh/questions" rel="nofollow noopener noreferrer"&gt;Questions&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/2722992d519a722218f896d5f5231d49f337aaff4514e78bd59ac935334e916a/68747470733a2f2f692e696d6775722e636f6d2f77617856496d762e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/2722992d519a722218f896d5f5231d49f337aaff4514e78bd59ac935334e916a/68747470733a2f2f692e696d6775722e636f6d2f77617856496d762e706e67" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here is the list of available roadmaps with more being actively worked upon.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Have a look at the &lt;a href="https://roadmap.sh/get-started" rel="nofollow noopener noreferrer"&gt;get started&lt;/a&gt; page that might help you pick up a path.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://roadmap.sh/frontend" rel="nofollow noopener noreferrer"&gt;Frontend Roadmap&lt;/a&gt; / &lt;a href="https://roadmap.sh/frontend?r=frontend-beginner" rel="nofollow noopener noreferrer"&gt;Frontend Beginner Roadmap&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://roadmap.sh/backend" rel="nofollow noopener noreferrer"&gt;Backend Roadmap&lt;/a&gt; / &lt;a href="https://roadmap.sh/backend?r=backend-beginner" rel="nofollow noopener noreferrer"&gt;Backend Beginner Roadmap&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://roadmap.sh/devops" rel="nofollow noopener noreferrer"&gt;DevOps Roadmap&lt;/a&gt; / &lt;a href="https://roadmap.sh/devops?r=devops-beginner" rel="nofollow noopener noreferrer"&gt;DevOps Beginner Roadmap&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/full-stack" rel="nofollow noopener noreferrer"&gt;Full Stack Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/git-github" rel="nofollow noopener noreferrer"&gt;Git and GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/api-design" rel="nofollow noopener noreferrer"&gt;API Design Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/computer-science" rel="nofollow noopener noreferrer"&gt;Computer Science Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/datastructures-and-algorithms" rel="nofollow noopener noreferrer"&gt;Data Structures and Algorithms Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/ai-data-scientist" rel="nofollow noopener noreferrer"&gt;AI and Data Scientist Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/ai-engineer" rel="nofollow noopener noreferrer"&gt;AI Engineer Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/aws" rel="nofollow noopener noreferrer"&gt;AWS Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/linux" rel="nofollow noopener noreferrer"&gt;Linux Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/terraform" rel="nofollow noopener noreferrer"&gt;Terraform Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/data-analyst" rel="nofollow noopener noreferrer"&gt;Data Analyst Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/mlops" rel="nofollow noopener noreferrer"&gt;MLOps Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/product-manager" rel="nofollow noopener noreferrer"&gt;Product Manager Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/engineering-manager" rel="nofollow noopener noreferrer"&gt;Engineering Manager Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/qa" rel="nofollow noopener noreferrer"&gt;QA Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/python" rel="nofollow noopener noreferrer"&gt;Python Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/software-architect" rel="nofollow noopener noreferrer"&gt;Software Architect Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://roadmap.sh/game-developer" rel="nofollow noopener noreferrer"&gt;Game Developer Roadmap&lt;/a&gt; / &lt;a href="https://roadmap.sh/server-side-game-developer" rel="nofollow noopener noreferrer"&gt;Server Side Game Developer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/software-design-architecture" rel="nofollow noopener noreferrer"&gt;Software Design and Architecture Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/javascript" rel="nofollow noopener noreferrer"&gt;JavaScript Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/typescript" rel="nofollow noopener noreferrer"&gt;TypeScript Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/cpp" rel="nofollow noopener noreferrer"&gt;C++ Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/react" rel="nofollow noopener noreferrer"&gt;React Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://roadmap.sh/react-native" rel="nofollow noopener noreferrer"&gt;React&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kamranahmedse/developer-roadmap" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  2. System Design primer
&lt;/h2&gt;

&lt;p&gt;Considered for bible for system design this github repository contains a-z free resources to master system design &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/donnemartin" rel="noopener noreferrer"&gt;
        donnemartin
      &lt;/a&gt; / &lt;a href="https://github.com/donnemartin/system-design-primer" rel="noopener noreferrer"&gt;
        system-design-primer
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Learn how to design large-scale systems. Prep for the system design interview.  Includes Anki flashcards.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://github.com/donnemartin/system-design-primerREADME.md" rel="noopener noreferrer"&gt;English&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primerREADME-ja.md" rel="noopener noreferrer"&gt;日本語&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primerREADME-zh-Hans.md" rel="noopener noreferrer"&gt;简体中文&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primerREADME-zh-TW.md" rel="noopener noreferrer"&gt;繁體中文&lt;/a&gt; | &lt;a href="https://github.com/donnemartin/system-design-primer/issues/170" rel="noopener noreferrer"&gt;العَرَبِيَّة‎&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/220" rel="noopener noreferrer"&gt;বাংলা&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/40" rel="noopener noreferrer"&gt;Português do Brasil&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/186" rel="noopener noreferrer"&gt;Deutsch&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/130" rel="noopener noreferrer"&gt;ελληνικά&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/272" rel="noopener noreferrer"&gt;עברית&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/104" rel="noopener noreferrer"&gt;Italiano&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/102" rel="noopener noreferrer"&gt;한국어&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/110" rel="noopener noreferrer"&gt;فارسی&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/68" rel="noopener noreferrer"&gt;Polski&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/87" rel="noopener noreferrer"&gt;русский язык&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/136" rel="noopener noreferrer"&gt;Español&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/187" rel="noopener noreferrer"&gt;ภาษาไทย&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/39" rel="noopener noreferrer"&gt;Türkçe&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/127" rel="noopener noreferrer"&gt;tiếng Việt&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/250" rel="noopener noreferrer"&gt;Français&lt;/a&gt; | &lt;a href="https://github.com/donnemartin/system-design-primer/issues/28" rel="noopener noreferrer"&gt;Add Translation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Help &lt;a href="https://github.com/donnemartin/system-design-primerTRANSLATIONS.md" rel="noopener noreferrer"&gt;translate&lt;/a&gt; this guide!&lt;/strong&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;The System Design Primer&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/donnemartin/system-design-primerimages/jj3A5N8.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdonnemartin%2Fsystem-design-primerimages%2Fjj3A5N8.png"&gt;&lt;/a&gt;
  &lt;br&gt;
&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Learn how to design large-scale systems.&lt;/p&gt;
&lt;p&gt;Prep for the system design interview.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Learn how to design large-scale systems&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;Learning how to design scalable systems will help you become a better engineer.&lt;/p&gt;

&lt;p&gt;System design is a broad topic.  There is a &lt;strong&gt;vast amount of resources scattered throughout the web&lt;/strong&gt; on system design principles.&lt;/p&gt;

&lt;p&gt;This repo is an &lt;strong&gt;organized collection&lt;/strong&gt; of resources to help you learn how to build systems at scale.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Learn from the open source community&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;This is a continually updated, open source project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/donnemartin/system-design-primer#contributing" rel="noopener noreferrer"&gt;Contributions&lt;/a&gt; are welcome!&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Prep for the system design interview&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;In addition…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/donnemartin/system-design-primer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  3. awesome-system-design-resources
&lt;/h2&gt;

&lt;p&gt;This repository contains System Design Key Concepts , building blocks , architechtural patterns , interview problems , distributed sytems papers , books and many more &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ashishps1" rel="noopener noreferrer"&gt;
        ashishps1
      &lt;/a&gt; / &lt;a href="https://github.com/ashishps1/awesome-system-design-resources" rel="noopener noreferrer"&gt;
        awesome-system-design-resources
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Learn System Design concepts and prepare for interviews using free resources.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/ashishps1/awesome-system-design-resourcesdiagrams/system-design-github-logo.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fashishps1%2Fawesome-system-design-resourcesdiagrams%2Fsystem-design-github-logo.png" width="350" height="200"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;This repository contains free resources to learn System Design concepts and prepare for interviews.&lt;/p&gt;

&lt;p&gt;Join my free &lt;a href="https://bit.ly/amghsd" rel="nofollow noopener noreferrer"&gt;AlgoMaster Newsletter&lt;/a&gt; and get a &lt;strong&gt;FREE System Design Interview Handbook&lt;/strong&gt; in your inbox.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📌 System Design Key Concepts&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/scalability" rel="nofollow noopener noreferrer"&gt;Scalability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/system-design-what-is-availability" rel="nofollow noopener noreferrer"&gt;Availability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/cap-theorem-explained" rel="nofollow noopener noreferrer"&gt;CAP Theorem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/ecae03ba-1930-42ef-8796-83e2fa818989" rel="nofollow noopener noreferrer"&gt;ACID Transactions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://highscalability.com/consistent-hashing-algorithm/" rel="nofollow noopener noreferrer"&gt;Consistent Hashing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/rate-limiting-algorithms-explained-with-code" rel="nofollow noopener noreferrer"&gt;Rate Limiting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/system-design-how-to-avoid-single-point-of-failures" rel="nofollow noopener noreferrer"&gt;SPOF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cockroachlabs.com/blog/what-is-fault-tolerance/" rel="nofollow noopener noreferrer"&gt;Fault Tolerance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@sourabhatta1819/consensus-in-distributed-system-ac79f8ba2b8c" rel="nofollow noopener noreferrer"&gt;Consensus Algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://highscalability.com/blog/2023/7/16/gossip-protocol-explained.html" rel="nofollow noopener noreferrer"&gt;Gossip Protocol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/0204da93-f0e9-49b9-a88a-cb20b9931575" rel="nofollow noopener noreferrer"&gt;Service Discovery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://abdulrwahab.medium.com/api-architecture-best-practices-for-designing-rest-apis-bf907025f5f" rel="nofollow noopener noreferrer"&gt;API Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/learn/what-is-disaster-recovery" rel="nofollow noopener noreferrer"&gt;Disaster Recovery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dynatrace.com/news/blog/what-is-distributed-tracing/" rel="nofollow noopener noreferrer"&gt;Distributed Tracing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🛠️ System Design Building Blocks&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/27c62e07-f25b-40ac-a397-101cc54f1f0a" rel="nofollow noopener noreferrer"&gt;Content Delivery Network (CDN)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/proxy-vs-reverse-proxy-explained" rel="nofollow noopener noreferrer"&gt;Proxy vs Reverse Proxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.cloudflare.com/learning/dns/what-is-dns/" rel="nofollow noopener noreferrer"&gt;Domain Name System (DNS)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/4d7d6f8a-6803-4c7b-85ca-864c87c2cbf2" rel="nofollow noopener noreferrer"&gt;Caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/top-5-caching-strategies-explained" rel="nofollow noopener noreferrer"&gt;Caching Strategies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/distributed-caching" rel="nofollow noopener noreferrer"&gt;Distributed Caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/load-balancing-algorithms-explained-with-code" rel="nofollow noopener noreferrer"&gt;Load Balancing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/15-types-of-databases" rel="nofollow noopener noreferrer"&gt;Databases Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/sql-vs-nosql-7-key-differences" rel="nofollow noopener noreferrer"&gt;SQL vs NoSQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/a-detailed-guide-on-database-indexes" rel="nofollow noopener noreferrer"&gt;Database Indexes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://systemdesign.one/consistency-patterns/" rel="nofollow noopener noreferrer"&gt;Consistency Patterns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/heartbeats-in-distributed-systems" rel="nofollow noopener noreferrer"&gt;HeartBeats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/geekculture/design-patterns-for-microservices-circuit-breaker-pattern-276249ffab33" rel="nofollow noopener noreferrer"&gt;Circuit Breaker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/idempotency-in-distributed-systems" rel="nofollow noopener noreferrer"&gt;Idempotency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/system-design-how-to-scale-a-database" rel="nofollow noopener noreferrer"&gt;Database Scaling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://redis.com/blog/what-is-data-replication/" rel="nofollow noopener noreferrer"&gt;Data Replication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/489440f1-9c80-4241-9ec8-de156964c3b9" rel="nofollow noopener noreferrer"&gt;Data Redundancy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/what-is-database-sharding" rel="nofollow noopener noreferrer"&gt;Database Sharding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com/developer/products/mongodb/active-active-application-architectures/" rel="nofollow noopener noreferrer"&gt;Database Architectures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.druva.com/glossary/what-is-a-failover-definition-and-related-faqs" rel="nofollow noopener noreferrer"&gt;Failover&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/bloom-filters" rel="nofollow noopener noreferrer"&gt;Bloom Filters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/message-queues" rel="nofollow noopener noreferrer"&gt;Message Queues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/websockets" rel="nofollow noopener noreferrer"&gt;WebSockets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/what-are-checksums" rel="nofollow noopener noreferrer"&gt;Checksums&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nginx.com/learn/api-gateway/" rel="nofollow noopener noreferrer"&gt;API Gateway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://newsletter.systemdesign.one/p/netflix-microservices" rel="nofollow noopener noreferrer"&gt;Microservices Guidelines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html" rel="nofollow noopener noreferrer"&gt;Distributed Locking&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;⚖️ System Design Tradeoffs&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/system-design-top-15-trade-offs" rel="nofollow noopener noreferrer"&gt;Top 15 Tradeoffs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/system-design-vertical-vs-horizontal-scaling" rel="nofollow noopener noreferrer"&gt;Vertical vs Horizontal Scaling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/741dff8e-10ea-413e-8dd2-be57434917d2" rel="nofollow noopener noreferrer"&gt;Stateful vs Stateless Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/batch-processing-vs-stream-processing" rel="nofollow noopener noreferrer"&gt;Batch vs Stream Processing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/7d9da525-fe25-4e16-94e8-8056e7c57934" rel="nofollow noopener noreferrer"&gt;Strong vs Eventual Consistency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.algomaster.io/p/59cae60d-9717-4e20-a59e-759e370db4e5" rel="nofollow noopener noreferrer"&gt;Read-Through vs Write-Through Cache&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.algomaster.io/p/af5fe2fe-9a4f-4708-af43-184945a243af" rel="nofollow noopener noreferrer"&gt;Push vs Pull&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ashishps1/awesome-system-design-resources" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2&gt;
  
  
  4. System-Design
&lt;/h2&gt;

&lt;p&gt;This repository contains artchitechtural ptterns of most pospular apps and tech startups&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/codersguild" rel="noopener noreferrer"&gt;
        codersguild
      &lt;/a&gt; / &lt;a href="https://github.com/codersguild/System-Design" rel="noopener noreferrer"&gt;
        System-Design
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      It's just fascinating. How is modern software designed? 🤔 Some design-level considerations for scalability, maintainability eventual consistency, availability &amp;amp; reliability. 👨‍💻 Interview Prep. 👨‍💻
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;System Design Bytes for Enthusiasts&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://raw.githubusercontent.com/codersguild/System-Design/master/system-design.PNG"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fcodersguild%2FSystem-Design%2Fmaster%2Fsystem-design.PNG" alt="System Design Discussions"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I complied and collected some of the articles as a part of doing &lt;strong&gt;CS654A&lt;/strong&gt; course at &lt;strong&gt;IIT Kanpur&lt;/strong&gt; for a fantastic course on &lt;strong&gt;Advanced Software Architecture&lt;/strong&gt; taught by &lt;a href="https://www.iitk.ac.in/new/index.php/dr-tadinada-venkata-prabhakar" rel="nofollow noopener noreferrer"&gt;&lt;em&gt;Prof.Dr.T.V.Prabbhakar&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Modified from &lt;a href="https://github.com/checkcheckzz" rel="noopener noreferrer"&gt;Zach&lt;/a&gt; system design repository. Added more links and topics to cover on both PS/DS &amp;amp; System Design Interviews. We will keep updating this posting from time to time. Some more &lt;a href="https://github.com/binhnguyennus/awesome-scalability" rel="noopener noreferrer"&gt;awesome resource&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=mCM6QVHD08c" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/ab68935f66be5de75f32381f7144e34cae51677640e906ac9e680061b9c62e22/68747470733a2f2f696d672e796f75747562652e636f6d2f76692f6d434d36515648443038632f302e6a7067" alt='How to "think" (and design) like a Software Architect at Silicon Valley Code Camp 2019'&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=x2-rSnhpw0g" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1366cddbce3491f8a65085014bd455b49d8695a90aef24e53899309c5cbdb3af/68747470733a2f2f696d672e796f75747562652e636f6d2f76692f78322d72536e68707730672f302e6a7067" alt="Visualising software architecture with the C4 model - Simon Brown, Agile on the Beach 2019"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;&lt;code&gt;SYSTEM DESIGN IS NOT JUST FOR INTERVIEWS, IT CAN BE HOW YOU MANAGE YOUR LIFE. GIVE IT A THOUGHT&lt;/code&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Disclaimer/Acknowledgements&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;I didn't write the &lt;code&gt;articles&lt;/code&gt; myself. I love expanding my understanding of &lt;code&gt;system design&lt;/code&gt; complexities and thus read many books, research papers, and articles that enhance my knowledge. I take the opportunity to thank everyone who found this repository useful. I would like to thank all the authors and developers who wrote the articles aggregated in this repository.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;More Content Comming&lt;/h2&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/codersguild/System-Design" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2&gt;
  
  
  5 . system-design-interview
&lt;/h2&gt;

&lt;p&gt;The only repository you must checkout 7 days before your system design interview &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/checkcheckzz" rel="noopener noreferrer"&gt;
        checkcheckzz
      &lt;/a&gt; / &lt;a href="https://github.com/checkcheckzz/system-design-interview" rel="noopener noreferrer"&gt;
        system-design-interview
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      System design interview for IT companies
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a href="https://github.com/checkcheckzz/system-design-interview" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fcheckcheckzz%2Fsystem-design-interviewimgs%2Fsystemcycle.png" alt="logo"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;How to prepare system design questions for an IT company&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;System design is a very broad topic. Even a software engineer with many years of working experience at a top IT company may not be an expert on system design. If you want to become an expert, you need to read many books, articles, and solve real large scale system design problems.&lt;/p&gt;
&lt;p&gt;This repository only teaches you how to handle the system design interview with a systematic approach in a short time. You can dive into each topic if you have time. Of course, welcome to add your thoughts!&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;&lt;a href="https://github.com/checkcheckzz/system-design-interview" rel="noopener noreferrer"&gt;Table of Contents&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;ul class="contains-task-list"&gt;
&lt;li class="task-list-item"&gt;
 &lt;a href="https://github.com/checkcheckzz/system-design-interview#tips" rel="noopener noreferrer"&gt;System Design Interview Tips&lt;/a&gt;
&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 &lt;a href="https://github.com/checkcheckzz/system-design-interview#intro" rel="noopener noreferrer"&gt;Basic Knowledge about System Design&lt;/a&gt;
&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 &lt;a href="https://github.com/checkcheckzz/system-design-interview#blog" rel="noopener noreferrer"&gt;Company Engineering Blogs&lt;/a&gt;
&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 &lt;a href="https://github.com/checkcheckzz/system-design-interview#system" rel="noopener noreferrer"&gt;Products and Systems&lt;/a&gt;
&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 &lt;a href="https://github.com/checkcheckzz/system-design-interview#qs" rel="noopener noreferrer"&gt;Hot Questions and Reference&lt;/a&gt;
&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 &lt;a href="https://github.com/checkcheckzz/system-design-interview#bk" rel="noopener noreferrer"&gt;Good Books&lt;/a&gt;
&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 &lt;a href="https://github.com/checkcheckzz/system-design-interview#ood" rel="noopener noreferrer"&gt;Object Oriented Design&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;
&lt;a href="https://github.com/checkcheckzz/system-design-interview#toc" rel="noopener noreferrer"&gt;[⬆]&lt;/a&gt; &lt;a href="https://github.com/checkcheckzz/system-design-interview" rel="noopener noreferrer"&gt;System Design Interview Tips:&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Clarify the constraints and identify the user cases&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spend a few minutes questioning the interviewer and agreeing on the…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/checkcheckzz/system-design-interview" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;
 

&lt;h2&gt;
  
  
  6. Grokking-System-Design
&lt;/h2&gt;

&lt;p&gt;This repository will help you master system design from basis to advanced level&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Jeevan-kumar-Raj" rel="noopener noreferrer"&gt;
        Jeevan-kumar-Raj
      &lt;/a&gt; / &lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Design" rel="noopener noreferrer"&gt;
        Grokking-System-Design
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Systems design is the process of defining the architecture, modules, interfaces, and data for a system to satisfy specified requirements. Systems design could be seen as the application of systems theory to product development.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;&lt;a href="https://www.educative.io/collection/5668639101419520/5649050225344512" rel="nofollow noopener noreferrer"&gt;Grokking System Design Interview&lt;/a&gt;&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Source: &lt;a href="https://www.educative.io" rel="nofollow noopener noreferrer"&gt;educative&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Interview Process&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Scope the problem
&lt;ul&gt;
&lt;li&gt;Don’t make assumptions.&lt;/li&gt;
&lt;li&gt;Ask clarifying questions to understand the constraints and use cases.&lt;/li&gt;
&lt;li&gt;Steps
&lt;ul&gt;
&lt;li&gt;Requirements clarifications&lt;/li&gt;
&lt;li&gt;System interface definition&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sketch up an abstract design
&lt;ul&gt;
&lt;li&gt;Building blocks of the system&lt;/li&gt;
&lt;li&gt;Relationships between them&lt;/li&gt;
&lt;li&gt;Steps
&lt;ul&gt;
&lt;li&gt;Back-of-the-envelope estimation&lt;/li&gt;
&lt;li&gt;Defining data model&lt;/li&gt;
&lt;li&gt;High-level design&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Identify and address the bottlenecks
&lt;ul&gt;
&lt;li&gt;Use the fundamental principles of scalable system design&lt;/li&gt;
&lt;li&gt;Steps
&lt;ul&gt;
&lt;li&gt;Detailed design&lt;/li&gt;
&lt;li&gt;Identifying and resolving bottlenecks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Distributed System Design Basics&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designbasics/key-characteristics.md" rel="noopener noreferrer"&gt;Key Characterics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designbasics/load-balancing.md" rel="noopener noreferrer"&gt;Load balancing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designbasics/caching.md" rel="noopener noreferrer"&gt;Caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designbasics/sharding.md" rel="noopener noreferrer"&gt;Sharding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designbasics/indexes.md" rel="noopener noreferrer"&gt;Indexes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designbasics/proxies.md" rel="noopener noreferrer"&gt;Proxies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designbasics/queues.md" rel="noopener noreferrer"&gt;Queues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designbasics/redundancy.md" rel="noopener noreferrer"&gt;Redundancy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designbasics/sql-vs-nosql.md" rel="noopener noreferrer"&gt;SQL vs. NoSQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designbasics/cap-theorem.md" rel="noopener noreferrer"&gt;CAP Theorem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designbasics/consistent-hashing.md" rel="noopener noreferrer"&gt;Consistent Hashing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designbasics/client-server-communication.md" rel="noopener noreferrer"&gt;Client Server Communication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;System Designs&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designdesigns/short-url.md" rel="noopener noreferrer"&gt;Short URL Service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designdesigns/pastebin.md" rel="noopener noreferrer"&gt;Pastebin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designdesigns/instagram.md" rel="noopener noreferrer"&gt;Instagram&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designdesigns/dropbox.md" rel="noopener noreferrer"&gt;Dropbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designdesigns/twitter.md" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designdesigns/youtube.md" rel="noopener noreferrer"&gt;Youtube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designdesigns/twitter-search.md" rel="noopener noreferrer"&gt;Twitter Search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designdesigns/web-crawler.md" rel="noopener noreferrer"&gt;Web Crawler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designdesigns/facebook-newsfeed.md" rel="noopener noreferrer"&gt;Facebook Newsfeed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designdesigns/yelp.md" rel="noopener noreferrer"&gt;Yelp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designdesigns/uber-backend.md" rel="noopener noreferrer"&gt;Uber Backend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Designdesigns/ticketmaster.md" rel="noopener noreferrer"&gt;Ticketmaster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;System Design Interviews: A step by step guide&lt;/h2&gt;

&lt;/div&gt;


&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;SYSTEM DESIGN PREPARATION&lt;/h1&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;How to prepare for and answer system design questions&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Objective&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;em&gt;Learning about and implementing large-scale distributed system is not easy. I do not want&lt;/em&gt;…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Jeevan-kumar-Raj/Grokking-System-Design" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  7.low-level Design
&lt;/h2&gt;

&lt;p&gt;This repository mainly focuses on low level system design &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/prasadgujar" rel="noopener noreferrer"&gt;
        prasadgujar
      &lt;/a&gt; / &lt;a href="https://github.com/prasadgujar/low-level-design-primer" rel="noopener noreferrer"&gt;
        low-level-design-primer
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Dedicated Resources for the Low-Level System Design. Learn how to design and implement large-scale systems. Prep for the system design interview.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;low-level-design-primer&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Motivation&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Learn low level design of system at scale
prepare for the low level design (LLD) / Machine Coding round interviews.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Learn to design low level system&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Learning low level design of scalable systems will help you become better engineer.&lt;/p&gt;
&lt;p&gt;This repo is an organized collection of resources to help you learn low level design of systesm's.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Resources&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Low level Design &lt;a href="https://github.com/prasadgujar/low-level-design-primer/blob/master/questions.md" rel="noopener noreferrer"&gt;Questions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Low level Design &lt;a href="https://github.com/prasadgujar/low-level-design-primer/blob/master/solutions.md" rel="noopener noreferrer"&gt;Solutions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Low Level Design &lt;a href="https://github.com/prasadgujar/low-level-design-primer/blob/master/resources.md" rel="noopener noreferrer"&gt;Resources&lt;/a&gt; #TODO&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contributing&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Feel free to submit pull requests to help:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add new questions&lt;/li&gt;
&lt;li&gt;Improve new questions&lt;/li&gt;
&lt;li&gt;add new solutions&lt;/li&gt;
&lt;li&gt;Fix errors&lt;/li&gt;
&lt;li&gt;Improve sections&lt;/li&gt;
&lt;li&gt;Add new sections&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Under development&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Interested in adding a section or helping complete one in-progress? &lt;a href="https://github.com/prasadgujar/low-level-design-primer/edit/master/README.md" rel="noopener noreferrer"&gt;Contribute&lt;/a&gt;!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;how to guide and study material along with various resources.&lt;/li&gt;
&lt;li&gt;add more questions and improve exisiting questions.&lt;/li&gt;
&lt;li&gt;add solutions for the problems along with their detailed explaination (maybe video)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Credits&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Credits and sources are provided throughout this repo.&lt;/p&gt;
&lt;p&gt;Special…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/prasadgujar/low-level-design-primer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
 
&lt;h2&gt;
  
  
  8. machine-learning-systems-design
&lt;/h2&gt;

&lt;p&gt;A book on machine learning system design &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/chiphuyen" rel="noopener noreferrer"&gt;
        chiphuyen
      &lt;/a&gt; / &lt;a href="https://github.com/chiphuyen/machine-learning-systems-design" rel="noopener noreferrer"&gt;
        machine-learning-systems-design
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A booklet on machine learning systems design with exercises. NOT the repo for the book "Designing Machine Learning Systems"
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Machine Learning Systems Design&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Read this booklet &lt;a href="https://huyenchip.com/machine-learning-systems-design/toc.html" rel="nofollow noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This booklet was my initial attempt to write about machine learning systems design back in 2019. My understanding of the topic has gone through significant iterations since then. My book &lt;a href="https://www.amazon.com/Designing-Machine-Learning-Systems-Production-Ready/dp/1098107969" rel="nofollow noopener noreferrer"&gt;Designing Machine Learning Systems&lt;/a&gt; (O'Reilly, June 2022) is much more comprehensive and up-to-date. &lt;a href="https://github.com/chiphuyen/dmls-book" rel="noopener noreferrer"&gt;The new book's repo&lt;/a&gt; contains the full table of contents, chapter summaries, and random thoughts on MLOps tooling.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;This booklet covers four main steps of designing a machine learning system:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Project setup&lt;/li&gt;
&lt;li&gt;Data pipeline&lt;/li&gt;
&lt;li&gt;Modeling: selecting, training, and debugging&lt;/li&gt;
&lt;li&gt;Serving: testing, deploying, and maintaining&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It comes with links to practical resources that explain each aspect in more details. It also suggests case studies written by machine learning engineers at major tech companies who have deployed machine learning systems to solve real-world problems.&lt;/p&gt;
&lt;p&gt;At the end, the booklet contains 27 open-ended machine learning systems design questions that might come…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/chiphuyen/machine-learning-systems-design" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  9. System Design 101
&lt;/h2&gt;

&lt;p&gt;Start learning system design as a beginner&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ByteByteGoHq" rel="noopener noreferrer"&gt;
        ByteByteGoHq
      &lt;/a&gt; / &lt;a href="https://github.com/ByteByteGoHq/system-design-101" rel="noopener noreferrer"&gt;
        system-design-101
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a href="https://blog.bytebytego.com/?utm_source=site" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FByteByteGoHq%2Fsystem-design-101images%2Fbanner.jpg"&gt; &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  【
  &lt;a href="https://www.youtube.com/channel/UCZgt6AzoyjslHTC9dz0UoTw" rel="nofollow noopener noreferrer"&gt;
    👨🏻‍💻 YouTube
  &lt;/a&gt; |
  &lt;a href="https://blog.bytebytego.com/?utm_source=site" rel="nofollow noopener noreferrer"&gt;
    📮 Newsletter
  &lt;/a&gt; 】
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://trendshift.io/repositories/3709" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dfcf9c66d01984eaaa1a8824bb3e612cade1a8efa474cf36063ccedc1928537f/68747470733a2f2f7472656e6473686966742e696f2f6170692f62616467652f7265706f7369746f726965732f33373039" alt="ByteByteGoHq%2Fsystem-design-101 | Trendshift" width="250" height="55"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;System Design 101&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Explain complex systems using visuals and simple terms.&lt;/p&gt;

&lt;p&gt;Whether you're preparing for a System Design Interview or you simply want to understand how systems work beneath the surface, we hope this repository will help you achieve that.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Table of Contents&lt;/h1&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ByteByteGoHq/system-design-101#communication-protocols" rel="noopener noreferrer"&gt;Communication protocols&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#rest-api-vs-graphql" rel="noopener noreferrer"&gt;REST API vs. GraphQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#how-does-grpc-work" rel="noopener noreferrer"&gt;How does gRPC work?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#what-is-a-webhook" rel="noopener noreferrer"&gt;What is a webhook?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#how-to-improve-api-performance" rel="noopener noreferrer"&gt;How to improve API performance?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#http-10---http-11---http-20---http-30-quic" rel="noopener noreferrer"&gt;HTTP 1.0 -&amp;gt; HTTP 1.1 -&amp;gt; HTTP 2.0 -&amp;gt; HTTP 3.0 (QUIC)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#soap-vs-rest-vs-graphql-vs-rpc" rel="noopener noreferrer"&gt;SOAP vs REST vs GraphQL vs RPC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#code-first-vs-api-first" rel="noopener noreferrer"&gt;Code First vs. API First&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#http-status-codes" rel="noopener noreferrer"&gt;HTTP status codes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#what-does-api-gateway-do" rel="noopener noreferrer"&gt;What does API gateway do?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#how-do-we-design-effective-and-safe-apis" rel="noopener noreferrer"&gt;How do we design effective and safe APIs?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#tcpip-encapsulation" rel="noopener noreferrer"&gt;TCP/IP encapsulation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#why-is-nginx-called-a-reverse-proxy" rel="noopener noreferrer"&gt;Why is Nginx called a “reverse” proxy?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#what-are-the-common-load-balancing-algorithms" rel="noopener noreferrer"&gt;What are the common load-balancing algorithms?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#url-uri-urn---do-you-know-the-differences" rel="noopener noreferrer"&gt;URL, URI, URN - Do you know the differences?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/ByteByteGoHq/system-design-101#cicd" rel="noopener noreferrer"&gt;CI/CD&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#cicd-pipeline-explained-in-simple-terms" rel="noopener noreferrer"&gt;CI/CD Pipeline Explained in Simple Terms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#netflix-tech-stack-cicd-pipeline" rel="noopener noreferrer"&gt;Netflix Tech Stack (CI/CD Pipeline)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/ByteByteGoHq/system-design-101#architecture-patterns" rel="noopener noreferrer"&gt;Architecture patterns&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ByteByteGoHq/system-design-101#mvc-mvp-mvvm-mvvm-c-and-viper" rel="noopener noreferrer"&gt;MVC, MVP, MVVM,&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ByteByteGoHq/system-design-101" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  10.system-design-resources
&lt;/h2&gt;

&lt;p&gt;Become interview ready with this repository contains topics like video processing , Cluster and Workflow Management,Service Mesh and many more &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/InterviewReady" rel="noopener noreferrer"&gt;
        InterviewReady
      &lt;/a&gt; / &lt;a href="https://github.com/InterviewReady/system-design-resources" rel="noopener noreferrer"&gt;
        system-design-resources
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      These are the best resources for System Design on the Internet
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;System Design Resources&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;These are the best resources for System Design on the Internet.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Table of Contents&lt;/h1&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#video-processing" rel="noopener noreferrer"&gt;Video Processing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#cluster-and-workflow-management" rel="noopener noreferrer"&gt;Cluster and Workflow Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#intra-service-messaging" rel="noopener noreferrer"&gt;Intra-Service Messaging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#message-queue-antipattern" rel="noopener noreferrer"&gt;Message Queue Antipattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#service-mesh" rel="noopener noreferrer"&gt;Service Mesh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#practical-system-design" rel="noopener noreferrer"&gt;Practical System Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#distributed-file-system" rel="noopener noreferrer"&gt;Distributed File System&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#time-series-databases" rel="noopener noreferrer"&gt;Time Series Databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#rate-limiting" rel="noopener noreferrer"&gt;Rate Limiting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#in-memory-database---redis" rel="noopener noreferrer"&gt;In Memory Database - Redis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#network-protocols" rel="noopener noreferrer"&gt;Network Protocols&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#chess-engine-design" rel="noopener noreferrer"&gt;Chess Engine Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#subscription-management-system" rel="noopener noreferrer"&gt;Subscription Management System&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#google-docs" rel="noopener noreferrer"&gt;Google Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#api-design" rel="noopener noreferrer"&gt;API Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#nosql-database-internals" rel="noopener noreferrer"&gt;NoSQL Database Internals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#nosql-database-algorithms" rel="noopener noreferrer"&gt;NoSQL Database Algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#database-replication" rel="noopener noreferrer"&gt;Database Replication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#containers-and-docker" rel="noopener noreferrer"&gt;Containers and Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#capacity-estimation" rel="noopener noreferrer"&gt;Capacity Estimation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#publisher-subscriber" rel="noopener noreferrer"&gt;Publisher Subscriber&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#event-driven-architectures" rel="noopener noreferrer"&gt;Event Driven Architectures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#software-architectures" rel="noopener noreferrer"&gt;Software Architectures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#microservices" rel="noopener noreferrer"&gt;Microservices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#distributed-transactions-consistency-patterns" rel="noopener noreferrer"&gt;Distributed Transactions consistency Patterns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#load-balancing" rel="noopener noreferrer"&gt;Load Balancing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#alerts-and-anomaly-detection" rel="noopener noreferrer"&gt;Alerts and Anomaly Detection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#distributed-logging" rel="noopener noreferrer"&gt;Distributed Logging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#metrics-and-text-search-engine" rel="noopener noreferrer"&gt;Metrics and Text Search Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#single-point-of-failure" rel="noopener noreferrer"&gt;Single Point of Failure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#location-based-services" rel="noopener noreferrer"&gt;Location Based Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#batch-processing" rel="noopener noreferrer"&gt;Batch Processing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#real-time-stream-processing" rel="noopener noreferrer"&gt;Real Time Stream Processing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#caching" rel="noopener noreferrer"&gt;Caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#distributed-consensus" rel="noopener noreferrer"&gt;Distributed Consensus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#authorization" rel="noopener noreferrer"&gt;Authorization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#content-delivery-network" rel="noopener noreferrer"&gt;Content Delivery Network&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#testing-distributed-systems" rel="noopener noreferrer"&gt;Testing Distributed Systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#system-design-resources" rel="noopener noreferrer"&gt;System Design Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Video Processing&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.egnyte.com/blog/2018/12/transcoding-how-we-serve-videos-at-scale/" rel="nofollow noopener noreferrer"&gt;Transcoding Videos at Scale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://engineering.fb.com/ios/under-the-hood-broadcasting-live-video-to-millions/" rel="nofollow noopener noreferrer"&gt;Facebook Video Broadcasting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://netflixtechblog.com/high-quality-video-encoding-at-scale-d159db052746" rel="nofollow noopener noreferrer"&gt;Netflix Video Encoding at Scale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://netflixtechblog.com/optimized-shot-based-encodes-now-streaming-4b9464204830" rel="nofollow noopener noreferrer"&gt;Netflix Shot based encoding&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Cluster and Workflow Management&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://engineering.fb.com/data-center-engineering/twine/" rel="nofollow noopener noreferrer"&gt;Facebook Cluster Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dl.acm.org/doi/pdf/10.1145/3342195.3387524" rel="nofollow noopener noreferrer"&gt;Google Autopilot -&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/InterviewReady/system-design-resources" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>systemdesign</category>
      <category>webdev</category>
      <category>career</category>
      <category>javascript</category>
    </item>
    <item>
      <title>10 engineering blogs to become a System Design Hero for free</title>
      <dc:creator>Kumar Kalyan </dc:creator>
      <pubDate>Thu, 09 May 2024 19:36:36 +0000</pubDate>
      <link>https://dev.to/kumarkalyan/10-engineering-blogs-to-become-a-system-design-hero-for-free-20ee</link>
      <guid>https://dev.to/kumarkalyan/10-engineering-blogs-to-become-a-system-design-hero-for-free-20ee</guid>
      <description>&lt;h2&gt;
  
  
  TLDR🔥
&lt;/h2&gt;

&lt;p&gt;System Design is basically the blueprint of a system you want to build . It is the process of defining architecture , components and the interface of a system to meet some specific requirements. System Design is one of the hot topics in the software development industry and is widely asked in tech interviews and learning this skill will guarantee you a salary hike .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26gmdveo1ak1y0r752cn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26gmdveo1ak1y0r752cn.gif" alt="Donald Trump says System Design is Money " width="500" height="500"&gt;&lt;/a&gt;&lt;br&gt;
In this article I will share about top 10 System design engineering blogs which will help you to become a system design master for free&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://blog.bytebytego.com/" rel="noopener noreferrer"&gt;Byte Byte Go Blog&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Byte Byte Go is an edtech startup focusing on providing training and courses on system design topics to help you ace your system design interviews like a pro. Byte Byte go can  be considered as one of the best schools  to learn and master system design skills.&lt;br&gt;
They have broken down complex system design topics using interactive animation videos, mind maps , cheat sheets and many more  which will help you master system design like a piece of cake. Weather you are new to system design or you want to stay updated with current industry standards Byte Byte Go is a must checkout for you&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffpgu7maxrhb2jbejve5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffpgu7maxrhb2jbejve5.png" alt="Byte Byte GO blog " width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://research.google/blog/?page=1&amp;amp;" rel="noopener noreferrer"&gt;Google Research &lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Google is one of the most popular and efficient search engines in the world. They are handling billions of users and requests every day on their platform. Google products like Angular , flutter, Android, Google Cloud, Firebase are some of the key technologies which almost every developer uses  . The Google research platform has wide range of topics on software development including machine learning , software systems, hardware and architectures, distributed and parallel systems and this platform is a hidden gem for software developers to learn and research on various topics &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3jwp16grrttt33g44eg1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3jwp16grrttt33g44eg1.png" alt="Google Research" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://dropbox.tech/" rel="noopener noreferrer"&gt;Dropbox Tech Blog&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Dropbox is an american tech company which provides storage solutions and other software products for various use cases. They also handle millions of requests everyday  followed by managing and scaling large software infrastructure. Here you can explore various topics like infrastructure, frontend development ,security, mobile app development etc. If you are planning to build something similar like dropbox or a online storage service must bookmark this blog &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgdp43crv099kww6yl8ls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgdp43crv099kww6yl8ls.png" alt="Drop box tech blog" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://netflixtechblog.com/" rel="noopener noreferrer"&gt;The Netflix Tech Blog &lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Netflix is one of the most popular and successful Ott giants over the world resulting in handling millions of users and requests every day. You can follow Netflix engineering blogs for a wide range of topics from video streaming, microservices  to machine learning and artificial intelligence. If you are someone working in the Ott industry or planning to build something on top of video streaming technology you must have an eye on the Netflix Tech blog for reference.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2trw7unayy4uett3cri0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2trw7unayy4uett3cri0.png" alt="The Netflix Tech Blog " width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://eng.uber.com/" rel="noopener noreferrer"&gt;Uber Engineering Blog &lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Uber is one of the most popular and hopefully the largest online cab service providers in the world. Uber is also operating in the online food delivery sector. The reason behind I am putting Uber engineering blog in this list is because you will find some of the most crucial topics within their blog like using maps and locations to deliver services. Working with  geo  location data  is one of the most crucial topics in software engineering and the most common industrial sectors like ecommerce and logistics are very much dependent on this information so that they can deliver their product or service as fast as possible. If you are someone in the software industry working on Geo location  or navigation technology or planning to build something using these technologies then Uber Engineering blog is a must check out for you &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1kwwqi4orz3cunyeo9p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1kwwqi4orz3cunyeo9p.png" alt="Uber Engineering Blog " width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://engineering.fb.com/" rel="noopener noreferrer"&gt;Meta Engineering blog&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Meta (formerly Facebook) is the biggest social media giant in the world and also the founder and maintainer of the most popular javascript library for building user interfaces i.e React.js. Other than that almost all popular social media apps including facebook, instagram, whatsapp, threads and a lot more are owned by them. The meta engineering blog contains a wide range of software engineering topics like web and mobile development, infrastructure systems, video technology , AR and VR technology etc. I would recommend you to keep an eye on Meta Engineering blog specially if you are building something using react or AR VR tech&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8mba756nkk0q9fnsy4t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd8mba756nkk0q9fnsy4t.png" alt="Meta engineering" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://stripe.com/blog/engineering" rel="noopener noreferrer"&gt;Stripe Engineering blog &lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Stripe is one the most popular companies providing payments related solutions. Most of the online businesses and ecommerce websites use stripe for handling payments , subscriptions and invoicing even I also use stripe to access payments from my clients. Stripe Engineering blog  covers a wide range of topics which you can explore like use of  Machine Learning for fraud detection, UI and UX related topics for responsive and interactive payment interfaces, application security and lot more. So if you are someone who is working on payments or planning to build something related to handling payments you must definitely check out Stripe Engineering Blog as a reference.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5g8eoq6f2puv2nkekfxy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5g8eoq6f2puv2nkekfxy.png" alt="Stripe Engineering blog" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://aws.amazon.com/blogs" rel="noopener noreferrer"&gt;Amazon Engineering Blog &lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Amazon Engineering Blog&lt;br&gt;
Amazon is the largest e-commerce giant in the world not other than that it also owns Amazon Web Services (largest cloud service provider),Amazon Prime (One of the most popular ott giant ) , The audio stories platform audible the amazon music and many more. The Amazon Engineering  blog covers a wide range of topics including Containers and Kubernetes, Cloud patterns and architectures, Machine learning and Amazon Artificial Intelligence technologies solve complex business challenges. So if you are someone planning to build your next app using AWS or integrate amazon technologies like Alexa then Amazon engineering blog is a must checkout for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa07bwfp2rsebvi180cnl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa07bwfp2rsebvi180cnl.png" alt="Amazon Engineering Blog " width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://devblogs.microsoft.com/" rel="noopener noreferrer"&gt;Microsoft Dev Blog &lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Microsoft is one of the most popular tech giants in america  owing the most used operating system Windows , the dot net framework for build blazingly fast enterprise applications, The Bing search engine, the copilot(One of the most efficient AI tools for productivity), the largest code sharing , hosting and version controlling platform GitHub, the Azure cloud platform (one of the largest cloud service providers). The  Microsoft engineering blog contains a wide range of topics and tutorials also including Windows , azure , machine learning and artificial intelligence, the dot net framework. If you are someone planning to build your next app or software using the Microsoft technologies then you must have an eye on it&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy10tc92q65czuks6cidk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy10tc92q65czuks6cidk.png" alt="Microsoft Dev Blog " width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://developer.apple.com/news/" rel="noopener noreferrer"&gt;Apple Developer News&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Apple is the one of the largest tech giants in the world and also owns the the most popular Mac OS and IOS (iPhone Operating System). MacBooks and iphones have a very large user base so most of the startups and enterprises build products for Mac and IOS users also. The Apple developer news mostly contains topics related to IOS , Swift (The only language to build native IOS and Mac OS apps), swift UI (The Apple UI) and somewhat  on topics like C++ ,  Kubernetes etc. If you are someone who is planning to build a software for  iOS or mac os users the developer news is a must for your reference. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ewo1tt4046wgom5d8hy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ewo1tt4046wgom5d8hy.png" alt="Apple Developer News" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In this article I discussed about 10 engineering blogs you must checkout to boost up your system design skills. It’s  good if you are having an eye on every single blog but I would suggest  that you must checkout only those blogs based on the stack you will be using or the type of industry you are dealing with&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>systemdesign</category>
      <category>javascript</category>
      <category>interview</category>
    </item>
    <item>
      <title>✨Top 15 GitHub repositories to achieve Typescript Mastery🏆</title>
      <dc:creator>Kumar Kalyan </dc:creator>
      <pubDate>Sun, 05 Nov 2023 00:03:08 +0000</pubDate>
      <link>https://dev.to/kumarkalyan/top-15-github-repositories-to-achieve-typescript-mastery-gk0</link>
      <guid>https://dev.to/kumarkalyan/top-15-github-repositories-to-achieve-typescript-mastery-gk0</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR ⚡
&lt;/h2&gt;

&lt;p&gt;This article contains a list of useful GitHub repositories that will help you achieve TypeScript mastery.&lt;/p&gt;

&lt;p&gt;🏆 These are the top-picked repositories of in-demand TypeScript libraries, structured TypeScript roadmaps, handbooks, style guides, etc.&lt;/p&gt;

&lt;p&gt;🗺️ Make sure to explore these repositories, feel free to contribute to them if you like, and give them a ⭐ and help them grow 🎉 &amp;amp; please don't spam these repositories. 🙏&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hn28d9c541klmr5s5wj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hn28d9c541klmr5s5wj.gif" alt="Thinking" width="500" height="332"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. TypeScript
&lt;/h2&gt;

&lt;p&gt;⚙️ JavaScript with Types&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Official repository for TypeScript 🐍&lt;/li&gt;
&lt;li&gt;Contains official source code, documentation, and programming handbook&lt;/li&gt;
&lt;li&gt;95k stars on GitHub ✨&lt;/li&gt;
&lt;li&gt;749 contributors 🤝&lt;/li&gt;
&lt;li&gt;Maintained by Microsoft Corporation and the TypeScript community 
🐙&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install TypeScript using&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/microsoft/TypeScript/" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to TypeScript&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Roadmap.sh
&lt;/h2&gt;

&lt;p&gt;🚀 The ultimate roadmap for every modern stack&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0tnm1gvw1g5jdoggdwpx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0tnm1gvw1g5jdoggdwpx.png" alt="Roadmap.sh" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Roadmaps for almost all the modern stack 🐍⚛️☁️&lt;/li&gt;
&lt;li&gt;Contains Detailed guides, exercises, articles, and tutorial videos 📚👀🎥&lt;/li&gt;
&lt;li&gt;275K stars on GitHub ✨&lt;/li&gt;
&lt;li&gt;35.4K forks 🍴&lt;/li&gt;
&lt;li&gt;695 contributors 🤝&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/kamranahmedse/developer-roadmap" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to Roadmap.sh&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Type Challenges
&lt;/h2&gt;

&lt;p&gt;🧠 Challenge your skills with type challenges&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftuf6r4cwnc0l7bwapsyo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftuf6r4cwnc0l7bwapsyo.png" alt="Type Challenges" width="800" height="614"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contains Beginner to advanced level challenges🏆&lt;/li&gt;
&lt;li&gt;37K+ stars ✨&lt;/li&gt;
&lt;li&gt;4K+ forks 🍴&lt;/li&gt;
&lt;li&gt;232+ contributors 🤝&lt;/li&gt;
&lt;li&gt;Translated into Korean, Chinese, and Japanese 🌐&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/type-challenges/type-challenges" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to Type Challenges&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Awesome TypeScript
&lt;/h2&gt;

&lt;p&gt;📚 A collection of beginner to advanced level TypeScript resources&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh84jwu8pe0vq6yenfhxs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh84jwu8pe0vq6yenfhxs.png" alt="Awesome TypeScirpt" width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contains resources 📚💻 on client-side and server-side TypeScript, Books, guides, blogs, podcasts, tutorial videos, tools, etc.&lt;/li&gt;
&lt;li&gt;4.2K stars ✨&lt;/li&gt;
&lt;li&gt;375 forks 🍴&lt;/li&gt;
&lt;li&gt;152 contributors 🤝 &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/dzharii/awesome-typescript" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to Awesome TypeScript&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  5. The Algorithms
&lt;/h2&gt;

&lt;p&gt;🏆 Master TypeScript data structures and algorithms at one place&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuuv99uxohakrtrcmy3b1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuuv99uxohakrtrcmy3b1.png" alt="The Algorithims" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Algorithms Repository 📖 is a comprehensive resource for algorithms in many languages, including JavaScript 🐍, TypeScript 🐍, Java 🐘, Python 🐍, and Go 🐹. It covers a wide range of data structures, such as graphs 📊, arrays 🔢, trees 🌳, heaps ⛰️, hashmaps 🗝️, tuples, etc 🤔 . &lt;/li&gt;
&lt;li&gt;776 stars ✨&lt;/li&gt;
&lt;li&gt;201 forks 🍴&lt;/li&gt;
&lt;li&gt;55 contributors 🤝 &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://github.com/TheAlgorithms/TypeScript" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to The Algorithms&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Zod
&lt;/h2&gt;

&lt;p&gt;✨ TypeScript-first schema validation with static type inference&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Zod 🐍 is a schema declaration and validation library for TypeScript 🐍. It works with popular backend frameworks like Node.js 🐘, Deno 🦕, and Bun 🐹, and supports all modern browsers 🌐. It allows developers to define type-safe schemas for various data types like strings 📝, arrays 🔢, primitive types 🪨, etc.&lt;/li&gt;
&lt;li&gt;Tiny in size 🤏&lt;/li&gt;
&lt;li&gt;Have immutable methods 🔒&lt;/li&gt;
&lt;li&gt;Have concise chainable interface ⛓️&lt;/li&gt;
&lt;li&gt;26.5k stars ✨&lt;/li&gt;
&lt;li&gt;895 forks 🍴&lt;/li&gt;
&lt;li&gt;256 contributors 🤝 
Install Zod using
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/colinhacks/zod" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to Zod&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Zustand
&lt;/h2&gt;

&lt;p&gt;⚛️ Modern state management for React&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Zustand ⚡ is one of the most popular state management libraries for React.js ⚛️ and its ecosystem frameworks like Next.js 🏃‍♂️. It is a fast and scalable state management library built on top of Flux principles 🌀. It helps in handling critical challenges like React concurrency 🔀 and context loss ❌.&lt;/li&gt;
&lt;li&gt;Tiny in size 🤏&lt;/li&gt;
&lt;li&gt;36.5k stars ✨&lt;/li&gt;
&lt;li&gt;1.1k forks 🍴&lt;/li&gt;
&lt;li&gt;213 contributors 🤝&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install Zustand using&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/pmndrs/zustand" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to Zustand&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  8. tRPC
&lt;/h2&gt;

&lt;p&gt;🛡️ End-to-end typesafe APIs made easy&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;tRPC 🐍 stands for TypeScript Remote Procedure Call 📞 and is used for building APIs in TypeScript 🐍. It is lightweight 🪶 and easy to integrate into TypeScript projects 🧩.
It supports multiple transport protocols, including HTTP 🌐, Web Sockets 🕸️, and TCP 🔌. It is used for building Next.js applications 🏃‍♂️, micro frontends 🧩, and applications supporting real-time data exchange ⏩.&lt;/li&gt;
&lt;li&gt;29.6k stars ✨&lt;/li&gt;
&lt;li&gt;1.1k forks 🍴&lt;/li&gt;
&lt;li&gt;327 contributors 🤝
Install tRPC using
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx create next-app &lt;span class="nt"&gt;--example&lt;/span&gt; https://github.com/trpc/trpc &lt;span class="nt"&gt;--example-path&lt;/span&gt; examples/next-prisma-starter trpc-prisma-starter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/trpc/trpc" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to tRPC&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Formbricks
&lt;/h2&gt;

&lt;p&gt;📊 The Open Source Survey Suite&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feiag4fjfbd8r7wfb98ps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feiag4fjfbd8r7wfb98ps.png" alt="From bricks" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Form Brick 🧱 is an open-source alternative to Typeform 📱 used for taking surveys 📋. It can be easily integrated with any modern web stack 🌐. It has features like FormBuilder 🛠️, triggers 🔔, and analytics and insights generated on form data 📈.&lt;/li&gt;
&lt;li&gt;4.2k stars ✨&lt;/li&gt;
&lt;li&gt;675 forks 🍴&lt;/li&gt;
&lt;li&gt;127 contributors 🤝
Install Form Bricks using
&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/formbricks/formbricks" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to Formbricks&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Prisma
&lt;/h2&gt;

&lt;p&gt;💧 Next-generation Node.js and TypeScript ORM&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Prisma 🐍 is a next-generation ORM for TypeScript 🐍 and Node.js 🐘. It is used to communicate with the database 💽 within an app 📱. It supports modern databases like PostgreSQL 🐘, MySQL 🐬, SQLite 🐿️, SQL Server 🏢, MongoDB 🐳, and CockroachDB 🪳.&lt;/li&gt;
&lt;li&gt;34.6k stars ✨&lt;/li&gt;
&lt;li&gt;1.4k forks 🍴&lt;/li&gt;
&lt;li&gt;226 contributors 🤝&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install Prisma Using&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/prisma/prisma" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to Prisma&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Trigger.dev
&lt;/h2&gt;

&lt;p&gt;⚙️ The open source Background Jobs framework for TypeScript&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Trigger.dev 🤖 helps in defining long-running jobs ⏳ directly inside your app 📱 with API integrations 🤝, webhooks 🕸️, scheduling 🗓️, and delays ⏱️. It's integrated with popular tools like GitHub 🐙, Airtable 🌌, OpenAI 🤖, Supabase 🐬, Resend ✉️, SendGrid ✉️, Stripe 💳, and more 🛠️.&lt;/li&gt;
&lt;li&gt;5.6k stars ✨&lt;/li&gt;
&lt;li&gt;288 forks 🍴&lt;/li&gt;
&lt;li&gt;51 contributors 🤝&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install Trigger.dev using&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @trigger.dev/cli@latest init

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/triggerdotdev/trigger.dev" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to Trigger.dev&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Novu
&lt;/h2&gt;

&lt;p&gt;🔔 Hassle-free notification infrastructure at one place&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Novu 🔔 helps you manage all your notifications in one place. It supports channels and providers like web push 🌐📱, in-app 📱, chat 💬, email ✉️, and SMS 📱. It provides workflows like step filters ⚙️, digest engine 📰, predefined templates 📄, delayed actions ⌛️, and messages 💬. The best part is that it integrates with almost all popular services like FCM 🤖, SendGrid ✉️, Twilio 📞, OneSignal 🔔, and more 🛠️.&lt;/li&gt;
&lt;li&gt;30.7k stars ✨&lt;/li&gt;
&lt;li&gt;3.4k forks 🍴&lt;/li&gt;
&lt;li&gt;360 contributors 🤝&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install Novu using&lt;br&gt;
&lt;/p&gt;

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

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

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/novuhq/novu" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to Novu&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  13. NGX Admin
&lt;/h2&gt;

&lt;p&gt;🛠️ Build admin panels faster than ever&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0p38yixh0g8rrw6ng03w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0p38yixh0g8rrw6ng03w.png" alt="NGX Admin" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ngx Admin 🏰 is an open-source pre-built admin dashboard 📊 that can be used to build dashboards for various industries, such as e-commerce 🛍️, IoT 🤖, and real-time monitoring 📈. It is written in Angular 🐟 and is fully responsive 📱.&lt;/li&gt;
&lt;li&gt;29.6k stars ✨&lt;/li&gt;
&lt;li&gt;1.1k forks 🍴&lt;/li&gt;
&lt;li&gt;327 contributors 🤝&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install NGX Admin using&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/akveo/ngx-admin.git
&lt;span class="nb"&gt;cd &lt;/span&gt;ngx-admin &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm i
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/akveo/ngx-adminp" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to NGX Admin&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  14. Refine
&lt;/h2&gt;

&lt;p&gt;🏢 Open-source Retool for Enterprise&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Refine 🚀 is a React meta framework ⚛️ that helps developers build admin panels 🏢, internal tools 🛠️, and B2B apps 🤝 faster with predefined features like authentication 🔐, access control 🛡️, routing 🗺️, networking 🌐, state management 🧠, and i18n 🗣️. It works with popular providers like Appwrite ☁️, Supabase 🐬, Auth0 🔒, Hasura 🐘, MUI 🎨, and AntDesign 🐜.&lt;/li&gt;
&lt;li&gt;29.6k stars ✨&lt;/li&gt;
&lt;li&gt;1.1k forks 🍴&lt;/li&gt;
&lt;li&gt;327 contributors 🤝
Create a refine app visiting the URL Below
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;https://refine.new/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/refinedev/refine" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to refine&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  15. Nest Js
&lt;/h2&gt;

&lt;p&gt;📈 A progressive Node.js framework for building efficient, reliable and scalable server-side applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F35322adis2tb63we2y94.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F35322adis2tb63we2y94.png" alt="Nest Js" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nest.js 🐦 is an open-source backend development framework 🚀 used for building highly scalable backend servers 🏢 written in TypeScript 🐍. Its key features include support for GraphQL 🔮, highly secured authentication and authorization 🔐, microservices using Redis 🔴, Kafka 🐘, and gRPC 📞, built-in support for WebSockets 🕸️, and OpenAPI specification 📖.&lt;/li&gt;
&lt;li&gt;29.6k stars ✨&lt;/li&gt;
&lt;li&gt;1.1k forks 🍴&lt;/li&gt;
&lt;li&gt;327 contributors 🤝
Create a nest app using
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; npm i &lt;span class="nt"&gt;-g&lt;/span&gt; @nestjs/cli
 nest new project-name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/nestjs/nest" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;Give a 🌠 to Nest Js&lt;/a&gt;
&lt;/p&gt;




&lt;p&gt;So, here my article ends 🏁. Feel free to mention your thoughts or any suggestions or any other useful repositories for TypeScript developers that I haven't mentioned in my articles in the comments section 💬.&lt;/p&gt;

&lt;p&gt;Stay tuned for my next blog till then &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8zjgmobit681vtojlfl.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8zjgmobit681vtojlfl.gif" alt="Bye" width="640" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>opensource</category>
      <category>programming</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Top 5 Github repositories to achieve system design mastery</title>
      <dc:creator>Kumar Kalyan </dc:creator>
      <pubDate>Sat, 28 Oct 2023 16:24:39 +0000</pubDate>
      <link>https://dev.to/kumarkalyan/top-5-github-repositories-to-achieve-system-design-mastery-27n4</link>
      <guid>https://dev.to/kumarkalyan/top-5-github-repositories-to-achieve-system-design-mastery-27n4</guid>
      <description>&lt;h2&gt;
  
  
  TLDR 🔥
&lt;/h2&gt;

&lt;p&gt;This article contains a list of the top 5 GitHub repositories that will help you to achieve system design mastery.&lt;/p&gt;

&lt;p&gt;These repositories mainly contain tutorials, blogs, videos and case studies related to system design&lt;/p&gt;

&lt;p&gt;Make sure to visit these repositories, explore the contents, implement the learnings, contribute if you can and give them a ⭐ to help them grow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggxx7y6u48dpzfkisznf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fggxx7y6u48dpzfkisznf.gif" alt="Interesting" width="498" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is System Design
&lt;/h2&gt;

&lt;p&gt;System design ⚙️ is the process of designing the architecture, components, interfaces, and data for a particular system to meet specific requirements.&lt;/p&gt;

&lt;p&gt;Before building any application or system, 🏗️ it is important to plan how the system will work, what resources will be needed, where to deploy it, which APIs the system components will use, and how to scale the system. Therefore, system design concepts are very important for software developers to master to build efficient and scalable systems. 💯&lt;/p&gt;

&lt;h2&gt;
  
  
  1. developer-roadmap
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/kamranahmedse" rel="noopener noreferrer"&gt;
        kamranahmedse
      &lt;/a&gt; / &lt;a href="https://github.com/kamranahmedse/developer-roadmap" rel="noopener noreferrer"&gt;
        developer-roadmap
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Interactive roadmaps, guides and other educational content to help developers grow in their careers.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/kamranahmedse/developer-roadmappublic/images/brand.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fkamranahmedse%2Fdeveloper-roadmappublic%2Fimages%2Fbrand.png" height="128"&gt;&lt;/a&gt;
  &lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;&lt;a href="https://roadmap.sh" rel="nofollow noopener noreferrer"&gt;roadmap.sh&lt;/a&gt;&lt;/h2&gt;
&lt;/div&gt;
  &lt;p&gt;Community driven roadmaps, articles and resources for developers&lt;/p&gt;

&lt;p&gt;
    &lt;a href="https://roadmap.sh/roadmaps" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/23fd2caeb1ea90ebbea15b3bf1a1d67007761b8d7ae6389b2d367793104bff20/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2545322539432541382d526f61646d6170732532302d3061306130612e7376673f7374796c653d666c617426636f6c6f72413d306130613061" alt="roadmaps"&gt;
    &lt;/a&gt;
    &lt;a href="https://roadmap.sh/best-practices" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/5af50b9c06da41cce290d1adb9202477cf74d3c9c420a3f381229495609846e8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2545322539432541382d426573742532305072616374696365732d3061306130612e7376673f7374796c653d666c617426636f6c6f72413d306130613061" alt="best practices"&gt;
    &lt;/a&gt;
    &lt;a href="https://roadmap.sh/questions" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/78af0438fed16e5d1b662c06bbc8cbfbf13c00deff8ca38e06bb522dbcbf0420/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2545322539432541382d5175657374696f6e732d3061306130612e7376673f7374796c653d666c617426636f6c6f72413d306130613061" alt="videos"&gt;
    &lt;/a&gt;
    &lt;a href="https://www.youtube.com/channel/UCA0H2KIWgWTwpTFjSxp0now?sub_confirmation=1" rel="nofollow noopener noreferrer"&gt;
        &lt;img src="https://camo.githubusercontent.com/61c31fd77503cc1bba61eae31a7564a54377827420f923147c5800bdcafee0d7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f2545322539432541382d596f75547562652532304368616e6e656c2d3061306130612e7376673f7374796c653d666c617426636f6c6f72413d306130613061" alt="roadmaps"&gt;
    &lt;/a&gt;
  &lt;/p&gt;
&lt;br&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/2722992d519a722218f896d5f5231d49f337aaff4514e78bd59ac935334e916a/68747470733a2f2f692e696d6775722e636f6d2f77617856496d762e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/2722992d519a722218f896d5f5231d49f337aaff4514e78bd59ac935334e916a/68747470733a2f2f692e696d6775722e636f6d2f77617856496d762e706e67" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Roadmaps are now interactive, you can click the nodes to read more about the topics.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;
&lt;a href="https://roadmap.sh" rel="nofollow noopener noreferrer"&gt;View all Roadmaps&lt;/a&gt;  ·  &lt;a href="https://roadmap.sh/best-practices" rel="nofollow noopener noreferrer"&gt;Best Practices&lt;/a&gt;  ·  &lt;a href="https://roadmap.sh/questions" rel="nofollow noopener noreferrer"&gt;Questions&lt;/a&gt;
&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/2722992d519a722218f896d5f5231d49f337aaff4514e78bd59ac935334e916a/68747470733a2f2f692e696d6775722e636f6d2f77617856496d762e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/2722992d519a722218f896d5f5231d49f337aaff4514e78bd59ac935334e916a/68747470733a2f2f692e696d6775722e636f6d2f77617856496d762e706e67" alt=""&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here is the list of available roadmaps with more being actively worked upon.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Have a look at the &lt;a href="https://roadmap.sh/get-started" rel="nofollow noopener noreferrer"&gt;get started&lt;/a&gt; page that might help you pick up a path.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://roadmap.sh/frontend" rel="nofollow noopener noreferrer"&gt;Frontend Roadmap&lt;/a&gt; / &lt;a href="https://roadmap.sh/frontend?r=frontend-beginner" rel="nofollow noopener noreferrer"&gt;Frontend Beginner Roadmap&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://roadmap.sh/backend" rel="nofollow noopener noreferrer"&gt;Backend Roadmap&lt;/a&gt; / &lt;a href="https://roadmap.sh/backend?r=backend-beginner" rel="nofollow noopener noreferrer"&gt;Backend Beginner Roadmap&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://roadmap.sh/devops" rel="nofollow noopener noreferrer"&gt;DevOps Roadmap&lt;/a&gt; / &lt;a href="https://roadmap.sh/devops?r=devops-beginner" rel="nofollow noopener noreferrer"&gt;DevOps Beginner Roadmap&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/full-stack" rel="nofollow noopener noreferrer"&gt;Full Stack Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/git-github" rel="nofollow noopener noreferrer"&gt;Git and GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/api-design" rel="nofollow noopener noreferrer"&gt;API Design Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/computer-science" rel="nofollow noopener noreferrer"&gt;Computer Science Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/datastructures-and-algorithms" rel="nofollow noopener noreferrer"&gt;Data Structures and Algorithms Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/ai-data-scientist" rel="nofollow noopener noreferrer"&gt;AI and Data Scientist Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/ai-engineer" rel="nofollow noopener noreferrer"&gt;AI Engineer Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/aws" rel="nofollow noopener noreferrer"&gt;AWS Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/linux" rel="nofollow noopener noreferrer"&gt;Linux Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/terraform" rel="nofollow noopener noreferrer"&gt;Terraform Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/data-analyst" rel="nofollow noopener noreferrer"&gt;Data Analyst Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/mlops" rel="nofollow noopener noreferrer"&gt;MLOps Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/product-manager" rel="nofollow noopener noreferrer"&gt;Product Manager Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/engineering-manager" rel="nofollow noopener noreferrer"&gt;Engineering Manager Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/qa" rel="nofollow noopener noreferrer"&gt;QA Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/python" rel="nofollow noopener noreferrer"&gt;Python Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/software-architect" rel="nofollow noopener noreferrer"&gt;Software Architect Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://roadmap.sh/game-developer" rel="nofollow noopener noreferrer"&gt;Game Developer Roadmap&lt;/a&gt; / &lt;a href="https://roadmap.sh/server-side-game-developer" rel="nofollow noopener noreferrer"&gt;Server Side Game Developer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/software-design-architecture" rel="nofollow noopener noreferrer"&gt;Software Design and Architecture Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/javascript" rel="nofollow noopener noreferrer"&gt;JavaScript Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/typescript" rel="nofollow noopener noreferrer"&gt;TypeScript Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/cpp" rel="nofollow noopener noreferrer"&gt;C++ Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roadmap.sh/react" rel="nofollow noopener noreferrer"&gt;React Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://roadmap.sh/react-native" rel="nofollow noopener noreferrer"&gt;React&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/kamranahmedse/developer-roadmap" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;p&gt;developer roadmap The GitHub repository is built and maintained by Kamran Ahmed and this repository can be considered the best handbook for software development&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It has 255k stars on Git Hub and 684 contributors. This repository is only available in English and it contains a structured roadmap for everything along with resources, guides, etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/kamranahmedse/developer-roadmap" rel="noopener noreferrer"&gt;Give a ⭐ to developer-roadmap&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. System Design Primer
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/donnemartin" rel="noopener noreferrer"&gt;
        donnemartin
      &lt;/a&gt; / &lt;a href="https://github.com/donnemartin/system-design-primer" rel="noopener noreferrer"&gt;
        system-design-primer
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Learn how to design large-scale systems. Prep for the system design interview.  Includes Anki flashcards.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://github.com/donnemartin/system-design-primerREADME.md" rel="noopener noreferrer"&gt;English&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primerREADME-ja.md" rel="noopener noreferrer"&gt;日本語&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primerREADME-zh-Hans.md" rel="noopener noreferrer"&gt;简体中文&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primerREADME-zh-TW.md" rel="noopener noreferrer"&gt;繁體中文&lt;/a&gt; | &lt;a href="https://github.com/donnemartin/system-design-primer/issues/170" rel="noopener noreferrer"&gt;العَرَبِيَّة‎&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/220" rel="noopener noreferrer"&gt;বাংলা&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/40" rel="noopener noreferrer"&gt;Português do Brasil&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/186" rel="noopener noreferrer"&gt;Deutsch&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/130" rel="noopener noreferrer"&gt;ελληνικά&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/272" rel="noopener noreferrer"&gt;עברית&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/104" rel="noopener noreferrer"&gt;Italiano&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/102" rel="noopener noreferrer"&gt;한국어&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/110" rel="noopener noreferrer"&gt;فارسی&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/68" rel="noopener noreferrer"&gt;Polski&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/87" rel="noopener noreferrer"&gt;русский язык&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/136" rel="noopener noreferrer"&gt;Español&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/187" rel="noopener noreferrer"&gt;ภาษาไทย&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/39" rel="noopener noreferrer"&gt;Türkçe&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/127" rel="noopener noreferrer"&gt;tiếng Việt&lt;/a&gt; ∙ &lt;a href="https://github.com/donnemartin/system-design-primer/issues/250" rel="noopener noreferrer"&gt;Français&lt;/a&gt; | &lt;a href="https://github.com/donnemartin/system-design-primer/issues/28" rel="noopener noreferrer"&gt;Add Translation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Help &lt;a href="https://github.com/donnemartin/system-design-primerTRANSLATIONS.md" rel="noopener noreferrer"&gt;translate&lt;/a&gt; this guide!&lt;/strong&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;The System Design Primer&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/donnemartin/system-design-primerimages/jj3A5N8.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fdonnemartin%2Fsystem-design-primerimages%2Fjj3A5N8.png"&gt;&lt;/a&gt;
  &lt;br&gt;
&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Learn how to design large-scale systems.&lt;/p&gt;
&lt;p&gt;Prep for the system design interview.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Learn how to design large-scale systems&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;Learning how to design scalable systems will help you become a better engineer.&lt;/p&gt;

&lt;p&gt;System design is a broad topic.  There is a &lt;strong&gt;vast amount of resources scattered throughout the web&lt;/strong&gt; on system design principles.&lt;/p&gt;

&lt;p&gt;This repo is an &lt;strong&gt;organized collection&lt;/strong&gt; of resources to help you learn how to build systems at scale.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Learn from the open source community&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;This is a continually updated, open source project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/donnemartin/system-design-primer#contributing" rel="noopener noreferrer"&gt;Contributions&lt;/a&gt; are welcome!&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Prep for the system design interview&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;In addition…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/donnemartin/system-design-primer" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sytem Design Primer GitHub repository was created by a tech Lead at Facebook (now Meta). This repository can be considered the bible of system design&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It has 233k stars on GitHub and 100+ contributors and is available in many different languages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/donnemartin/system-design-primer" rel="noopener noreferrer"&gt;Give a ⭐ to System Design Primer&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. system-design-101
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ByteByteGoHq" rel="noopener noreferrer"&gt;
        ByteByteGoHq
      &lt;/a&gt; / &lt;a href="https://github.com/ByteByteGoHq/system-design-101" rel="noopener noreferrer"&gt;
        system-design-101
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Explain complex systems using visuals and simple terms. Help you prepare for system design interviews.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a href="https://blog.bytebytego.com/?utm_source=site" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FByteByteGoHq%2Fsystem-design-101images%2Fbanner.jpg"&gt; &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  【
  &lt;a href="https://www.youtube.com/channel/UCZgt6AzoyjslHTC9dz0UoTw" rel="nofollow noopener noreferrer"&gt;
    👨🏻‍💻 YouTube
  &lt;/a&gt; |
  &lt;a href="https://blog.bytebytego.com/?utm_source=site" rel="nofollow noopener noreferrer"&gt;
    📮 Newsletter
  &lt;/a&gt; 】
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://trendshift.io/repositories/3709" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dfcf9c66d01984eaaa1a8824bb3e612cade1a8efa474cf36063ccedc1928537f/68747470733a2f2f7472656e6473686966742e696f2f6170692f62616467652f7265706f7369746f726965732f33373039" alt="ByteByteGoHq%2Fsystem-design-101 | Trendshift" width="250" height="55"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;System Design 101&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Explain complex systems using visuals and simple terms.&lt;/p&gt;

&lt;p&gt;Whether you're preparing for a System Design Interview or you simply want to understand how systems work beneath the surface, we hope this repository will help you achieve that.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Table of Contents&lt;/h1&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ByteByteGoHq/system-design-101#communication-protocols" rel="noopener noreferrer"&gt;Communication protocols&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#rest-api-vs-graphql" rel="noopener noreferrer"&gt;REST API vs. GraphQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#how-does-grpc-work" rel="noopener noreferrer"&gt;How does gRPC work?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#what-is-a-webhook" rel="noopener noreferrer"&gt;What is a webhook?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#how-to-improve-api-performance" rel="noopener noreferrer"&gt;How to improve API performance?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#http-10---http-11---http-20---http-30-quic" rel="noopener noreferrer"&gt;HTTP 1.0 -&amp;gt; HTTP 1.1 -&amp;gt; HTTP 2.0 -&amp;gt; HTTP 3.0 (QUIC)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#soap-vs-rest-vs-graphql-vs-rpc" rel="noopener noreferrer"&gt;SOAP vs REST vs GraphQL vs RPC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#code-first-vs-api-first" rel="noopener noreferrer"&gt;Code First vs. API First&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#http-status-codes" rel="noopener noreferrer"&gt;HTTP status codes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#what-does-api-gateway-do" rel="noopener noreferrer"&gt;What does API gateway do?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#how-do-we-design-effective-and-safe-apis" rel="noopener noreferrer"&gt;How do we design effective and safe APIs?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#tcpip-encapsulation" rel="noopener noreferrer"&gt;TCP/IP encapsulation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#why-is-nginx-called-a-reverse-proxy" rel="noopener noreferrer"&gt;Why is Nginx called a “reverse” proxy?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#what-are-the-common-load-balancing-algorithms" rel="noopener noreferrer"&gt;What are the common load-balancing algorithms?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#url-uri-urn---do-you-know-the-differences" rel="noopener noreferrer"&gt;URL, URI, URN - Do you know the differences?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/ByteByteGoHq/system-design-101#cicd" rel="noopener noreferrer"&gt;CI/CD&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#cicd-pipeline-explained-in-simple-terms" rel="noopener noreferrer"&gt;CI/CD Pipeline Explained in Simple Terms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101#netflix-tech-stack-cicd-pipeline" rel="noopener noreferrer"&gt;Netflix Tech Stack (CI/CD Pipeline)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/ByteByteGoHq/system-design-101#architecture-patterns" rel="noopener noreferrer"&gt;Architecture patterns&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ByteByteGoHq/system-design-101#mvc-mvp-mvvm-mvvm-c-and-viper" rel="noopener noreferrer"&gt;MVC, MVP, MVVM,&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ByteByteGoHq/system-design-101" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;ul&gt;
&lt;li&gt;&lt;p&gt;System Design 101 GitHub repository is built and maintained by Byte Byte Go Hq which is a platform to ace System Design interviews&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It has 39.2k starts on Github and 14 contributors. This repository is only available in English and is the best repository for beginners. This repository contains effective guides on topics like communication protocols, CI-CD, Architectural patterns, microservices, DevOps, cloud, Linux, etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/ByteByteGoHq/system-design-101" rel="noopener noreferrer"&gt;Give a ⭐ to system-design-101&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. System Design Resources
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/InterviewReady" rel="noopener noreferrer"&gt;
        InterviewReady
      &lt;/a&gt; / &lt;a href="https://github.com/InterviewReady/system-design-resources" rel="noopener noreferrer"&gt;
        system-design-resources
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      These are the best resources for System Design on the Internet
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;System Design Resources&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;These are the best resources for System Design on the Internet.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Table of Contents&lt;/h1&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#video-processing" rel="noopener noreferrer"&gt;Video Processing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#cluster-and-workflow-management" rel="noopener noreferrer"&gt;Cluster and Workflow Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#intra-service-messaging" rel="noopener noreferrer"&gt;Intra-Service Messaging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#message-queue-antipattern" rel="noopener noreferrer"&gt;Message Queue Antipattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#service-mesh" rel="noopener noreferrer"&gt;Service Mesh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#practical-system-design" rel="noopener noreferrer"&gt;Practical System Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#distributed-file-system" rel="noopener noreferrer"&gt;Distributed File System&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#time-series-databases" rel="noopener noreferrer"&gt;Time Series Databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#rate-limiting" rel="noopener noreferrer"&gt;Rate Limiting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#in-memory-database---redis" rel="noopener noreferrer"&gt;In Memory Database - Redis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#network-protocols" rel="noopener noreferrer"&gt;Network Protocols&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#chess-engine-design" rel="noopener noreferrer"&gt;Chess Engine Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#subscription-management-system" rel="noopener noreferrer"&gt;Subscription Management System&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#google-docs" rel="noopener noreferrer"&gt;Google Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#api-design" rel="noopener noreferrer"&gt;API Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#nosql-database-internals" rel="noopener noreferrer"&gt;NoSQL Database Internals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#nosql-database-algorithms" rel="noopener noreferrer"&gt;NoSQL Database Algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#database-replication" rel="noopener noreferrer"&gt;Database Replication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#containers-and-docker" rel="noopener noreferrer"&gt;Containers and Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#capacity-estimation" rel="noopener noreferrer"&gt;Capacity Estimation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#publisher-subscriber" rel="noopener noreferrer"&gt;Publisher Subscriber&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#event-driven-architectures" rel="noopener noreferrer"&gt;Event Driven Architectures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#software-architectures" rel="noopener noreferrer"&gt;Software Architectures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#microservices" rel="noopener noreferrer"&gt;Microservices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#distributed-transactions-consistency-patterns" rel="noopener noreferrer"&gt;Distributed Transactions consistency Patterns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#load-balancing" rel="noopener noreferrer"&gt;Load Balancing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#alerts-and-anomaly-detection" rel="noopener noreferrer"&gt;Alerts and Anomaly Detection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#distributed-logging" rel="noopener noreferrer"&gt;Distributed Logging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#metrics-and-text-search-engine" rel="noopener noreferrer"&gt;Metrics and Text Search Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#single-point-of-failure" rel="noopener noreferrer"&gt;Single Point of Failure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#location-based-services" rel="noopener noreferrer"&gt;Location Based Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#batch-processing" rel="noopener noreferrer"&gt;Batch Processing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#real-time-stream-processing" rel="noopener noreferrer"&gt;Real Time Stream Processing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#caching" rel="noopener noreferrer"&gt;Caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#distributed-consensus" rel="noopener noreferrer"&gt;Distributed Consensus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#authorization" rel="noopener noreferrer"&gt;Authorization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#content-delivery-network" rel="noopener noreferrer"&gt;Content Delivery Network&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#testing-distributed-systems" rel="noopener noreferrer"&gt;Testing Distributed Systems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources#system-design-resources" rel="noopener noreferrer"&gt;System Design Resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Video Processing&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.egnyte.com/blog/2018/12/transcoding-how-we-serve-videos-at-scale/" rel="nofollow noopener noreferrer"&gt;Transcoding Videos at Scale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://engineering.fb.com/ios/under-the-hood-broadcasting-live-video-to-millions/" rel="nofollow noopener noreferrer"&gt;Facebook Video Broadcasting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://netflixtechblog.com/high-quality-video-encoding-at-scale-d159db052746" rel="nofollow noopener noreferrer"&gt;Netflix Video Encoding at Scale&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://netflixtechblog.com/optimized-shot-based-encodes-now-streaming-4b9464204830" rel="nofollow noopener noreferrer"&gt;Netflix Shot based encoding&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Cluster and Workflow Management&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://engineering.fb.com/data-center-engineering/twine/" rel="nofollow noopener noreferrer"&gt;Facebook Cluster Management&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dl.acm.org/doi/pdf/10.1145/3342195.3387524" rel="nofollow noopener noreferrer"&gt;Google Autopilot -&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/InterviewReady/system-design-resources" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sytem Design Resources GitHub repository is built and maintained by Interview Ready which is a platform to ace Sytem design interviews for big tech giants.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It has 11.4k stars on Git Hub and 8 contributors. This repository is only available in English. It includes case studies, guides and video lectures on various system design topics including Video Processing, Cluster and Workflow Management, Intra-Service Messaging, Message Queue Antipattern, Service Mesh, Practical System Design, Distributed File System, Time Series Databases, Rate Limiting,In Memory Database - Redis, and many more&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/InterviewReady/system-design-resources" rel="noopener noreferrer"&gt;Give a ⭐ to system-design-resources&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. system-design
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/karanpratapsingh" rel="noopener noreferrer"&gt;
        karanpratapsingh
      &lt;/a&gt; / &lt;a href="https://github.com/karanpratapsingh/system-design" rel="noopener noreferrer"&gt;
        system-design
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Learn how to design systems at scale and prepare for system design interviews
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;System Design&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Hey, welcome to the course. I hope this course provides a great learning experience.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This course is also available on my &lt;a href="https://karanpratapsingh.com/courses/system-design" rel="nofollow noopener noreferrer"&gt;website&lt;/a&gt; and as an ebook on &lt;a href="https://leanpub.com/systemdesign" rel="nofollow noopener noreferrer"&gt;leanpub&lt;/a&gt;. Please leave a ⭐ as motivation if this was helpful!&lt;/em&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Table of contents&lt;/h1&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#what-is-system-design" rel="noopener noreferrer"&gt;What is system design?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Chapter I&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#ip" rel="noopener noreferrer"&gt;IP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#osi-model" rel="noopener noreferrer"&gt;OSI Model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#tcp-and-udp" rel="noopener noreferrer"&gt;TCP and UDP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#domain-name-system-dns" rel="noopener noreferrer"&gt;Domain Name System (DNS)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#load-balancing" rel="noopener noreferrer"&gt;Load Balancing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#clustering" rel="noopener noreferrer"&gt;Clustering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#caching" rel="noopener noreferrer"&gt;Caching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#content-delivery-network-cdn" rel="noopener noreferrer"&gt;Content Delivery Network (CDN)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#proxy" rel="noopener noreferrer"&gt;Proxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#availability" rel="noopener noreferrer"&gt;Availability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#scalability" rel="noopener noreferrer"&gt;Scalability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#storage" rel="noopener noreferrer"&gt;Storage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Chapter II&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#databases-and-dbms" rel="noopener noreferrer"&gt;Databases and DBMS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#sql-databases" rel="noopener noreferrer"&gt;SQL databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#nosql-databases" rel="noopener noreferrer"&gt;NoSQL databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#sql-vs-nosql-databases" rel="noopener noreferrer"&gt;SQL vs NoSQL databases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#database-replication" rel="noopener noreferrer"&gt;Database Replication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#indexes" rel="noopener noreferrer"&gt;Indexes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#normalization-and-denormalization" rel="noopener noreferrer"&gt;Normalization and Denormalization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#acid-and-base-consistency-models" rel="noopener noreferrer"&gt;ACID and BASE consistency models&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#cap-theorem" rel="noopener noreferrer"&gt;CAP theorem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#pacelc-theorem" rel="noopener noreferrer"&gt;PACELC Theorem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#transactions" rel="noopener noreferrer"&gt;Transactions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#distributed-transactions" rel="noopener noreferrer"&gt;Distributed Transactions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#sharding" rel="noopener noreferrer"&gt;Sharding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#consistent-hashing" rel="noopener noreferrer"&gt;Consistent Hashing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#database-federation" rel="noopener noreferrer"&gt;Database Federation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Chapter III&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#n-tier-architecture" rel="noopener noreferrer"&gt;N-tier architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#message-brokers" rel="noopener noreferrer"&gt;Message Brokers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#message-queues" rel="noopener noreferrer"&gt;Message Queues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#publish-subscribe" rel="noopener noreferrer"&gt;Publish-Subscribe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#enterprise-service-bus-esb" rel="noopener noreferrer"&gt;Enterprise Service Bus (ESB)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#monoliths-and-microservices" rel="noopener noreferrer"&gt;Monoliths and Microservices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#event-driven-architecture-eda" rel="noopener noreferrer"&gt;Event-Driven Architecture (EDA)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#event-sourcing" rel="noopener noreferrer"&gt;Event Sourcing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#command-and-query-responsibility-segregation-cqrs" rel="noopener noreferrer"&gt;Command and Query Responsibility Segregation (CQRS)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#api-gateway" rel="noopener noreferrer"&gt;API Gateway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#rest-graphql-grpc" rel="noopener noreferrer"&gt;REST, GraphQL, gRPC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/karanpratapsingh/system-design#long-polling-websockets-server-sent-events-sse" rel="noopener noreferrer"&gt;Long polling, WebSockets, Server-Sent Events (SSE)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Chapter IV&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;…&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/karanpratapsingh/system-design" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;&lt;p&gt;system-design GitHub repository is built and maintained by Karan Pratap Singh who is a Senior Software Engineer at Curebase.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It has 21.1k stars on Git Hub and 9 contributors. This repository is only available in English. It is basically the free version of the author's real book. It has 5 chapters and is best for beginners who are new to development.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/karanpratapsingh/system-design" rel="noopener noreferrer"&gt;Give a ⭐ to system-design&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Stay tuned for my next blog till then&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rqxfsvqogo6stm5oe2s.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rqxfsvqogo6stm5oe2s.gif" alt="Sayonara" width="640" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>opensource</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
    <item>
      <title>New VSCode extension to to build free Bootstrap templates visually and get clean HTML &amp; CSS</title>
      <dc:creator>Kumar Kalyan </dc:creator>
      <pubDate>Mon, 06 Mar 2023 17:40:02 +0000</pubDate>
      <link>https://dev.to/kumarkalyan/new-vscode-extension-to-to-build-free-bootstrap-templates-visually-and-get-clean-html-css-5gmi</link>
      <guid>https://dev.to/kumarkalyan/new-vscode-extension-to-to-build-free-bootstrap-templates-visually-and-get-clean-html-css-5gmi</guid>
      <description>&lt;p&gt;Visual studio code is a lightweight, open-source and one of the most used code editors used by a wide range of developers and its extensions are pretty much very useful to provide an experience of a heavyweight IDE(Integrated Development Kit ). In this article, I will talk about a newly launched vs code extension named &lt;strong&gt;speedwapp&lt;/strong&gt; which helps you to build production-ready, responsive and mobile friendly landing pages directly from vs code. This tool can be a game-changer if you are looking forward to building a bootstrap template within a couple of minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Brief intro on Speedwapp vscode extension
&lt;/h2&gt;

&lt;p&gt;Speedwapp is a no-code platform that allows users to generate beautiful, responsive, and mobile-friendly landing pages for websites. The platform is designed to be easy to use, even for those with little to no coding experience.&lt;/p&gt;

&lt;p&gt;One of the standout features of Speedwapp is the Visual Studio Code (VSCode) extension, which makes it easy to create and edit landing pages directly from the VSCode editor. No need to get stuck between multiple divs or spend hours fixing CSS for a responsive page . This feature is particularly useful for developers who are already familiar with VSCode and want to quickly create landing pages without having to switch to a different platform.&lt;/p&gt;

&lt;p&gt;The platform also offers a wide variety of customizable templates that users can choose from, making it easy to create a landing page that matches the look and feel of their website. Users can also use the platform's drag-and-drop editor to add and arrange elements on the page, such as text, images, and buttons. And once your editing is done you can always edit the generated code as per your requirements&lt;/p&gt;

&lt;p&gt;In terms of responsiveness and mobile-friendliness, Speedwapp does not disappoint. All landing pages created on the platform are automatically optimized for both desktop and mobile devices, ensuring that they look great and function correctly on any device.&lt;/p&gt;

&lt;p&gt;One more useful feature is, this tool is a free extension you can always add or remove it easily when required now you don't need to think about the disk space or RAM of your device&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this tool is better than other
&lt;/h2&gt;

&lt;p&gt;There are similar products available in the market but here are a few points you must have in mind&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Free to use under the starter plan, you don't need to pay a single penny unless you want some paid templates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lightweight vs code extension, no need of downloading heavy-weight software which takes a couple of minutes to boot&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fair pricing as compared to other available products&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can be integrated with WordPress&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Easy to use and can be by used anyone also someone who has little or no prior coding experience&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  For whom is this tool for
&lt;/h2&gt;

&lt;p&gt;This tool can be useful for a wide range of audience but still I would like to highlight a few of them&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Digital product sellers or e-commerce who are looking forward to building product landing pages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Both professional and junior web developers. This tool helps to build tempted within a couple of minutes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;WordPress and Wox developers&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use cases for this tool
&lt;/h2&gt;

&lt;p&gt;This tool can have a wide range of used cases but I will highlight a few of them&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ecommerce development&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Personal portfolios&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Product Landing pages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Email Marketing templates&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Overall, Speedwapp is a powerful no-code platform that makes it easy to create beautiful, responsive, and mobile-friendly landing pages. The platform's VSCode extension and customizable templates make it easy to create pages that match the look and feel of your website. If you're looking for a no-code platform to create landing pages for your website, Speedwapp is worth checking out &lt;a href="https://speedwapp.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Share this tool with your friends and colleagues if you find it useful and Make sure to follow and subscribe for email notifications on my blog if you want to stay updated with my latest post&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>nocode</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Let's crack the block chain together</title>
      <dc:creator>Kumar Kalyan </dc:creator>
      <pubDate>Tue, 31 Jan 2023 05:27:21 +0000</pubDate>
      <link>https://dev.to/kumarkalyan/lets-crack-the-block-chain-together-3p73</link>
      <guid>https://dev.to/kumarkalyan/lets-crack-the-block-chain-together-3p73</guid>
      <description>&lt;p&gt;Over the whole of 2022, I heard about the term blockchain, web3, crypto, etc and so on and I was like sleeping while the whole world was making millions of dollars through. I have tried exploring it a few times but unfortunately, my procrastination defeated me in becoming a millionaire blockchain developer.&lt;/p&gt;

&lt;p&gt;The day I'm producing content I explored a lot of topics and looked around the use cases of blockchain. I find this technology is our future and everyone must be aware of it. As you all know that I'm a genius at breaking down content like a piece of cake so I have decided to start a new series on blockchain and believe me I am on a mission to bring awareness to blockchain technology.&lt;/p&gt;

&lt;p&gt;In this series, I will cover every single topic which will help you to become a millionaire blockchain developer for free and all I need is some support from you guys to help me stay consistent on my mission to educate the blockchain community.&lt;/p&gt;

&lt;p&gt;I'm not a pro-level blockchain developer but you guys can trust me and can learn along with me from scratch. Together we will explore all the libraries, SDKs and even the deployment, and I promise the content will be authentic and easy to understand. I am planning to start with Ethereum as it is the most popular having a huge community base and followed by other blockchain technologies like polygon, Cello, flow, deso, Solana and a lot more.&lt;/p&gt;

&lt;p&gt;My article will contain everything starting from how-to guides, tutorials, software comparisons, blockchain automation tools and every single thing that you can't imagine. All I need is your support these articles are free to read and along with these, you gonna learn a lot of things regarding blockchain industry trends.&lt;/p&gt;

&lt;p&gt;Overall blockchain technology gonna remain in the future as it solved various problems which we are dealing with in today's world. All we need is some beginner-friendly how-to guides and tutorials which I will provide to start making money from the blockchain industry&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>offers</category>
    </item>
    <item>
      <title>Building HTML templates visually in visual studio code</title>
      <dc:creator>Kumar Kalyan </dc:creator>
      <pubDate>Sun, 25 Dec 2022 19:26:40 +0000</pubDate>
      <link>https://dev.to/kumarkalyan/building-html-templates-visually-in-visual-studio-code-2oac</link>
      <guid>https://dev.to/kumarkalyan/building-html-templates-visually-in-visual-studio-code-2oac</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Hello, devs do you find it hard to build web pages within a short period? Are you still using the boring process of writing Html &amp;amp; CSS code to develop a fully responsive and UI-friendly web page? Do you spend hours just to make a single web page responsive and mobile-friendly? There is good news! In the article, I will demonstrate how you can easily build a fully customizable product landing page within 5 minutes that too using a vs code extension named &lt;a href="https://speedwapp.com/" rel="noopener noreferrer"&gt;speedwapp&lt;/a&gt; the best part you don't need to type the full code and follow the boring process. There is no such prerequisite for this article a simple knowledge of HTML &amp;amp; CSS is appreciated just make sure that you have visual studio code installed on your computer and if not you can download it from &lt;a href="https://code.visualstudio.com/download" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A bit about speedwapp vs code extension
&lt;/h2&gt;

&lt;p&gt;Speedwapp is an amazing website builder that allows you to build beautiful landing pages directly from their website or you can your their free vs code extension which will demonstrate here.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding the seedwapp extension to your vscode
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Quickly open the visual studio code editor on your computer and navigate to the &lt;code&gt;extensions&lt;/code&gt; section. If you are using a windows machine press &lt;code&gt;ctrl+shift+x&lt;/code&gt; . Now in the search bar search for &lt;code&gt;speedwapp&lt;/code&gt; and click on the &lt;code&gt;install&lt;/code&gt; button&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670441320351%2Fryz2tQ_-h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670441320351%2Fryz2tQ_-h.png" alt="an image" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you have installed the extension you will be prompted to a login page so put your credentials there or you can also sign up if you don't have an account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now press &lt;code&gt;Ctrl+K N&lt;/code&gt; or &lt;code&gt;Cmd+K N&lt;/code&gt; to create a new page using speedwapp&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670442774747%2FgE7rUrmiA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670442774747%2FgE7rUrmiA.png" alt="an image" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;click on the &lt;code&gt;+&lt;/code&gt; symbol to add pre-defined templates or html code blocks to your page. I will be using a pre-defined template and then gonna edit it on my own&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670443046641%2FG9B1X8YCy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670443046641%2FG9B1X8YCy.png" alt="an image" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It looks a bit like this after I have imported one. Now let's add a few more sections and then we will edit it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670443702017%2FbIgd10if9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670443702017%2FbIgd10if9.png" alt="an image" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There in the bottom, you will see a small plus sign to add a new component so click on that and add a few more just like shown in the image below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670443794065%2FvALj0R8dz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670443794065%2FvALj0R8dz.png" alt="an image" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now let's edit it. So first, I want to change the background image of the first component and to do so click on the image you will see a panel on the left and there you can update it&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670443991687%2FVbcDaekWS.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670443991687%2FVbcDaekWS.png" alt="an image" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now we got a pop-up like this and I will be using the image links so head over to unsplash and pick an image of your choice then copy the image URL and paste it into the link section and click on upload.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670444165907%2FhE00OhVuR.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670444165907%2FhE00OhVuR.png" alt="an image" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now I want to change the font style and size of the services paragraph so click on that component and in the above you will see an option to &lt;code&gt;select a font&lt;/code&gt; and &lt;code&gt;size&lt;/code&gt; once you enter the values where the changes will be live.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670444394935%2FzN4oRy3cB.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670444394935%2FzN4oRy3cB.png" alt="an image" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now let's say I want to edit the content of the below section so click on the text and write whatever you want&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670444659929%2F0tB4IPVJ7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670444659929%2F0tB4IPVJ7.png" alt="an image" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now let's add links to these checkout buttons so click on them and in the right side panel click on the properties and there select &lt;code&gt;Link&lt;/code&gt; under the HTML tag section and finally, paste your links there&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670444965889%2F5vxcI3pUL.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670444965889%2F5vxcI3pUL.png" alt="an image" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now let's edit the last section I want the button colour to be green so will click on that and side on styles on the left and there will change the button style to success.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670445306585%2F43_eqHF8J.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670445306585%2F43_eqHF8J.png" alt="an image" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So finally our landing page is ready now let's deploy it to netlify.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exporting code &amp;amp; customizations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Click on &lt;code&gt;preview changes&lt;/code&gt; at the top and then click on &lt;code&gt;view code&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670445527768%2FD3t-LXeh4t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670445527768%2FD3t-LXeh4t.png" alt="an image" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here you will see the full code of the beautiful webpage which we just made using speedwapp vs code extension. Now click on &lt;code&gt;copy to workspace&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670445633132%2FbLIh_k8Ew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670445633132%2FbLIh_k8Ew.png" alt="an image" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now you will see the automatically generated code files&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670445750530%2FyTjkHKVMj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670445750530%2FyTjkHKVMj.png" alt="an image" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now move the code to a new folder and upload it to a GitHub repository&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once you are done uploading the code head over to your netlify dashboard and click on add a site select the existing project and choose GitHub provider&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670446844307%2FDu-_uWZs0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670446844307%2FDu-_uWZs0.png" alt="an image" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now select your repository and click on &lt;code&gt;deploy site&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670447334757%2FUkTNyMawV.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670447334757%2FUkTNyMawV.png" alt="an image" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check out my site here &lt;a href="https://speedwaplanding.netlify.app/" rel="noopener noreferrer"&gt;https://speedwaplanding.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub Repository &lt;a href="https://github.com/kumar-kalyan/speedwapp-landingpage" rel="noopener noreferrer"&gt;https://github.com/kumar-kalyan/speedwapp-landingpage&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Congratulations you have successfully learned to build beautiful and responsive landing pages directly from vs code without writing much code. Feel free to reach me for any queries or simply visit &lt;a href="https://speedwapp.com/" rel="noopener noreferrer"&gt;speedwapp&lt;/a&gt; website and make sure to share this article with your peers and let me know how much you loved this new tool&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vscode</category>
      <category>webdev</category>
      <category>html</category>
      <category>css</category>
    </item>
    <item>
      <title>Integrating file upload feature to a nodejs project</title>
      <dc:creator>Kumar Kalyan </dc:creator>
      <pubDate>Wed, 21 Dec 2022 15:13:32 +0000</pubDate>
      <link>https://dev.to/documatic/integrating-file-upload-feature-to-a-nodejs-project-o83</link>
      <guid>https://dev.to/documatic/integrating-file-upload-feature-to-a-nodejs-project-o83</guid>
      <description>&lt;p&gt;As a web developer or backend engineer, you may often get into a situation where you have to allow the users to upload some files to a server through the application you are working on. This can be images, videos, documents or anything. There are tons of paid saas products or cloud storage solutions available in the market to solve this problem but what if I tell you that there is an open-source npm package which can help you out with this? In Node js, there is a popular package named multer which can handle file uploads in your application.&lt;/p&gt;

&lt;p&gt;Multer allows you to handle HTTP requests with &lt;code&gt;enctype="multipart/form-data"&lt;/code&gt; which is used for file uploads. Here &lt;code&gt;enctype&lt;/code&gt; is an HTML attribute which means an encoding type used in HTML forms and the &lt;code&gt;multipart/form-data&lt;/code&gt; is the protocol for sending form data to the server in multiple parts due to the large size of files to be uploaded.&lt;/p&gt;

&lt;p&gt;Multer is very easy to use and Integrating it into a Node js application is very simple and can be done using a few lines of code.&lt;/p&gt;

&lt;p&gt;In this article, we will be looking through the process of integrating multer and also discuss the various use cases and customization features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Nodejs installed in your machine&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Any prefered code editor I'm using vs code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;express js app. Check out the template &lt;a href="https://github.com/kumar-kalyan/express-app" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup the express app from the above template
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Open up the terminal and paste the below command&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/kumar-kalyan/express-app.git
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;This will copy all the template files to your local machine&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671558319335%2FbnpHouwjO.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671558319335%2FbnpHouwjO.png" alt="animage" width="800" height="179"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now enter the root directory of the template&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;express-app
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671558352323%2FartIVFkLc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671558352323%2FartIVFkLc.png" alt="animage" width="800" height="148"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Install all the directories using &lt;code&gt;npm install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671558407884%2FC_fIaAn5R.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671558407884%2FC_fIaAn5R.png" alt="animage" width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  Open up the terminal in the root directory and use the below command to add multer to the Node js project
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Once the installation is completed now you need to import the multer module into your project using the &lt;code&gt;require&lt;/code&gt; keyword and finally set up the middleware. This can be done inside the &lt;code&gt;server.js&lt;/code&gt; file or any separate module as per project structure.&lt;/p&gt;

&lt;p&gt;Middleware in Express is a special function which has access to the request object, response object and the next middleware function within the application request-response lifecycle.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In this article, we will implement multer middleware in the server.js file.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;multer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;multer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;The above code shows how to import a module in a Node js project.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup the storage function
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Now let's setup &lt;code&gt;storage&lt;/code&gt; function inside the multer module to store the uploaded files&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// SET STORAGE&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;storage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;multer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;diskStorage&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;uploads/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;cb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fieldname&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;upload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;multer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;storage&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;multer has a &lt;code&gt;diskStorage&lt;/code&gt; function which takes two parameters named &lt;code&gt;destination&lt;/code&gt; and &lt;code&gt;filename&lt;/code&gt; the former is responsible for handling the upload destination which is set to a folder named &lt;code&gt;uploads&lt;/code&gt; and the latter is responsible for handling the name of the file which is to be uploaded. For the file name, we are taking the &lt;code&gt;file.fieldname&lt;/code&gt; which can be accessed from the request object and followed by a concatenation of the current date using the javascript date object lastly adding the filename type will store all the uploaded files in png format&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;after that, we are configuring the &lt;code&gt;upload&lt;/code&gt; variable and setting the storage inside the multer function.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a POST request for file upload
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Now let's create the post request for uploading files&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/profile&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;upload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;single&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;upfile&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// req.file is the `avatar` file&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;originalname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mimetype&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;size&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;err&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="c1"&gt;// req.body will hold the text fields, if there were any&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;So in the above request, we are passing the &lt;code&gt;upload.single&lt;/code&gt; middleware function and inside it specifying the name of the file. On successful upload, we are sending a JSON response to the user and on errors, we are sending the error message as a JSON response. We are using &lt;code&gt;try&lt;/code&gt; &lt;code&gt;catch&lt;/code&gt; block to handle errors&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let's build the front end for file upload
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Now let's build the front end for the file upload&lt;/p&gt;

&lt;p&gt;Create a folder named &lt;code&gt;views&lt;/code&gt; inside it create a file named &lt;code&gt;index.html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Inside the &lt;code&gt;index.html&lt;/code&gt; create a simple form using the following code&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight elm"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="kt"&gt;DOCTYPE&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="n"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="n"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;UTF-8"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;equiv&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;X-UA-Compatible"&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;IE=edge"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;viewport"&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="kt"&gt;Document&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;form&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/profile"&lt;/span&gt; &lt;span class="n"&gt;method&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;post"&lt;/span&gt; &lt;span class="n"&gt;enctype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;multipart/form-data"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;file"&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;upfile"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;submit"&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;upload"&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;btn btn-default"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;form&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Make sure to specify the attribute of &lt;code&gt;enctype="multipart/formdata"&lt;/code&gt; which I have mentioned earlier in this article. create an &lt;code&gt;input&lt;/code&gt; element of type &lt;code&gt;file&lt;/code&gt; and name to &lt;code&gt;upfile&lt;/code&gt; this can be anything of your choice but make sure to keep it the same which we have used in the upload middleware in the &lt;code&gt;server.js&lt;/code&gt; file. In the form make the &lt;code&gt;method&lt;/code&gt; attribute to a &lt;code&gt;POST&lt;/code&gt; request and the &lt;code&gt;action&lt;/code&gt; attribute to &lt;code&gt;/profile&lt;/code&gt; which is our route to the &lt;code&gt;POST&lt;/code&gt; request for file upload.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup server.js for rendering index.html
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Now let's create a basic &lt;code&gt;GET&lt;/code&gt; request and will send this file to the user using the &lt;code&gt;process.cwd&lt;/code&gt; in Node Js. &lt;code&gt;cwd&lt;/code&gt; stands for the current working directory is a function inside the Node Js process module and is used to work with files. Importing the &lt;code&gt;process&lt;/code&gt; module can be done by following a piece of code&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;process&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;The &lt;code&gt;GET&lt;/code&gt; request can be defined like this&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cwd&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/views/index.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;So the above code is responsible for sending the &lt;code&gt;index.html&lt;/code&gt; to the user.&lt;/p&gt;
&lt;h2&gt;
  
  
  Let's check the result
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Start the server using&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node server.js
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671463758391%2F7aXkKoaWH.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671463758391%2F7aXkKoaWH.png" alt="animage" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;open your browser and open the link &lt;a href="http://localhost:5000/" rel="noopener noreferrer"&gt;http://localhost:5000/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671463856970%2Fm4Kt5HE1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671463856970%2Fm4Kt5HE1y.png" alt="animage" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Click on the &lt;code&gt;Choose File&lt;/code&gt; button to select files&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671463983538%2Fbk7P03BVz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671463983538%2Fbk7P03BVz.png" alt="animage" width="697" height="268"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Now click on &lt;code&gt;upload&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671464034560%2FJWIOQidJs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1671464034560%2FJWIOQidJs.png" alt="animage" width="800" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You must see a response like this&lt;/p&gt;


&lt;/li&gt;

&lt;/ul&gt;

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

&lt;p&gt;Overall, Multer makes it easy to add file upload functionality to your Node.js application. Whether you are working on a small personal project or a large enterprise application, Multer has you covered. There are many customizing options available for multer like multiple file uploads, specifying the size, etc. which can be found on the multer's NPM page. Make sure to share this article with your peers and reach out for any queries. Follow Documatic for amazing content like this one.&lt;/p&gt;

&lt;p&gt;Happy Coding :)&lt;/p&gt;

</description>
      <category>node</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Let's build a backend api like bit.ly using node js</title>
      <dc:creator>Kumar Kalyan </dc:creator>
      <pubDate>Mon, 12 Dec 2022 18:15:56 +0000</pubDate>
      <link>https://dev.to/documatic/lets-build-a-backend-api-like-bitly-using-node-js-3f5a</link>
      <guid>https://dev.to/documatic/lets-build-a-backend-api-like-bitly-using-node-js-3f5a</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;These days short links are used by almost everyone, developers, creators businesses and even working professionals, and there are popular tools like bit.ly, buff.ly, etc already available in the market. But have you ever wondered why it is very much easy to build a similar service like that? In this article, I will explain how you can easily integrate a short URL service to a node js project and that too within 100 lines of code.&lt;/p&gt;

&lt;p&gt;Before I start explaining let me first tell you about the prerequisites.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Node js installed in your machine&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Any code editor of your choice, I am using vs code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tools like postman or insomnia for testing the API&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Knowledge of nodejs callbacks, MongoDB&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech stack we are using
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Nodejs for writing server-side code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MongoDB Atlas as a database&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Node package Manager but one can use yarn too&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  MongoDB setup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Head over to &lt;a href="https://www.mongodb.com/home" rel="noopener noreferrer"&gt;mongodb.com&lt;/a&gt; and login to your dashboard&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670693612045%2FFl5FEmsM5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670693612045%2FFl5FEmsM5.png" alt="image" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Move to the projects tab inside the organization(make sure to create one if you don't have one ) and click on the new project&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694097248%2FQJ-RFwQYO.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694097248%2FQJ-RFwQYO.png" alt="image" width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694140275%2F-RwP8pvLz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694140275%2F-RwP8pvLz.png" alt="image" width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;next click on &lt;code&gt;Add Current IP Address&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694181746%2Fv4_ShgeV1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694181746%2Fv4_ShgeV1.png" alt="image" width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Next click on &lt;code&gt;Build a Database&lt;/code&gt; and after that select a shared cluster&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694297562%2Ff8OXuMlfX.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694297562%2Ff8OXuMlfX.png" alt="image" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose your prefered cloud provider and click on &lt;code&gt;create cluster&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694365171%2FxHxL3H_gk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694365171%2FxHxL3H_gk.png" alt="image" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Next set up a username and password&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694450297%2FkdbiiPB83.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694450297%2FkdbiiPB83.png" alt="image" width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now move to the database tab and click on &lt;code&gt;connect&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694674389%2FiFmbKRlLx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694674389%2FiFmbKRlLx.png" alt="image" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now click on connect your application grab the connection string for node js driver and save it for later use&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694812527%2FhSjt6EcAS.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670694812527%2FhSjt6EcAS.png" alt="image" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup the nodejs app
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Folder structure&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670695059724%2FjV2L5oQap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670695059724%2FjV2L5oQap.png" alt="image" width="341" height="281"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now quickly open up the terminal in the root directory and install the dependencies using the command&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;npm install body-parser cors dotenv express mongoose mongodb valid-url&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Now open the server.js file and set up an express server using the piece of code
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//set up an experss server&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Listening on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we are setting up an express server using the &lt;code&gt;app&lt;/code&gt; variable and &lt;code&gt;express()&lt;/code&gt; function and setting a port address to 3000 using &lt;code&gt;app.listen()&lt;/code&gt; so that our server can listen to &lt;a href="http://localhost:3000/" rel="noopener noreferrer"&gt;http://localhost:3000/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This piece of code will only set up a server but to build an API we need to create some requests will I will discuss later in this article first let us import some other important modules which we will use to build our API&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Let's setup &lt;code&gt;body-parser&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;body-parser is an npm package which allows you to access the request body in simple words to build this API we need to receive the URL from the user and this will be delivered to our server through a post request to get access to the requested data we will use body-parser. Use the piece of code to set up &lt;code&gt;body-parser&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;bodyParser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;body-parser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bodyParser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;urlencoded&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;extended&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bodyParser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now it's time to connect our database before we start building the requests. Here comes the concept of environment variables using the &lt;code&gt;dotenv&lt;/code&gt; npm package and &amp;amp; a &lt;code&gt;.env&lt;/code&gt; we can store our secrets from others. First, let's configure dotenv in our &lt;code&gt;server.js&lt;/code&gt; . Using &lt;code&gt;process.env&lt;/code&gt; we can access our environment variables.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dotenv&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;config&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dbUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_URI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Setup the &lt;code&gt;.env&lt;/code&gt; file and paste your secrets there&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;PORT=3000&lt;/span&gt;
&lt;span class="s"&gt;DB_URI=mongodb+srv://&amp;lt;username&amp;gt;:&amp;lt;password&amp;gt;@cluster0.hjcrjts.mongodb.net/?retryWrites=true&amp;amp;w=majority&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Let's write a Schema for creating a MongoDB model to store the URLs and also connect our server to MongoDB Atlas. A schema is a blueprint of what kind of data we want to store in our database, whether it's a string or an array or an integer, etc. Based on this schema a model will be generated and used so that we can perform our database operations. Keep in mind that to design a schema or model or to perform any sort of MongoDB operations we are using an npm package named &lt;code&gt;mongoose&lt;/code&gt; can and to create an instance of a mongoose package use&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mongoose&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;now add the following piece of code to define a schema, and model and connect the database with our server.&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dbUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;useNewUrlParser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;connected to the database&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Schema&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;urlSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;original_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;short_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;urlSch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mongoose&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;urlsStore&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;urlSchema&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So we are storing two fields in our database one is the &lt;code&gt;original_url&lt;/code&gt; and another is &lt;code&gt;short_url&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Let's write the first API request to store URLs and create new short URLs
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;validUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;valid-url&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/shorturl&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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;let&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="c1"&gt;//Checks weather a URL is valid or not &lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;validUrl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isHttpsUri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;invalid url&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//checks Given URL is already present the database&lt;/span&gt;
      &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;urlSch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findOne&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;original_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;original_url&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;original_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;short_url&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;short_url&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;urlSch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;count&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="nx"&gt;URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;urlSch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;original_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;short_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;});&lt;/span&gt;
          &lt;span class="nx"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

            &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;original_url&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;original_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;short_url&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;findOne&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;short_url&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
          &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;

      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;server error&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All we are doing here is grabbing the URL from the &lt;code&gt;request.body&lt;/code&gt; and storing inside the variable &lt;code&gt;url&lt;/code&gt; after that check for its validity using an npm package &lt;code&gt;valid-URL&lt;/code&gt; , then we are checking to if the URL is already available in our database using the &lt;code&gt;findOne()&lt;/code&gt; the method by passing the URL as a query parameter or not lastly if all the checks are passed then we are adding up the given URL to our database and sending the short URL as a JSON response. The logic behind generating the short URL is very simple we are first counting the total number of URLs present in our Database and storing it to a count variable then we are assigning the short_url with &lt;code&gt;count+1&lt;/code&gt; this means the 1st URL will be &lt;code&gt;someurl/1&lt;/code&gt; and so on.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Now let's create a request for redirecting the users using the short URL&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/shorturl/:short_url&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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;let&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;short_url&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;already&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;urlSch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findOne&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;short_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;already&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;already&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;original_url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;invalid url&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;501&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;invalid url&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;There were grab the URL from the parameter and check for its presence inside our database if it exists then we are redirecting our users to the link using the &lt;code&gt;res.redirect()&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now let's write the code for fetching all the list of URLs present in our database&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//get all URLs&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/urls&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;urls&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;urlSch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;({}).&lt;/span&gt;&lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&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;p&gt;Here we are using the &lt;code&gt;find()&lt;/code&gt; the method in MongoDB and passing an &lt;code&gt;{}&lt;/code&gt; inside it to get all the data inside the &lt;code&gt;urlSch&lt;/code&gt; model and lastly returning a JSON object containing all the URLs inside our database.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Start the server and see the results
&lt;/h2&gt;

&lt;p&gt;use &lt;code&gt;node server.js&lt;/code&gt; to start the server and test the API in postman&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Creating a &lt;code&gt;POST&lt;/code&gt; and passing a &lt;code&gt;url&lt;/code&gt; parameter through the request body we are sending our server a &lt;code&gt;URL&lt;/code&gt; and after processing this returns me a valid link and the shorturl id.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670698038546%2FS22mGzaqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670698038546%2FS22mGzaqu.png" alt="image" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Let's try out an invalid URL and see what it returns&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670764783207%2FB2lF02P5v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670764783207%2FB2lF02P5v.png" alt="image" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;see it returns an error saying invalid URL&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GET a URL&lt;/p&gt;

&lt;p&gt;use &lt;a href="http://localhost:3000/api/shorturl" rel="noopener noreferrer"&gt;http://localhost:3000/api/shorturl&lt;/a&gt;/6 in your browser and you will be redirected&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670698337672%2FFAMDGZ3ot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670698337672%2FFAMDGZ3ot.png" alt="image" width="800" height="94"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get all URLs&lt;/p&gt;

&lt;p&gt;simply search for &lt;a href="http://localhost:3000/api/urls" rel="noopener noreferrer"&gt;http://localhost:3000/api/urls&lt;/a&gt; using a browser and you get all the available URLs inside our database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670698496779%2F1wfB7ZWFA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1670698496779%2F1wfB7ZWFA.png" alt="image" width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Ok, now we have reached the end make sure to share this article with friends and peers and make sure to hit a reaction. Follow Documatic and stay tuned for other amazing articles :)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>node</category>
      <category>webdev</category>
      <category>mongodb</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
