<?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: Desi-Codes</title>
    <description>The latest articles on DEV Community by Desi-Codes (@desicodes).</description>
    <link>https://dev.to/desicodes</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%2F686099%2F574a1fcc-b7a9-4645-8eaf-80ead546165e.png</url>
      <title>DEV Community: Desi-Codes</title>
      <link>https://dev.to/desicodes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/desicodes"/>
    <language>en</language>
    <item>
      <title>Build and Deploy Kanban Web App (React.js, Firebase, Drag &amp; Drop, MUI v5, Zustand, Security Rules)</title>
      <dc:creator>Desi-Codes</dc:creator>
      <pubDate>Mon, 10 Jul 2023 09:26:11 +0000</pubDate>
      <link>https://dev.to/desicodes/build-and-deploy-kanban-web-app-reactjs-firebase-drag-drop-mui-v5-zustand-security-rules-1a5c</link>
      <guid>https://dev.to/desicodes/build-and-deploy-kanban-web-app-reactjs-firebase-drag-drop-mui-v5-zustand-security-rules-1a5c</guid>
      <description>&lt;p&gt;Welcome to an exciting tutorial where we explore the creation of an exceptional web application using the latest features of React.js. Prepare to unlock the full potential of your programming skills as we delve into cutting-edge technology.&lt;/p&gt;

&lt;p&gt;Live: &lt;a href="https://flowboard-b0f9e.web.app/"&gt;https://flowboard-b0f9e.web.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Watch now: &lt;a href="https://bit.ly/3XL4z3B"&gt;https://bit.ly/3XL4z3B&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial, we'll demonstrate how to build a powerful and dynamic application using the latest version of React.js. We'll also incorporate Firebase, a robust backend solution, to enhance the performance and functionality of our app.&lt;/p&gt;

&lt;p&gt;By leveraging Firebase, we'll tap into its various components including Hosting, Emulators, Firestore, Cloud Functions, and Security Rules. These features will enable us to create a secure and scalable backend infrastructure for our application.&lt;/p&gt;

&lt;p&gt;To simplify state management, we'll utilize Zustand, an efficient state management library. With Zustand, we can easily handle the application's state in a streamlined manner, eliminating unnecessary complexities.&lt;/p&gt;

&lt;p&gt;Additionally, we'll take advantage of Firebase's deployment capabilities to ensure our app is easily accessible to users worldwide. Deploying your application using Firebase is a seamless process that allows you to focus on creating an exceptional user experience.&lt;/p&gt;

&lt;p&gt;Join us on this captivating journey as we combine the latest advancements in React.js(+ Custom hooks), Firebase, and Zustand. Unleash your creativity, enhance your programming skills, and build a remarkable web application that will make an impact.&lt;/p&gt;

&lt;p&gt;Get ready to elevate your development prowess and embark on this thrilling tutorial adventure. Let's create something extraordinary together!&lt;/p&gt;

</description>
      <category>react</category>
      <category>firebase</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Working with Modals in React.JS | Context API | MUI v5 Dialog Component</title>
      <dc:creator>Desi-Codes</dc:creator>
      <pubDate>Sat, 04 Mar 2023 11:16:55 +0000</pubDate>
      <link>https://dev.to/desicodes/working-with-modals-in-reactjs-context-api-mui-v5-dialog-component-3m4c</link>
      <guid>https://dev.to/desicodes/working-with-modals-in-reactjs-context-api-mui-v5-dialog-component-3m4c</guid>
      <description>&lt;p&gt;Modals play an important role in any medium to large size of application, they are used for multiple purposes - Confirmation Box, Alerts, Displaying UI (Login/ Sign up) so it's no secret that Modals are integral to any application nowadays. &lt;/p&gt;

&lt;p&gt;Dealing with Modals become cumbersome as the application grows, as there are certain challenges which come along the way - Too many modals, re-using (opening) modals from different parts of the application(different screens), Passing of data to the modals, etc.&lt;/p&gt;

&lt;p&gt;In this tutorial, you will learn how to build up an organised structure using the React Context API which will help you overcome the stated problems in an efficient manner.&lt;/p&gt;

&lt;p&gt;We will also build a custom hook&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;useModal()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check out the video tutorial -&lt;br&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=4BvvJ_HXyRE&amp;amp;ab_channel=DesiCodes"&gt;https://www.youtube.com/watch?v=4BvvJ_HXyRE&amp;amp;ab_channel=DesiCodes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Next JS - Google sheet to E-commerce store</title>
      <dc:creator>Desi-Codes</dc:creator>
      <pubDate>Fri, 14 Oct 2022 06:58:11 +0000</pubDate>
      <link>https://dev.to/desicodes/next-js-google-sheet-to-e-commerce-store-4je4</link>
      <guid>https://dev.to/desicodes/next-js-google-sheet-to-e-commerce-store-4je4</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--efvjEQC3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4nvmjck877adteg0oavm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--efvjEQC3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4nvmjck877adteg0oavm.png" alt="Image description" width="880" height="676"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this series, we will build an online store using Google Sheet as the data-source.&lt;/p&gt;

&lt;p&gt;⚛️ Building an online store&lt;br&gt;
🧑‍🎨 Designing the layout with MUI V5&lt;br&gt;
📝 Consuming/ Fetching data from a Google Sheet&lt;br&gt;
📚 Category filter based on the genre of books&lt;br&gt;
🔔 Send message to a Slack channel on every new order&lt;br&gt;
💾 Using &lt;a href="https://www.deta.sh/"&gt;Deta&lt;/a&gt; Database for temporary storage&lt;br&gt;
✉️ E-Mail account Verification (Nodemailer and Gmail Service)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gsheet-bookstore-tut.vercel.app/"&gt;Live Demo&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.desicodes.io/projects/gsheet-to-store"&gt;Project Details&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/playlist?list=PLmA3URVkjqnneH6bzeFia7HXaZh4ehSAL"&gt;Youtube Playlist &lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Linktree clone using Notion API and Next js</title>
      <dc:creator>Desi-Codes</dc:creator>
      <pubDate>Wed, 06 Oct 2021 10:07:30 +0000</pubDate>
      <link>https://dev.to/desicodes/linktree-clone-using-notion-api-and-next-js-52g5</link>
      <guid>https://dev.to/desicodes/linktree-clone-using-notion-api-and-next-js-52g5</guid>
      <description>&lt;p&gt;Hello friends,&lt;br&gt;
In this small series, we will be building something similar to linktree. Using Notion API to fetch the data out of a Notion page and displaying it on Next Js. &lt;br&gt;
By using notion page as the data source, user(you) can leverage the features that notion app provides, such as - Easily adding, removing and updating content, and even re-ordering the links(blocks). In the end, we will be deploying it on Vercel.&lt;/p&gt;

&lt;p&gt;Pretty exciting, right?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ftyfldsi6ql9s%2Flinktree-notion-ss_UEKAQVW8Gyy.png%3FupdatedAt%3D1633506376067" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ftyfldsi6ql9s%2Flinktree-notion-ss_UEKAQVW8Gyy.png%3FupdatedAt%3D1633506376067" alt="Using Notion page as datasource"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a written tutorial for the &lt;a href="https://bit.ly/3adpXqh" rel="noopener noreferrer"&gt;Notion API with NextJS. Linktree Clone&lt;/a&gt; youtube series&lt;/p&gt;

&lt;p&gt;By the end, you will learn how to consume data out of a notion page and use it anyway, for this tutorial we will be using next js.&lt;br&gt;
I prefer keeping things short and simple, so it is assumed that you know what Notion is and have a very basic level understanding of Next js.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 1: Creating a Notion Page
&lt;/h2&gt;

&lt;p&gt;The first thing we need is a notion page, which will be used as the data source.&lt;br&gt;
In order for you to easily get started, you can duplicate &lt;a href="https://utopian-suggestion-c65.notion.site/Desi-Codes-links-41b0bff4653b4b98ae7c7f1d3a740eaf" rel="noopener noreferrer"&gt;this template&lt;/a&gt;&lt;br&gt;
Or use the button on the left to create a new page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;!! While replacing or adding the image block(first block), make sure to use the 'embed' image option, instead of upload, as Notion provides access for only 60min for uploaded images, so it's better to use an external one, more on this later.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 2: Creating a new notion integration
&lt;/h2&gt;

&lt;p&gt;In order for you to interact with this page using the Notion api, you need to have an Integration, which has access to this specific page.&lt;/p&gt;

&lt;p&gt;1) Goto notion app&lt;br&gt;
2) Click on 'Settings and Members' button on the left&lt;br&gt;
3) Click on 'Integrations' (last button on the opened modal)&lt;br&gt;
4) Click on 'Develop your own integrations'&lt;br&gt;
5) Click on 'New Integration' and give it any name&lt;br&gt;
6) After submitting keep the secret key at some place, as we will later set it as an environment variable in our next js project.&lt;br&gt;
7) After creating the integration, now we just need to share the access of our page to this specific integration. So on the notion page, on right side top, click on 'share' button and 'invite' the new integration(it should be visible as an option). After which you are done!&lt;/p&gt;

&lt;p&gt;If you duplicated the template, you're good to go, otherwise you'll need to add some links and image manually(again, make sure that the image is an embedded one and not uploaded)&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: Creating Next js project
&lt;/h2&gt;

&lt;p&gt;Now we need to create a next project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;npx&lt;/span&gt; &lt;span class="nx"&gt;create&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="nx"&gt;linktree&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;notion&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to use the Notion API, we are going to use the Js SDK&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;notionhq&lt;/span&gt;&lt;span class="sr"&gt;/clien&lt;/span&gt;&lt;span class="err"&gt;t
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The next thing that we need to do is to add 2 environment variables to our project&lt;br&gt;
1) Notion Secret (Step 2, point 6)&lt;br&gt;
2) Page ID&lt;/p&gt;

&lt;p&gt;We need the id of the page which we want to use the data source, it's pretty simple, just open that page on browser, and the last segment of the url is the page id&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ftyfldsi6ql9s%2Fnotion_page_id_AT-PFNTm5.png%3FupdatedAt%3D1633509241368" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ftyfldsi6ql9s%2Fnotion_page_id_AT-PFNTm5.png%3FupdatedAt%3D1633509241368" alt="Notion page id"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create an .env file in the root of your project and add these two.&lt;br&gt;
It should look something like this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ftyfldsi6ql9s%2Fnotion_env_0R0geYtpn.png%3FupdatedAt%3D1633509851533" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ftyfldsi6ql9s%2Fnotion_env_0R0geYtpn.png%3FupdatedAt%3D1633509851533" alt=".env file"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you've all this setup, now we just to make the request and fetch the data.&lt;br&gt;
So, within the index.js (pages folder)&lt;/p&gt;

&lt;p&gt;we will be making the requests within the &lt;code&gt;getStaticProps&lt;/code&gt; function&lt;br&gt;
&lt;strong&gt;We first need to create a new instance of the Notion Client&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;notion&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;Client&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;auth&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="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NOTION_SECRET&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;After this, we just need to fetch the actual data, which includes the Page title and the blocks(image + links)&lt;br&gt;
We cannot fetch both in a single request, so we'll have to make do different calls&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&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;notion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;retrieve&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;page_id&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="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LINKS_PAGE_ID&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;blocks&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;notion&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;blocks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;block_id&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="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;LINKS_PAGE_ID&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;So the 'page' contains all the information about the page, within which we'll also be getting the page title&lt;br&gt;
and the 'blocks' will contain all the different blocks on the page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make sure that there are no blank blocks, which means there is no empty text block or anything like that.&lt;/strong&gt;&lt;br&gt;
The one below, is a blank block. Make sure that there are none, in starting and the ending.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ftyfldsi6ql9s%2Fnotion_blank_block__KkNCHGS7Rs.png%3FupdatedAt%3D1633510429872" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ftyfldsi6ql9s%2Fnotion_blank_block__KkNCHGS7Rs.png%3FupdatedAt%3D1633510429872" alt="Blank block"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So now just need to transform the data, as these two(page and blocks) will have a nested structure.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&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="nx"&gt;plain_text&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;links&lt;/span&gt; &lt;span class="o"&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;image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;blocks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;results&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;block&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;external&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;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;paragraph&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;paragraph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&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="nx"&gt;plain_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;paragraph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&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="nx"&gt;href&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;For more info, you can watch &lt;a href="https://youtu.be/BHm5Zp36nd8?t=824" rel="noopener noreferrer"&gt;this part&lt;/a&gt; of the series in order to better understand the above code.&lt;/p&gt;

&lt;p&gt;now we just pass down these three things to our page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;revalidate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&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;We will be setting the revalidate to 10 seconds, so that our project can update itself after deployment.&lt;br&gt;
In case, you're wondering why we're not using 'getServerSideProps' instead. Well, we can. However, there is a limitation on Notion API's end. which is&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The rate limit for incoming requests is an average of 3 requests per&lt;br&gt;
second.&lt;br&gt;
&lt;a href="https://developers.notion.com/reference/errors" rel="noopener noreferrer"&gt;Notion Docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, as we are already making 2 requests (one for the page and one for blocks), it is better to have some throttle in between.&lt;/p&gt;

&lt;p&gt;Now, you just need to display the content on your page in any way that you like, or  you can  watch the &lt;a href="https://www.youtube.com/watch?v=JOLV996BO5Q&amp;amp;list=PLmA3URVkjqnnncC6nskypTHYoMH8u8mJO&amp;amp;index=5&amp;amp;ab_channel=DesiCodes" rel="noopener noreferrer"&gt;last part of the series&lt;/a&gt;, it's pretty small plus we will also deploy this project on Vercel.&lt;/p&gt;

&lt;p&gt;In case, you want to compare your code with the final one &lt;a href="https://github.com/Desi-Codes/notion-linktree-clone/blob/main/pages/index.js" rel="noopener noreferrer"&gt;Here is the link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this was helpful, &lt;br&gt;
I would really appreciate if you subscribe to the &lt;a href="https://www.youtube.com/channel/UCY02y7r2SANwEFrddkp26wA" rel="noopener noreferrer"&gt;YT Channel&lt;/a&gt;  and like and comment on the videos of &lt;a href="https://www.youtube.com/watch?v=GDlNoxEpCt0&amp;amp;list=PLmA3URVkjqnnncC6nskypTHYoMH8u8mJO&amp;amp;ab_channel=DesiCodes" rel="noopener noreferrer"&gt;this series&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Connect with me&lt;br&gt;
IG: &lt;a href="https://www.youtube.com/redirect?event=video_description&amp;amp;redir_token=QUFFLUhqbVJ2NFZSeFQ0b3JVcUtrZmJIVFNMZDZicGpmQXxBQ3Jtc0ttdGhKaEN5a21qV3VJYTFqUm9vb25FcXp5QjQ0TFVEYWlRTjlfMGpQbXNnYlNFU0R2Nms4bk92T3BaYmJaQUFGNzI2TlNDODlFMTREbkVOcVVfd0wtbWxTTm9NdXphcWQwLW93bmdfZGNubW1VQXdlYw&amp;amp;q=https%3A%2F%2Fwww.instagram.com%2Fdesi.codes%2F" rel="noopener noreferrer"&gt;https://www.instagram.com/desi.codes/&lt;/a&gt; &lt;br&gt;
Twitter: &lt;a href="https://www.youtube.com/redirect?event=video_description&amp;amp;redir_token=QUFFLUhqblQzYlFzNENpalF0OWNuYmNSaVZzM0F4TTB6QXxBQ3Jtc0tra1U2dXh2R0xJd2x4MXF3Q2VrRmpsZGRSZC1Ed0ZuNHVWQlIxUDlFbFJsaXgtbDVNX0VCMnRXN01pLWg0QTVPRFBfVURDUUxwOEp4d3k2TC1NN0FsZEJ2Z2FhMXZGamxsLXpjUE9BZHpOQXRLUm5DOA&amp;amp;q=https%3A%2F%2Ftwitter.com%2FDesi_codes" rel="noopener noreferrer"&gt;https://twitter.com/Desi_codes&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>node</category>
      <category>javascript</category>
      <category>api</category>
    </item>
    <item>
      <title>Building a Dictionary app in React js</title>
      <dc:creator>Desi-Codes</dc:creator>
      <pubDate>Thu, 09 Sep 2021 18:48:13 +0000</pubDate>
      <link>https://dev.to/desicodes/building-a-dictionary-app-in-react-js-27mi</link>
      <guid>https://dev.to/desicodes/building-a-dictionary-app-in-react-js-27mi</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ftyfldsi6ql9s%2Fdictionary-app-ss_Aw7chCnr34.png%3FupdatedAt%3D1631212915008" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fik.imagekit.io%2Ftyfldsi6ql9s%2Fdictionary-app-ss_Aw7chCnr34.png%3FupdatedAt%3D1631212915008" alt="enter image description here"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  In this series, we will build a dictionary app from scratch, the features include, using Public API, playing the pronunciation(audio), bookmarking any word (using local storage to save it) and navigation.
&lt;/h5&gt;

&lt;p&gt;It's a beginner's level React app, in order to get started you just need to know the basics of React (components, JSX, props).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dictionary-rho.vercel.app/" rel="noopener noreferrer"&gt;View live &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.desicodes.io/projects/dictionary" rel="noopener noreferrer"&gt;Learn more + Resources&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/playlist?list=PLmA3URVkjqnmwxdT6GtkfaGVQ4Wm8hnPo" rel="noopener noreferrer"&gt;Youtube Playlist&lt;/a&gt;&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Link Shortener (Multi-User) - Firebase and React [9.5 hours youtube series]
</title>
      <dc:creator>Desi-Codes</dc:creator>
      <pubDate>Sat, 14 Aug 2021 13:07:16 +0000</pubDate>
      <link>https://dev.to/desicodes/link-shortener-multi-user-firebase-and-react-9-5-hours-youtube-series-4b7g</link>
      <guid>https://dev.to/desicodes/link-shortener-multi-user-firebase-and-react-9-5-hours-youtube-series-4b7g</guid>
      <description>&lt;p&gt;Hello everyone,&lt;br&gt;
I just finished up recording an entire series in which we build a Link Shortener application from absolute scratch! and by that I mean, it will be the first time for me as well.&lt;br&gt;
We are going to. start with designs that I prepared in Figma and we will code it together, it includes the entire journey of starting with an idea/ design and building an actual product out it.&lt;/p&gt;

&lt;p&gt;We'll build a full-stack Link Shortener App, similar to Bit.ly &amp;amp; Rebrandly (obviously it won't have all the features which they provide.)&lt;br&gt;
In this application,&lt;br&gt;
anyone can signup(email and password) and shorten long URLs, each link has a 'Total Clicks' counter which will be auto-incremented whenever anyone visits the shortened link.&lt;/p&gt;

&lt;p&gt;This entire series includes, planning, structuring, data modelling and creating a roadmap of a product.&lt;/p&gt;

&lt;p&gt;Check out the live version - &lt;a href="https://smoul.xyz/"&gt;https://smoul.xyz/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More Info - &lt;a href="https://www.desicodes.io/link-shortener"&gt;https://www.desicodes.io/link-shortener&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Series Playlist - &lt;a href="https://www.youtube.com/playlist?list=PLmA3URVkjqnm7n31fUF7VDhWXjeEaZK2l"&gt;https://www.youtube.com/playlist?list=PLmA3URVkjqnm7n31fUF7VDhWXjeEaZK2l&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Frontend - React&lt;/p&gt;

&lt;p&gt;Backend - Firebase (Authentication, Firestore database, Cloud functions and Hosting)&lt;/p&gt;

&lt;p&gt;Bonus: We will also write security rules from scratch.&lt;/p&gt;

</description>
      <category>react</category>
      <category>firebase</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
