<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Narottam04</title>
    <description>The latest articles on Forem by Narottam04 (@narottam04).</description>
    <link>https://forem.com/narottam04</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%2F540306%2Fae8f12de-c8b6-47a5-a3cc-02030460ee04.jpeg</url>
      <title>Forem: Narottam04</title>
      <link>https://forem.com/narottam04</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/narottam04"/>
    <language>en</language>
    <item>
      <title>Seamlessly Convert Web Apps to Android App: Automate with Capacitor and GitHub Actions</title>
      <dc:creator>Narottam04</dc:creator>
      <pubDate>Tue, 23 May 2023 18:53:10 +0000</pubDate>
      <link>https://forem.com/narottam04/seamlessly-convert-web-apps-to-android-app-automate-with-capacitor-and-github-actions-4e26</link>
      <guid>https://forem.com/narottam04/seamlessly-convert-web-apps-to-android-app-automate-with-capacitor-and-github-actions-4e26</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I have developed a GitHub action that allows you to transform a web app, written in any javascript framework, into a production-ready Android app that is prepared for deployment on the Play Store.&lt;/p&gt;

&lt;p&gt;It makes use of Ionic's Capacitor, which allows for the integration of native functionality into your web application and simplifies the packaging of your web app as native apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;DIY Deployments:&lt;/strong&gt;&lt;br&gt;
By automating the conversion of websites into Android apps and generating necessary files for testing, the project streamlines the deployment process for open source projects or personal projects, enabling developers to easily deploy their websites as production Android apps to play store.&lt;/p&gt;
&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;Github Repository(Action): &lt;a href="https://github.com/Narottam04/action-capacitor-android" rel="noopener noreferrer"&gt;https://github.com/Narottam04/action-capacitor-android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Web App Converted to Android App:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Web App: &lt;a href="https://pokecards.pages.dev/" rel="noopener noreferrer"&gt;https://pokecards.pages.dev/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Android App Release: &lt;a href="https://github.com/Narottam04/PokeCards/releases/tag/2023-05-23-17_45_41%2B0000" rel="noopener noreferrer"&gt;https://github.com/Narottam04/PokeCards/releases/tag/2023-05-23-17_45_41%2B0000&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

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

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

&lt;p&gt;&lt;strong&gt;Demo of web app converted to android app using github actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The app is created using eleventy js(11ty) and converted to android app using action-capacitor-android. Download the app from github release mentioned above in app link.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://player.vimeo.com/video/829679530" width="710" height="399"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;action-capacitor-android offers a streamlined solution for converting your web apps into production Android apps. With custom GitHub action, developers can automate the conversion process, generating signed .aab file for deployment to play store and .apk files for testing. This automation simplifies the deployment workflow for open source projects or personal projects that would like to have a native app for their web apps, empowering developers to effortlessly transform their web apps into fully functional Android apps, accelerating their deployment process and developer experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source Code
&lt;/h3&gt;

&lt;p&gt;Github Repository(Action): &lt;a href="https://github.com/Narottam04/action-capacitor-android" rel="noopener noreferrer"&gt;https://github.com/Narottam04/action-capacitor-android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github actions marketplace:&lt;br&gt;
&lt;a href="https://github.com/marketplace/actions/capacitor-android-action" rel="noopener noreferrer"&gt;https://github.com/marketplace/actions/capacitor-android-action&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;MIT&lt;/p&gt;
&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I wrote an article last year on how to use Ionic Capacitor to transform any web project into an Android app. The story has received a lot of attention on DEV, with 12,389 views, 320 reactions, and 57 comments thus far.&lt;/p&gt;

&lt;p&gt;Here is the link to the article: &lt;a href="https://dev.to/narottam04/convert-your-website-into-an-android-app-using-capacitor--5bh2"&gt;Convert Your Website into an Android App using Capacitor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition, I created an app with Capacitor that has over 2,000+ downloads on the Play Store. Given the app's popularity, I decided it was time to fix some bugs and improve the application UX for the users. However, the process of updating the app has been time-consuming, forcing me to run ten different CLI commands and wait for Android Studio to launch on my slow potato laptop😭😭. This entire process takes an additional 10 to 20 minutes of my work just to get a 5MB build.&lt;/p&gt;

&lt;p&gt;While there are third-party services that provide automated builds, they are not free. As a developer working on side projects, I found the cost unjustified. As a result, I decided to create this GitHub action to improve my present workflow and enable faster distribution of updates to my users.&lt;/p&gt;
&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Instructions to use this github action is in repository README file&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Following the hackathon announcement, I immediately dived into the documentation and developed a basic action that simply echoes a few lines. Following that, I referred to the Capacitor documentation and began creating the action.&lt;/p&gt;

&lt;p&gt;Let's go through the code and explore each section:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build Android&lt;/span&gt;
&lt;span class="na"&gt;run-name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Creating Production Ready Android App 🚀&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;master&lt;/span&gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;&lt;code&gt;name&lt;/code&gt;&lt;/strong&gt; field specifies the name of the GitHub Actions workflow.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;&lt;code&gt;run-name&lt;/code&gt;&lt;/strong&gt; field provides a description or title for the workflow.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;&lt;code&gt;on&lt;/code&gt;&lt;/strong&gt; section defines the trigger for the workflow. In this case, the workflow will be triggered when there is a push event to the &lt;strong&gt;&lt;code&gt;master&lt;/code&gt;&lt;/strong&gt; branch.
&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="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build APK&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="c1"&gt;# TODO: add the default directory - COMMENT IF IT'S NOT IN SUBFOLDER&lt;/span&gt;
    &lt;span class="c1"&gt;# defaults:&lt;/span&gt;
    &lt;span class="c1"&gt;#   run:&lt;/span&gt;
    &lt;span class="c1"&gt;#     working-directory: ./frontend&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;&lt;code&gt;jobs&lt;/code&gt;&lt;/strong&gt; section specifies the tasks to be executed as part of the workflow. In this case, there is a single job named "Build APK."&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;&lt;code&gt;runs-on&lt;/code&gt;&lt;/strong&gt; field specifies the operating system environment where the job will run. In this case, it is set to &lt;strong&gt;&lt;code&gt;ubuntu-latest&lt;/code&gt;&lt;/strong&gt;, indicating that the job will run on a Linux-based environment.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;&lt;code&gt;steps&lt;/code&gt;&lt;/strong&gt; section contains a list of individual steps or tasks that will be executed within the job.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The subsequent steps perform various actions required to build the Android app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout source&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;
        &lt;span class="c1"&gt;# TODO: add your branch to checkout&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;master&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup java&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-java@v3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;distribution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;zulu"&lt;/span&gt;
          &lt;span class="na"&gt;java-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;11"&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Setup Node.js&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;19.x&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;install dependencies&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm ci&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Create Build Folder&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm run build&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Add android folder if not present&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;if [ ! -d "./android" ]; then npx cap add android; fi&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Capacitor update&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npx cap update&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Capacitor copy&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npx cap copy&lt;/span&gt;

      &lt;span class="c1"&gt;# TODO: Check for folder structure in README for generating splash screen &lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Generate icons and splash screen to android folder&lt;/span&gt; 
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  &lt;span class="s"&gt;if [ -d "./resources" ]; then npm install @capacitor/assets --save-dev &amp;amp;&amp;amp; npx capacitor-assets generate --android; fi&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build app bundle&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cd android &amp;amp;&amp;amp; ./gradlew bundle &amp;amp;&amp;amp; ./gradlew assembleDebug&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Extract Android signing key from env&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;echo "${{ secrets.RELEASE_KEYSTORE }}" &amp;gt; android/release.jks.base64&lt;/span&gt;
          &lt;span class="s"&gt;base64 -d android/release.jks.base64 &amp;gt; android/release.decrypted.jks&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Sign dev build&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;jarsigner -keystore android/release.decrypted.jks -storepass "${{ secrets.RELEASE_KEYSTORE_PASSWORD }}" -signedjar ./android/app/build/outputs/bundle/release/app-release-signed.aab ./android/app/build/outputs/bundle/release/app-release.aab release&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Check folder content of android output&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ls ./android/app/build/outputs/bundle/release&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Set Tag&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;current-datetime&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;echo "CURRENT_DATETIME=$(date +'%Y-%m-%d-%H_%M_%S%z')" &amp;gt;&amp;gt; "$GITHUB_OUTPUT"&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build Release&lt;/span&gt;
        &lt;span class="na"&gt;shell&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bash&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;hub release create ${{ steps.current-datetime.outputs.CURRENT_DATETIME }} \&lt;/span&gt;
          &lt;span class="s"&gt;-m ${{ steps.current-datetime.outputs.CURRENT_DATETIME }} \&lt;/span&gt;
          &lt;span class="s"&gt;-a ./android/app/build/outputs/bundle/release/app-release-signed.aab \&lt;/span&gt;
          &lt;span class="s"&gt;-a ./android/app/build/outputs/apk/debug/app-debug.apk&lt;/span&gt;
        &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.ACCESS_TOKEN }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Checkout source&lt;/strong&gt;: This step checks out the source code repository using the &lt;strong&gt;&lt;code&gt;actions/checkout&lt;/code&gt;&lt;/strong&gt; GitHub Actions action.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setup java&lt;/strong&gt;: This step sets up the Java environment using the &lt;strong&gt;&lt;code&gt;actions/setup-java&lt;/code&gt;&lt;/strong&gt; GitHub Actions action. It installs the Zulu distribution of Java 11.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setup Node.js&lt;/strong&gt;: This step sets up the Node.js environment using the &lt;strong&gt;&lt;code&gt;actions/setup-node&lt;/code&gt;&lt;/strong&gt; GitHub Actions action. It installs Node.js version 19.x.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install dependencies&lt;/strong&gt;: This step installs the project dependencies using &lt;strong&gt;&lt;code&gt;npm ci&lt;/code&gt;&lt;/strong&gt;, which ensures a clean installation based on the &lt;strong&gt;&lt;code&gt;package-lock.json&lt;/code&gt;&lt;/strong&gt; file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create Build Folder&lt;/strong&gt;: This step runs the command &lt;strong&gt;&lt;code&gt;npm run build&lt;/code&gt;&lt;/strong&gt; to create the build folder for the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add android folder if not present&lt;/strong&gt;: This step checks if the &lt;strong&gt;&lt;code&gt;android&lt;/code&gt;&lt;/strong&gt; folder exists in the project. If it doesn't, it adds the Android platform using &lt;strong&gt;&lt;code&gt;npx cap add android&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capacitor update&lt;/strong&gt;: This step updates the Capacitor configuration and dependencies using &lt;strong&gt;&lt;code&gt;npx cap update&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Capacitor copy&lt;/strong&gt;: This step copies the web app files into the native project using &lt;strong&gt;&lt;code&gt;npx cap copy&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate icons and splash screen to android folder&lt;/strong&gt;: This step checks if the &lt;strong&gt;&lt;code&gt;resources&lt;/code&gt;&lt;/strong&gt; folder exists in the project. If it does, it installs the &lt;strong&gt;&lt;code&gt;@capacitor/assets&lt;/code&gt;&lt;/strong&gt; package as a development dependency and generates the icons and splash screen for the Android platform using &lt;strong&gt;&lt;code&gt;npx capacitor-assets generate --android&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build app bundle&lt;/strong&gt;: This step navigates to the &lt;strong&gt;&lt;code&gt;android&lt;/code&gt;&lt;/strong&gt; directory and runs the Gradle tasks &lt;strong&gt;&lt;code&gt;bundle&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;assembleDebug&lt;/code&gt;&lt;/strong&gt; using &lt;strong&gt;&lt;code&gt;./gradlew&lt;/code&gt;&lt;/strong&gt;. These tasks generate the app bundle and debug APK.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extract Android signing key from env&lt;/strong&gt;: This step takes the value of the &lt;strong&gt;&lt;code&gt;RELEASE_KEYSTORE&lt;/code&gt;&lt;/strong&gt; secret, which is assumed to be base64-encoded, and decodes it to obtain the signing key file (&lt;strong&gt;&lt;code&gt;release.jks&lt;/code&gt;&lt;/strong&gt;). The key file is saved as &lt;strong&gt;&lt;code&gt;android/release.decrypted.jks&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sign dev build&lt;/strong&gt;: Sign the debug build of the app using the provided keystore and password in github actions secrets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check folder content of android output&lt;/strong&gt;: List the contents of the output directory to verify the presence of the signed app bundle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set Tag&lt;/strong&gt;: Set the current date and time as a tag for the release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build Release&lt;/strong&gt;: Create a GitHub release with the tag name and message, including the signed app bundle and debug APK as release assets.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Additional Resources/Info
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/actions" rel="noopener noreferrer"&gt;Action Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://capacitorjs.com/" rel="noopener noreferrer"&gt;Capcitor Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.cryptocademy.android" rel="noopener noreferrer"&gt;Cryptocademy Android App, Created by me using React and Capcitor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>githubhack23</category>
      <category>githubactions</category>
      <category>javascript</category>
      <category>ionic</category>
    </item>
    <item>
      <title>My Experience In Tackling Critical Dependency Issues In React Native</title>
      <dc:creator>Narottam04</dc:creator>
      <pubDate>Wed, 15 Mar 2023 12:48:13 +0000</pubDate>
      <link>https://forem.com/narottam04/my-experience-in-tackling-critical-dependency-issues-in-react-native-o26</link>
      <guid>https://forem.com/narottam04/my-experience-in-tackling-critical-dependency-issues-in-react-native-o26</guid>
      <description>&lt;p&gt;In 2022, I successfully landed an internship as a frontend developer on the React Native stack. As I was already familiar with React JS for web, I thought it would be good to have some experience with the native mobile stack. I am writing this article to share my experience of a few stressful days, during which I had to fix a dependency bug from a package that was crashing the entire app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Severity Of The Bug
&lt;/h2&gt;

&lt;p&gt;Before going into the bug, let's understand the severity of the situation. My team and I were working hard on polishing the app, removing all the bugs, and improving user experiences so that we could finally roll out the app to new users and apply to VCs for funding. But as everything in this world, things never go as planned.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/QMHoU66sBXqqLqYvGO/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/QMHoU66sBXqqLqYvGO/giphy.gif" alt="https://media.giphy.com/media/QMHoU66sBXqqLqYvGO/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Upgrading Expo SDK
&lt;/h2&gt;

&lt;p&gt;Our previously functioning app started crashing when Expo released SDK 47, which was a problem as Expo only supports the previous three releases. Since we were using SDK 43, I was tasked with upgrading the SDK before it impacted other team members. I came across the official Expo SDK 47 blog and thought the process would be straightforward, but I was wrong. After following all the steps, my console was filled with a daunting stack of red errors.&lt;/p&gt;

&lt;p&gt;I tried to read through the error which I found almost gibberish to be honest lol and started my quest on debugging.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Debugging Quest
&lt;/h2&gt;

&lt;p&gt;The first thing I did after skimming through the error stack was to search on Stack Overflow to see if people were getting similar errors after upgrading the SDK. Since SDK 47 was new, I could not find any relevant sources for my problem. So, I second-guessed myself and tried to repeat the steps provided by Expo SDK 47 again, but sadly it didn't work. 😢.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/Dh5q0sShxgp13DwrvG/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/Dh5q0sShxgp13DwrvG/giphy.gif" alt="https://media.giphy.com/media/Dh5q0sShxgp13DwrvG/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since Expo SDK 47 wasn't working and Expo also supports the three previous releases, I decided to upgrade to a previous SDK version and try my luck. I cloned two new repositories where I upgraded to SDK 45 and SDK 46. Unfortunately, luck was not on my side as I encountered similar red stack errors on both SDK versions. &lt;/p&gt;

&lt;p&gt;As more team members started experiencing issues related to the deprecated SDK, my desperation began to increase. I received text messages from the group alerting me to their similar problems. It felt like I was trying to solve an error that wasn't in the code because it was working fine yesterday. This only added to my frustration.&lt;/p&gt;

&lt;h2&gt;
  
  
  More Debugging….
&lt;/h2&gt;

&lt;p&gt;I have discovered that one of the best ways to solve bugs is to take a break and step away from the problem when you're feeling frustrated. Doing something enjoyable like taking a walk, having an ice-cream, or indulging in something that comforts you can help you clear your mind and refresh your perspective. Personally, I prefer to take a walk during sunset as it is incredibly soothing, and the colors of the sky make everything feel ten times better. Pic of sunset taken by me…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F40r7evbcghw21i6i7djh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F40r7evbcghw21i6i7djh.jpg" alt="Sunset pic by me..."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After going for a walk, I decided to ask for help and solve the problem through pair programming. My team members attempted to upgrade, but they encountered the same error. Fortunately, we received a clue that the error was caused by a dependency called "react-native-reanimated." With this hint, I decided to investigate the issue on GitHub within the React Native package.&lt;/p&gt;

&lt;p&gt;Previously, I had been able to resolve almost all of my errors by searching on Stack Overflow. So, this was the first time that I felt like one of those senior engineers after searching for and finding an open issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finally The Solution…
&lt;/h2&gt;

&lt;p&gt;Finally, after skimming through various GitHub issues and opening more than 15 Chrome tabs, I discovered an issue with the package we were using, "react-native-skeleton-content." It was using a different version of "react-native-reanimated" under its dependencies, which caused the error we were facing😭😭. &lt;/p&gt;

&lt;p&gt;To resolve the issue, I added resolutions in the "package.json" file with the version of "react-native-reanimated" that "react-native-skeleton-content" required. This allowed us to use the correct version of the package and eliminated the error.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"resolutions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"react-native-reanimated"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.9.1"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Well, our fix did work. We were able to add some new features, resolve some bugs, and improve the user experience of the app. But just when we thought we had resolved platform-specific errors and could focus on rolling out features and debugging some edge cases in our codebase…&lt;/p&gt;

&lt;p&gt;WE WERE NOT ABLE TO MAKE A NEW BUILD FOR USERS.…..☠☠&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/Idg2rAVGS3xMZtBdhu/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/Idg2rAVGS3xMZtBdhu/giphy.gif" alt="https://media.giphy.com/media/Idg2rAVGS3xMZtBdhu/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The team finally decided to migrate from Expo to React Native. One of the expert team members handled the migration from Expo to React Native, and the adventure thus continued.&lt;/p&gt;

&lt;h2&gt;
  
  
  Similar Frameworks / Stacks
&lt;/h2&gt;

&lt;p&gt;My experience as a developer with React Native wasn't very pleasant. However, I would like to introduce an another framework that I worked extensively in 2022, i.e. Ionic Capacitor. Capacitor offers the stability of web development along with native plugins that can be added to provide native features. L&lt;a href="https://ionic.io/blog/capacitor-everything-youve-ever-wanted-to-know" rel="noopener noreferrer"&gt;ink to a blog article that introduces ionic capacitor&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;I created a side project called Cryptocademy using React JS and Capacitor, which has garnered over 500 downloads on the Play Store and currently has more than 800 signups. Over the course of a year, I never encountered any platform-specific issues and dependency issue with React JS and Ionic/Capacitor. Overall, my experience working with capacitor js was always pleasant&lt;/p&gt;

&lt;p&gt;One of the downsides of using Capacitor/Ionic is that the documentation and community content could be better. Most of the available content for Ionic/Capacitor on the internet is written in Angular JS, which can be difficult to convert to React JS. This has been a pain point for me personally. The examples of plugins in the Capacitor documentation could be improved. I have found that many plugins are difficult to implement because of a lack of examples. Even if I manage to find a blog post on a plugin, it is often written for Angular or is several years old, which can make it challenging to apply the examples to my current project.&lt;/p&gt;

&lt;p&gt;I have not tried flutter yet. If you are a flutter developer, I would love to know your developer experience with it in comments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learnings
&lt;/h2&gt;

&lt;p&gt;I learned a lot during my first internship and I'm really grateful for the experience. Before this, I only worked on my own projects, so it was great to work with other people's code, debug it, and do pair programming. Having more experienced colleagues also helped me improve my skills.&lt;/p&gt;

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

&lt;p&gt;I would like to know about your experience with the React Native stack. Have you encountered similar issues, and if so, how did you resolve them? Please let me know in the comments.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>javascript</category>
      <category>programming</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Stonks - Realtime Trading Simulator [Linode DEV Hackathon]</title>
      <dc:creator>Narottam04</dc:creator>
      <pubDate>Mon, 20 Feb 2023 18:19:16 +0000</pubDate>
      <link>https://forem.com/narottam04/stonks-realtime-trading-simulator-linode-dev-hackathon-i2p</link>
      <guid>https://forem.com/narottam04/stonks-realtime-trading-simulator-linode-dev-hackathon-i2p</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I created a stock trading simulator in which users can practice trading stocks with virtual USD. Users can buy and sell any stock, compete with other users, and improve their investing skills. &lt;br&gt;
It uses linode managed Postgres SQL, Node JS for backend and React Js for frontend.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Category Submission:
&lt;/h3&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Smooth Shifters:&lt;/strong&gt; I migrated my project from Supabase to Linode's PostgreSQL and Express server hosted on linode server, resulting in significant performance improvements for the app, as well as a reduction in the bundle size and complexity of the frontend code.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integration Innovators&lt;/strong&gt;: Linode managed Postgres SQL was used as the main backend to handle stock buying and selling.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wacky Wildcard:&lt;/strong&gt;: I had a great time developing this project. As a college student with limited funds, I have been hesitant to invest in stocks in the past, but this app provides me with the opportunity to learn and compete alongside others. I am eager to develop my investing skills and test them against other users on the app.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  App Link
&lt;/h3&gt;

&lt;p&gt;Link to web app: &lt;a href="https://stonks-app.webdrip.in/" rel="noopener noreferrer"&gt;https://stonks-app.webdrip.in/&lt;/a&gt;  &lt;strong&gt;OFFLINE FOR NOW, COMING SOON!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Link to Android APK: &lt;a href="https://drive.google.com/file/d/1Le1Hy_RFhBCnmT3wBeEs5KNihzy6SjNy/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1Le1Hy_RFhBCnmT3wBeEs5KNihzy6SjNy/view?usp=sharing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download the app through above link and test it on android phone.&lt;br&gt;
Coming soon on playstore😍😍&lt;/p&gt;


&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Login Page:&lt;/strong&gt;&lt;/p&gt;

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

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

&lt;p&gt;&lt;strong&gt;Search Page:&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Stock Details page - Candlestick chart:&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%2Fdv8us2sryjckpkkw45z9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdv8us2sryjckpkkw45z9.png" alt="Candlestick chart" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stock Details page - Line chart:&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%2Fewwxsj7y3hlf19rdj55w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewwxsj7y3hlf19rdj55w.png" alt="Line Chart" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

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

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

&lt;p&gt;&lt;iframe src="https://player.vimeo.com/video/801321010" width="710" height="399"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Description
&lt;/h3&gt;

&lt;p&gt;The Stonks app is the perfect way to learn about Stocks trading without any risk. With the Stonks virtual trading simulator, you can trade and invest in stocks without spending any real money. Plus, detailed candlestick charts and USD converter will help track prices and trends. And if you want to compete with others, global leaderboard will let you see how you stack up.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source Code
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Narottam04/Stonks" rel="noopener noreferrer"&gt;https://github.com/Narottam04/Stonks&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;MIT&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I have always wanted to learn stock trading, but being a college student with limited funds has made it difficult to pursue. This motivated me to create an app that not only enables me to learn to trade before I invest real money but also allows me to have fun and compete with others.&lt;/p&gt;

&lt;p&gt;This is my first project as a frontend developer where I used TypeScript with Express.js and hosted my server on a Linode Nanode. Additionally, I worked with backend packages like PM2 and Nginx, and learned how to use the Nano editor and copy files from my local machine to the remote server. This was my first experience working with backend technologies, and I would like to express my gratitude to Linode for providing me with the opportunity and motivation to learn and upskill.&lt;/p&gt;

&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;I chose this project because I want to learn TypeScript and Node.js, as well as learn how to host an API on a virtual server.&lt;/p&gt;

&lt;p&gt;The Express server is connected to a managed PostgreSQL database on Linode, which handles user transactions such as buying and selling stocks, user net worth, watchlists, and other related activities. The Express server is then hosted on a Linode Nanode server.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Linode Manged postgres database&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%2Fd3xmub1e7ea9xvl9kfmz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd3xmub1e7ea9xvl9kfmz.png" alt="Linode managed postgres db" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The frontend of the application was created using React.js, and for authentication, Firebase was used due to its better integration with the Ionic Capacitor library. The resulting frontend app was then converted to an Android app using CapacitorJS from Ionic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Additional Resources/Info
&lt;/h3&gt;

&lt;p&gt;Tutorial to host express server on linode:&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=sD8X4CApdpo&amp;amp;ab_channel=TheFullStackJunkie" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=sD8X4CApdpo&amp;amp;ab_channel=TheFullStackJunkie&lt;/a&gt; &lt;/p&gt;

</description>
      <category>bitcoin</category>
      <category>blockchain</category>
      <category>softwaredevelopment</category>
      <category>productivity</category>
    </item>
    <item>
      <title>SignLanguage - Learn ASL Practically - (MongoDB Atlas Hackathon 2022 Submission)</title>
      <dc:creator>Narottam04</dc:creator>
      <pubDate>Thu, 08 Dec 2022 18:16:50 +0000</pubDate>
      <link>https://forem.com/narottam04/signlanguage-learn-asl-practically-mongodb-atlas-hackathon-2022-submission-2cl7</link>
      <guid>https://forem.com/narottam04/signlanguage-learn-asl-practically-mongodb-atlas-hackathon-2022-submission-2cl7</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SignLanguage&lt;/strong&gt; now &lt;strong&gt;GestureAcademy&lt;/strong&gt; is a platform where users can practically learn American Sign Language using machine learning and access videos for over 20,000+ ASL phrases.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Category Submission:  Search No More
&lt;/h3&gt;

&lt;h3&gt;
  
  
  App Link 🎉🎉🥳
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://gestureacademy.webdrip.in/" rel="noopener noreferrer"&gt;https://gestureacademy.webdrip.in/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  App Previews &amp;amp; Features
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Homepage
&lt;/h4&gt;

&lt;p&gt;The homepage displays the entire application preview. Users can look up terms for videos and alphabets, as well as play games.&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Phrases Dictionary
&lt;/h4&gt;

&lt;p&gt;Signlanguage includes around 20,000 phrases from which users can learn ASL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupd3dcbs0brsti8fxi2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fupd3dcbs0brsti8fxi2c.png" alt="Phrases" width="800" height="407"&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96s3xbnddbpumjpmqgfc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F96s3xbnddbpumjpmqgfc.png" alt="open video" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Lightning Fast Fuzzy Search
&lt;/h4&gt;

&lt;p&gt;Users can search for any video from 20,000+ video using the fuzzy search feature implemented using MongoDB Atlas search in the ASL phrases dictionary.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fim8k3fhse0qeang5bi7j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fim8k3fhse0qeang5bi7j.png" alt="Fuzzy Search" width="800" height="406"&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fwna63j350pgdergcia.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1fwna63j350pgdergcia.png" alt="Fuzzy Search play video" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The video below shows how quickly MongoDB can search through over 20,000 video documents.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://player.vimeo.com/video/779291533" width="710" height="399"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Game Of ASL
&lt;/h2&gt;

&lt;p&gt;Users can play games that have been created using mediapipe and tensorflow machine learning libraries to help them learn and validate their learning.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learn Numbers
&lt;/h3&gt;

&lt;p&gt;Learn numbers from 0-10 in chronological order with the help of artificial intelligence.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://player.vimeo.com/video/779290403" width="710" height="399"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Random Numbers
&lt;/h3&gt;

&lt;p&gt;Show your hands on screen and AI will try to predict the numbers from 0-10 based on your hand signs.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://player.vimeo.com/video/779290243" width="710" height="399"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Source Code
&lt;/h3&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/Narottam04" rel="noopener noreferrer"&gt;
        Narottam04
      &lt;/a&gt; / &lt;a href="https://github.com/Narottam04/SignLanguage" rel="noopener noreferrer"&gt;
        SignLanguage
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      SignLanguage is a platform where users can practically learn American Sign Language using machine learning and access videos for over 20,000+ ASL phrases.
    &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;SignLanguage&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;SignLanguage&lt;/strong&gt; is a platform where users can practically learn American Sign Language using machine learning and access videos for over 20,000+ ASL phrases.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0cdfabcfc0805e73830f76a02f911e1a7857bbc756b2275c698f109ec5b50269/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f396b787764367166347a6679356b776f727a63752e676966"&gt;&lt;img src="https://camo.githubusercontent.com/0cdfabcfc0805e73830f76a02f911e1a7857bbc756b2275c698f109ec5b50269/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f396b787764367166347a6679356b776f727a63752e676966" alt="signLanguage"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;App Link 🎉🎉🥳&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://gestureacademy.webdrip.in/" rel="nofollow noopener noreferrer"&gt;https://gestureacademy.webdrip.in/&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;App Previews &amp;amp; Features&lt;/h3&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Homepage&lt;/h4&gt;

&lt;/div&gt;
&lt;p&gt;The homepage displays the entire application preview. Users can look up terms for videos and alphabets, as well as play games.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/d41a536169a54099ada1bc00b1c1b98e40f023a539bd346842120d6f828dfb74/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f62306e716a6c6478386d6a756b666673396734312e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/d41a536169a54099ada1bc00b1c1b98e40f023a539bd346842120d6f828dfb74/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f62306e716a6c6478386d6a756b666673396734312e706e67" alt="Signlanguage Homepage"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Phrases Dictionary&lt;/h4&gt;

&lt;/div&gt;
&lt;p&gt;Signlanguage includes around 20,000 phrases from which users can learn ASL.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/fa637c71ffa41eef3645d80fd0020cb051aecff7e0b7bdb89d89ceebbb74315e/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f75706433646362733062727374693866786932632e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/fa637c71ffa41eef3645d80fd0020cb051aecff7e0b7bdb89d89ceebbb74315e/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f75706433646362733062727374693866786932632e706e67" alt="Phrases"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/4442879a8c61b70e9f9f35340d89e4235a79ba58b5afd25a7370941632dd66e2/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f3936733378626e64646270756d6a706d716766632e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/4442879a8c61b70e9f9f35340d89e4235a79ba58b5afd25a7370941632dd66e2/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f3936733378626e64646270756d6a706d716766632e706e67" alt="open video"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h4 class="heading-element"&gt;Lightning Fast Fuzzy Search&lt;/h4&gt;

&lt;/div&gt;
&lt;p&gt;Users can search for any video from 20,000+ video using the fuzzy search feature implemented using MongoDB Atlas search in the ASL phrases dictionary.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/cd1f2e6535dd8667256dc13a42f667f16cfaee5316480ae8b459ea267a82e8da/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f696d386b3366687365307165616e67356269376a2e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/cd1f2e6535dd8667256dc13a42f667f16cfaee5316480ae8b459ea267a82e8da/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f696d386b3366687365307165616e67356269376a2e706e67" alt="Fuzzy Search"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0d97a3c5be613a855ebdb8a3c9c4d5931f0a2c92496cd67f1eded37900e318e6/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f3166776e6136336a3335307067646572676369612e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/0d97a3c5be613a855ebdb8a3c9c4d5931f0a2c92496cd67f1eded37900e318e6/68747470733a2f2f6465762d746f2d75706c6f6164732e73332e616d617a6f6e6177732e636f6d2f75706c6f6164732f61727469636c65732f3166776e6136336a3335307067646572676369612e706e67" alt="Fuzzy Search play video"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Game Of ASL&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Users can play games that have been created using mediapipe and tensorflow machine learning libraries to help them learn and validate their learning.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Learn Numbers&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Learn numbers from 0-10 in chronological order with the help of artificial intelligence.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Random Numbers&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Show your hands on screen and AI will try to predict the…&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/Narottam04/SignLanguage" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Permissive License
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;MIT License&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;Developing software applications or products that solve real world problem statements has always intrigued me. When I started learning ML and explored it's possibilities I thought of making a project that would be a part of something bigger than itself i.e. helping out community and reaching people in an easily accessible manner. This was my motivation for developing this app SignLanguage.&lt;/p&gt;

&lt;p&gt;YouTube is a great source of knowledge, but its algorithm doesn't promote short videos or videos that entice users. SignLanguage solves this problem by collecting these resources and making them easily accessible through our webapp. This webapp has around 20,000+ curated video phrases and features like fuzzy Search which can help users to learn American Sign Language(ASL) with ease.&lt;/p&gt;

&lt;p&gt;SignLanguage also has a number of games that users can play to practice their ASL fundamentals while having fun.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech Stack &amp;amp; Libraries Used
&lt;/h3&gt;

&lt;p&gt;The app is basically built using eleventy js (11ty) for frontend, MongoDb Realm as a backend and mediapipe and tensorflow js for machine learning.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eleventy Js&lt;/li&gt;
&lt;li&gt;Mongo Db&lt;/li&gt;
&lt;li&gt;Mongo Db Realm functions&lt;/li&gt;
&lt;li&gt;Mongo Db Realm HTTPS Endpoints&lt;/li&gt;
&lt;li&gt;Mongo Db Atlas Search&lt;/li&gt;
&lt;li&gt;Tensorflow&lt;/li&gt;
&lt;li&gt;Mediapipe&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How I built it
&lt;/h3&gt;

&lt;p&gt;Collecting 20,000+ ASL words was a difficult effort, therefore I wanted a backend that was simple and quick to set up. So, I choose Mongo Db realm as I was using Mongo Db to store my data.&lt;/p&gt;

&lt;h4&gt;
  
  
  Creating 20,000 Documents
&lt;/h4&gt;

&lt;p&gt;The first time I saw my data, I wondered if I could even store this data into MongoDB and how difficult it would be. However, MongoDB Compass makes importing JSON data extremely 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%2Ff7zszogbdegkw9circu0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7zszogbdegkw9circu0.png" alt="Mongo Db Compass" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Mongo Db Atlas Search
&lt;/h4&gt;

&lt;p&gt;Creating a Search Index for my data collection was a breeze, and I was impressed with how fast and precise the results were.&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Mongo Db Realm HTTPS ENDPOINTS
&lt;/h4&gt;

&lt;p&gt;After adding data and creating search index, I wanted to create an API that could be used by the frontend. Mongo DB makes creating api easy through their HTTPS ENDPOINTS &amp;amp; realm function services.&lt;/p&gt;

&lt;p&gt;I built a search Index endpoint called &lt;code&gt;/searchVideo&lt;/code&gt; which took a realm function and returns search results from atlas search.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;
&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;response&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;collection&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;services&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="s2"&gt;mongodb-atlas&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SignLanguage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;videos&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;searchVid&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;

    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;$search&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;searchVideos&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="na"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;searchVid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;wildcard&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;*&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;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;aggregate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pipeline&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;I also built an simple API endpoint called &lt;code&gt;videoApi&lt;/code&gt; and &lt;code&gt;alphabetSong&lt;/code&gt; which returns paginated data from database.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;response&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;start&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;services&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="s2"&gt;mongodb-atlas&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;db&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SignLanguage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;videos&lt;/span&gt;&lt;span class="dl"&gt;"&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;skip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;limit&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="nf"&gt;toArray&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;For creating ASL game, One of the issues I experienced was creating and gathering datasets for deep learning model. I had to personally collect the dataset because the datasets obtained on Kaggle either did not predict results correctly or were of poor quality.&lt;/p&gt;

&lt;p&gt;Machine Learning workflow model is shown 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fratn6j5ncjergnsgsyyw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fratn6j5ncjergnsgsyyw.png" alt="Image description" width="800" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A brief overview of creation of classifying model is;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We first predict key-points on hands using the Open CV Python package and the mediapipe hands model by google.&lt;/li&gt;
&lt;li&gt;Following this, a custom model is created using Tensorflow that classifies the keypoint.&lt;/li&gt;
&lt;li&gt;This model is then converted to tfjs model which can be used in browser to predict hand signs.&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%2Fhsjzzwxu6s3rs9tx23x2.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%2Fhsjzzwxu6s3rs9tx23x2.gif" alt="https://media.giphy.com/media/xUPOqo6E1XvWXwlCyQ/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks!
&lt;/h2&gt;

&lt;p&gt;Hope you liked my project! if you have any feedback please feel free to comment down below.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>webdev</category>
      <category>css</category>
    </item>
    <item>
      <title>Introducing Cryptocademy: A real time virtual crypto trading simulator</title>
      <dc:creator>Narottam04</dc:creator>
      <pubDate>Mon, 20 Jun 2022 12:32:28 +0000</pubDate>
      <link>https://forem.com/narottam04/introducing-cryptocademy-a-real-time-crypto-trading-simulator-15ca</link>
      <guid>https://forem.com/narottam04/introducing-cryptocademy-a-real-time-crypto-trading-simulator-15ca</guid>
      <description>&lt;p&gt;In this article, I will share my experience building my first solo big project that I've been working on for the past few months. My goal in creating this project was to improve my web development skills and to add something meaningful to my portfolio. It would be greatly appreciated if you could try it out and let me know what you think of it. You can comment or you can email me at &lt;a href="mailto:webdripdev@gmail.com"&gt;webdripdev@gmail.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Cryptocademy app doesn't involve any real money and it is for educational purpose&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing Cryptocademy
&lt;/h2&gt;

&lt;p&gt;The Cryptocademy app is the perfect way to learn about cryptocurrency without any risk. With the cryptocademy virtual trading simulator, you can trade and invest in crypto without spending any real money. Plus, detailed candlestick charts and USD converter will help track prices and trends. And if you want to compete with others, global leaderboard will let you see how you stack up. Plus, cryptocademy has curated resources to help you learn about cryptocurrency and blockchain from scratch. And to keep you up to date, cryptocademy sends daily cryptocurrency news right to the app. &lt;/p&gt;

&lt;p&gt;Check out this short video to learn more about cryptocademy.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Link to the app 🎉
&lt;/h2&gt;

&lt;p&gt;Cryptocademy is a cross-platform application, so you can test it on your web browser or download it from play store[only 5mb]😎😎.&lt;/p&gt;

&lt;p&gt;Website: &lt;a href="https://cryptocademy.webdrip.in/" rel="noopener noreferrer"&gt;https://cryptocademy.webdrip.in/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Android App: &lt;a href="https://play.google.com/store/apps/details?id=com.cryptocademy.android" rel="noopener noreferrer"&gt;https://play.google.com/store/apps/details?id=com.cryptocademy.android&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What problem it is trying to solve?
&lt;/h2&gt;

&lt;p&gt;Let’s look at some of the problems this cross-platform app is trying to solve.&lt;/p&gt;

&lt;h3&gt;
  
  
  Risk of losing real money.
&lt;/h3&gt;

&lt;p&gt;It is difficult to predict whether the price of tens of thousands of coins will increase or decrease at a particular time or over a period of time since many of these coins are new and unstable on the market.&lt;/p&gt;

&lt;p&gt;If people want to experiment or learn how to trade coins by investing real money. Taking this route is risky because the chances of losing well-earned money are high.&lt;/p&gt;

&lt;p&gt;Also, crypto is in winter right now. Here is a look at my portfolio. It's a good thing I purchased the coins virtually using cryptocademy because I would've had an emotional breakdown 😅 😂.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  What is cryptocurrency?
&lt;/h3&gt;

&lt;p&gt;The technology behind cryptocurrency is not well known by most people. They are unaware of the fundamentals. Investing in something you don't understand the problem it is trying to solve can be risky.&lt;/p&gt;

&lt;h3&gt;
  
  
  Similar Apps🤔
&lt;/h3&gt;

&lt;p&gt;Numerous apps are available that attempt to solve this issue. Several of these apps provide limited coins while others lack real market prices. The majority of these apps do not have curated resources, search coins, and much more features that cryptocademy provides.&lt;/p&gt;

&lt;h2&gt;
  
  
  Talk is cheap! show me 📷
&lt;/h2&gt;

&lt;p&gt;A overview of all the features of cryptocademy&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Discover the future of digital finance.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Real-time, risk-free trading simulator that allows you to master crypto trading at zero cost. Buy from over 10k+ coins using virtual usd and start your trading journey&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%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1650981847%2Fmarket_e7l799.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1650981847%2Fmarket_e7l799.png" alt="https://res.cloudinary.com/https-webdrip-in/image/upload/v1650981847/market_e7l799.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Analysis of coins
&lt;/h3&gt;

&lt;p&gt;See detailed cryptocurrency price change candlestick charts, USD converter, social media trends and followers of over 10k+ coins&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%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1650981845%2Fshowcase2_xxh0dr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1650981845%2Fshowcase2_xxh0dr.png" alt="https://res.cloudinary.com/https-webdrip-in/image/upload/v1650981845/showcase2_xxh0dr.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep track of your virtual portfolio.
&lt;/h3&gt;

&lt;p&gt;You decide how to utilize mock $100000 virutal USD! Buy, sell, trade, and profit🚀🚀🚀. Learn how to become a savvy investor with cryptocademy.&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%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1650981846%2Fshowcase3_k3uoox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1650981846%2Fshowcase3_k3uoox.png" alt="https://res.cloudinary.com/https-webdrip-in/image/upload/v1650981846/showcase3_k3uoox.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Compete Globally
&lt;/h3&gt;

&lt;p&gt;Do you have what it takes to be a better investor, compete globally with other users and become a better investor.&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%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1650981846%2Fshowcase4_h0vitd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1650981846%2Fshowcase4_h0vitd.png" alt="https://res.cloudinary.com/https-webdrip-in/image/upload/v1650981846/showcase4_h0vitd.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Search Coins
&lt;/h3&gt;

&lt;p&gt;The majority of the apps I tried did not offer this capability. You may search for and learn about any coin on Cryptocademy. Coin prices and details are provided by coingecko api.&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%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1655537790%2Fsearch-coins-mock_ak7a61.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1655537790%2Fsearch-coins-mock_ak7a61.png" alt="https://res.cloudinary.com/https-webdrip-in/image/upload/v1655537790/search-coins-mock_ak7a61.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Daily Top Cryptocurrencies News
&lt;/h3&gt;

&lt;p&gt;Get the latest news on Cryptocurrency and stay up-to-date on major crypto like Bitcoin, Ethereum etc..&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%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1650981848%2Fshowcase5_pycvmp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1650981848%2Fshowcase5_pycvmp.png" alt="https://res.cloudinary.com/https-webdrip-in/image/upload/v1650981848/showcase5_pycvmp.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Curated resources to learn fundamentals.
&lt;/h3&gt;

&lt;p&gt;We curated the best resources we could find on the Internet to learn about cryptocurrencies, trading, blockchain, and web 3.0. As time progresses, there will be more articles and resources available on the app.&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%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1650981847%2Fshowcase6_cylkru.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fhttps-webdrip-in%2Fimage%2Fupload%2Fv1650981847%2Fshowcase6_cylkru.png" alt="https://res.cloudinary.com/https-webdrip-in/image/upload/v1650981847/showcase6_cylkru.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  *&lt;strong&gt;&lt;em&gt;Tech stack&lt;/em&gt;&lt;/strong&gt;*
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React Js - Frontend&lt;/li&gt;
&lt;li&gt;Firebase - Authentication&lt;/li&gt;
&lt;li&gt;Supabase - Postgres SQL database&lt;/li&gt;
&lt;li&gt;Framer motion - Animation&lt;/li&gt;
&lt;li&gt;Tailwind CSS - Styling&lt;/li&gt;
&lt;li&gt;Redux Toolkit - State management&lt;/li&gt;
&lt;li&gt;Capacitor - In order to convert the Web App to Android app and deploy it to the Play Store&lt;/li&gt;
&lt;li&gt;Netlify - Hosting&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Challenges Faced!
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Redux
&lt;/h3&gt;

&lt;p&gt;Many would argue that I could have utilized context API for state management instead of redux. I believe redux is one of those libraries where, even if you grasp the concept, you really need to code to understand it. But, I think using the redux toolkit was a good choice because it simplified caching results, refetching, etc. Overall, I think it was a good experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Authentication &amp;amp; Database
&lt;/h3&gt;

&lt;p&gt;When I first started my project, I used Firebase authentication and hoped to use the decentralized peer-to-peer database Gun.js, but I ran into many unexpected errors. I literally wanted to give up while debugging one problem after another. I was having a hard time visualizing my data in gun.js, so I decided I needed a relational database rather than peer-to-peer. When I started working with supabase, everything started to click and I was so happy implementing one feature after another.&lt;/p&gt;

&lt;p&gt;I really like the developer experience of supabase and would recommend other to try it out (not sponsored).&lt;/p&gt;

&lt;p&gt;I wanted to switch my authentication from firebase to supabase, but I didn't want to write any code and logic to do so 😅&lt;/p&gt;

&lt;h3&gt;
  
  
  Charts
&lt;/h3&gt;

&lt;p&gt;I decided to utilise apexchart; however, the example in the documentation was written in class component, and this was the first time I transformed a class component code into a functional component. I suppose I need to work more on the candlestick chart and make it more detailed, but for now, I am pleased with the results.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Contributing&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;PRs are always welcome.&lt;/p&gt;

&lt;p&gt;If you want to file an issue or add a new feature to this programme, I would appreciate any collaboration and effort. You can add/contribute &lt;strong&gt;&lt;a href="https://github.com/Narottam04/Cryptocademy" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/strong&gt; :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/xUPOqo6E1XvWXwlCyQ/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/xUPOqo6E1XvWXwlCyQ/giphy.gif" alt="https://media.giphy.com/media/xUPOqo6E1XvWXwlCyQ/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Thanks!&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Hope you like my project! Please let me know what do you think about my project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/narottam" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.buymeacoffee.com%2Fbutton-api%2F%3Ftext%3DBuy%2520me%2520a%2520coffee%26emoji%3D%26slug%3Dnarottam%26button_colour%3DFFDD00%26font_colour%3D000000%26font_family%3DPoppins%26outline_colour%3D000000%26coffee_colour%3Dffffff"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>product</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Convert your website into an android app using capacitor 😱.</title>
      <dc:creator>Narottam04</dc:creator>
      <pubDate>Thu, 09 Jun 2022 12:31:55 +0000</pubDate>
      <link>https://forem.com/narottam04/convert-your-website-into-an-android-app-using-capacitor--5bh2</link>
      <guid>https://forem.com/narottam04/convert-your-website-into-an-android-app-using-capacitor--5bh2</guid>
      <description>&lt;p&gt;According to Atwood's Law, "Any application that can be written in JavaScript, will eventually be written in JavaScript."&lt;/p&gt;

&lt;p&gt;In this article, we will learn how to convert a website or web application to an android app that can be deployed on the Android play store or installed on a mobile device using a library from Ionic called a capacitor. I will use react for this demo, but you can use any other framework or even plain old JavaScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisite
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A production build folder. Most frameworks have a build command to create a build folder for you. If you are using vanilla JavaScript add all your assets and files to a folder.&lt;/li&gt;
&lt;li&gt;Android studio&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Create a react application.
&lt;/h2&gt;

&lt;p&gt;We will begin by creating a react application using the following commands. You can skip steps 1 and 2 if you already have an existing project and build folder.&lt;/p&gt;

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

npx create-react-app my-app
&lt;span class="nb"&gt;cd &lt;/span&gt;my-app


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

&lt;/div&gt;

&lt;p&gt;Now to run our react application we use the below command&lt;/p&gt;

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

npm start


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

&lt;/div&gt;

&lt;p&gt;Our demo application will 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhn6albcmahrpo2f8gq1t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhn6albcmahrpo2f8gq1t.png" alt="demo app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Create a Build folder for your application.
&lt;/h2&gt;

&lt;p&gt;A build folder is crucial in converting our react application to an android application. We use the following command to create a build folder for our react application. If you are using another framework, it might have different commands, so I recommend reading the documentation for the framework you are using. If you are using plain JavaScript, create a folder that contains all your files and assets.&lt;/p&gt;

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

npm run build


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  Step 3: Install capacitor
&lt;/h2&gt;

&lt;p&gt;To create our android application, let’s first install capacitor cli and its core library.&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; @capacitor/core 
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; @capacitor/cli 
npx cap init


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

&lt;/div&gt;

&lt;p&gt;The first question will be to enter the name of your application, and the second one will be to enter the package id of application com.yourAppName.android.&lt;/p&gt;

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

&lt;p&gt;Now, open the capacitor.config.ts file in webDir and enter the name of your build folder if it is different.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 4: Create your android application
&lt;/h2&gt;

&lt;p&gt;To create an android application, make sure you have installed and configured your android studio properly.&lt;/p&gt;

&lt;p&gt;Assuming everything above has been set up, run the following command.&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; @capacitor/android
npx cap add android


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

&lt;/div&gt;

&lt;p&gt;With the first command, we will download the capacitor android library into our project, and with the second command, we will generate the android code.&lt;br&gt;
Now, it's time to open the android studio using the following command.&lt;/p&gt;

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

npx cap open android


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

&lt;/div&gt;

&lt;p&gt;Alternatively, you can open Android Studio and import the android/ directory as an Android Studio project.&lt;br&gt;
It will take some time for your application to open, but it should look something like this once it is ready.&lt;/p&gt;

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

&lt;p&gt;By clicking on the play button in android studio, you can now run your android application.&lt;/p&gt;

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

&lt;p&gt;The emulator screen on my potato laptop was entirely black for some reason. However, if you have the same problem as me, create an apk and run it either on an android simulator like Nox player for windows or on an actual android device.&lt;/p&gt;

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

&lt;p&gt;Click on Build &amp;gt;&amp;gt; Build Bundle(s) / APK(s) &amp;gt;&amp;gt; Build APK(s) to generate a installable debug apk file. &lt;/p&gt;

&lt;p&gt;To submit the app to the play store, we need to create a signed bundle, but now for testing, we will create a debug application.&lt;br&gt;
It will show a similar message in the bottom right corner if successfully built.&lt;/p&gt;

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

&lt;p&gt;click on locate folder or navigate to android\app\build\outputs\apk.  Now you can run your application either on your android phone or android simulator like nox player etc.&lt;/p&gt;

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

&lt;p&gt;Hurray! it works 🥳🥳🥳.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus Section: Create a custom splash screen for your android application
&lt;/h2&gt;

&lt;p&gt;An app would not be complete without a customized splash screen and icon. If we want to create  a splash screen and custom icon, we must install the capacitor plugin first.&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;-g&lt;/span&gt; cordova-res


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

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;cordova-res&lt;/code&gt; expects a Cordova-like structure: place one icon and one splash screen file in a top-level &lt;code&gt;resources&lt;/code&gt; folder within your project, like so:&lt;/p&gt;

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

resources/
├── android/
        └── icon-background.png
        └── icon-foreground.png
├── icon.png
└── splash.png


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

&lt;/div&gt;

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

&lt;p&gt;I am using icon and splash from the project I worked on for two months. With my new project, newbie cryptocurrency investors will be able to try investing in cryptocurrencies without any risk. If you are interested in learning more, subscribe to my newsletter to receive updates on &lt;a href="https://blog.webdrip.in/" rel="noopener noreferrer"&gt;https://blog.webdrip.in/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, run the following to generate icons and splash screens of different sizes for your app.&lt;/p&gt;

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

cordova-res android --skip-config --copy


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

&lt;/div&gt;

&lt;p&gt;The command should generate two folder icons and a splash. You will not need to configure anything because all assets generated on this folder will be copied to your Android code folder.&lt;/p&gt;

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

&lt;p&gt;Now to test our splash screen follow step 4 again.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://capacitorjs.com/docs" rel="noopener noreferrer"&gt;Capacitor Docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/xUPOqo6E1XvWXwlCyQ/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/xUPOqo6E1XvWXwlCyQ/giphy.gif" alt="https://media.giphy.com/media/xUPOqo6E1XvWXwlCyQ/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this post was informative. 💪🏾 Feel free to comment or reach out to me if you have any questions.In the next blog, we will be adding a push notification feature to our capacitor app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/narottam" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.buymeacoffee.com%2Fbutton-api%2F%3Ftext%3DBuy%2520me%2520a%2520coffee%26emoji%3D%26slug%3Dnarottam%26button_colour%3DFFDD00%26font_colour%3D000000%26font_family%3DPoppins%26outline_colour%3D000000%26coffee_colour%3Dffffff"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more such insights, checkout my blog website &lt;a href="http://blog.webdrip.in/" rel="noopener noreferrer"&gt;blog.webdrip.in&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Hoisting in JavaScript 🔥 😍[Visually Explained]</title>
      <dc:creator>Narottam04</dc:creator>
      <pubDate>Wed, 01 Jun 2022 12:04:03 +0000</pubDate>
      <link>https://forem.com/narottam04/hoisting-in-javascript-visually-explained-cfa</link>
      <guid>https://forem.com/narottam04/hoisting-in-javascript-visually-explained-cfa</guid>
      <description>&lt;p&gt;Developers often have a love-hate relationship with JavaScript because sometimes it doesn't work as expected. Learning JavaScript fundamentals and its quirks can assist developers in debugging and writing clean code. This blog post aims to explain one such peculiarity, i.e. hoisting using animated gifs 🌟✨. After reading this blog, you will be one step closer to becoming a Rockstar Developer 🎸😎.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6n711i6heh7ena1pib6i.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6n711i6heh7ena1pib6i.gif" alt="Let's get started"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Execution of JavaScript code.
&lt;/h2&gt;

&lt;p&gt;Before understanding the concepts of hoisting let’s first learn how javascript will run code behind the scene through an example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;a&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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&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;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&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;sum&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this simple example, we initialize two variables, a and b, and store 2 and 4, respectively.&lt;/p&gt;

&lt;p&gt;Then we add the value of &lt;strong&gt;a&lt;/strong&gt; and &lt;strong&gt;b&lt;/strong&gt; and store them in the &lt;strong&gt;sum&lt;/strong&gt; variable.&lt;/p&gt;

&lt;p&gt;Let's see how JavaScript will execute the code in the browser 🤖&lt;/p&gt;

&lt;p&gt;When the JS first receives our code, it will create an execution context. Execution context will first scan through all the code, and allocate memory to all the variables and functions. For variables specifically var, JavaScript will store undefined in the memory, and for functions, it will keep the entire function code reference in memory.&lt;/p&gt;

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

&lt;p&gt;Now that we have scanned and allocated memory to the code, we can execute the code. JavaScript will again start going through the whole code line by line. &lt;/p&gt;

&lt;p&gt;As it encounters &lt;strong&gt;var a = 2,&lt;/strong&gt; it assigns 2 to 'a' in memory. Until now, the value of 'a' was undefined.&lt;/p&gt;

&lt;p&gt;Similarly, it does the same thing for the b variable. It assigns 4 to 'b'. Then it calculates and stores the value of the sum in memory which is 6. Now, in the last step, it prints the sum value in the console and then destroys the global execution context as our code is finished.&lt;/p&gt;

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

&lt;p&gt;If you want to learn more about execution of code in JavaScript, I wrote an article about it on the dev community.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://dev.to/narottam04/how-javascript-works-visually-explained-269j"&gt;How Javascript works explained visually&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Hoisting in var
&lt;/h2&gt;

&lt;p&gt;To understand hoisting in a variable defined with var, let's take the example we took in the execution of code. However, in this example, we're going to print the sum at the beginning, not at the end.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&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;sum&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;a&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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&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;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&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 would throw an error in other programming languages, but not in JavaScript.&lt;/p&gt;

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

&lt;p&gt;As we saw in the section on the execution of code, when JS first receives our code, it will create an execution context. Execution context will first scan through all the code, and allocate memory to all the variables and functions.&lt;/p&gt;

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

&lt;p&gt;Now after scanning the code it will start the execution of the code line by line. In the first line, javascript checks the value of sum in memory and prints undefined as an output.&lt;/p&gt;

&lt;p&gt;Now, as it encounters var a = 2, it assigns 2 to 'a' in memory. Until now, the value of 'a' was undefined.&lt;/p&gt;

&lt;p&gt;Similarly, it does the same thing for the b variable. It assigns 4 to 'b'. Then it calculates and stores the value of the sum in memory which is 6.&lt;/p&gt;

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

&lt;p&gt;If we console log after we calculate the sum let’s see the output.&lt;/p&gt;

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

&lt;p&gt;Initially, it will print undefined, after computing the sum, it will print 6. This peculiarity in javaScript is called hoisting. Let’s learn hoisting in let, const keywords, and functions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hoisting in let and const
&lt;/h2&gt;

&lt;p&gt;When we refer to a variable declared with the var keyword before its declaration, it simply returns its default value: undefined! However, as demonstrated in the previous example, this can sometimes result in "unexpected" behavior.&lt;/p&gt;

&lt;p&gt;Therefore, ES6 introduced two new JavaScript keywords to combat this unexpected behavior: let and const. These two keywords are Block Scope. To keep this article concise we would be learning more about the scope in another blog.&lt;/p&gt;

&lt;p&gt;Let’s see the hoisting in let and const through an example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&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;a&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;sum&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;a&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&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;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6&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;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So let’s start with the execution of code again, when JS first receives our code, it will create an execution context. Execution context will first scan through all the code, and allocate memory to all the variables and functions. I know I've mentioned this multiple times, but it's important 😅.&lt;/p&gt;

&lt;p&gt;As opposed to var where &lt;strong&gt;undefined&lt;/strong&gt; is stored in memory, let and const variables are &lt;strong&gt;uninitialized&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyt7urhni0jnwdbsz63dx.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyt7urhni0jnwdbsz63dx.gif" alt="Hoisting in let const 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After scanning the code it will start executing the code line by line. The first line will print the value of ‘a'  i.e. undefined in the console. But when we try to access a let and const keyword before initialization, a ReferenceError gets thrown whenever we try to access uninitialized variables. Uninitialized variables cannot be accessed since they are in a temporal dead zone.&lt;/p&gt;

&lt;p&gt;Temporal dead zone simply means we don't have access to the variables before declaration.&lt;/p&gt;

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

&lt;p&gt;If we try to print the value of ‘b’ instead of the sum the result would be the same.&lt;/p&gt;

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

&lt;p&gt;The value of the sum must be printed once the deceleration of the value to the variable is complete.&lt;/p&gt;

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

&lt;p&gt;Here is the visualization of the execution of code.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://player.vimeo.com/video/715502139" width="710" height="399"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Hoisting in function
&lt;/h2&gt;

&lt;p&gt;When javaScript begins scanning code and comes across a function, it stores the function's reference in memory. It is the reason why we can invoke the function before we have created it. Let’s see it in action through an example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nf"&gt;printSum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&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;printSum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;b&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;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&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;c&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output of the following code will be.&lt;/p&gt;

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

&lt;p&gt;Let's try to visualize, first JavaScript will scan the code, it will encounter a function in the 3rd line, and it will add a reference of the function to the memory.&lt;/p&gt;

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

&lt;p&gt;Javascript will now run the code line by line. It comes across a function on the first line. When a function is executed in javascript, it creates a new execution context within our global execution context. Consider the function execution context to be a mini execution context, with its memory and a location to execute the code in the function.&lt;/p&gt;

&lt;p&gt;Read more about how functions execute code in this &lt;a href="https://dev.to/narottam04/how-javascript-works-visually-explained-269j"&gt;blog post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fifkb2aeukp0mt18vcc1o.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fifkb2aeukp0mt18vcc1o.gif" alt="hoisting in function - exec of code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once all the code inside the function is executed, the execution context of the function is destroyed. &lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Fnlnw8uY6jo&amp;amp;list=PLlasXeu85E9cQ32gLCvAvr9vNaUccPVNP&amp;amp;index=4" rel="noopener noreferrer"&gt;Namaste JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/xUPOqo6E1XvWXwlCyQ/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/xUPOqo6E1XvWXwlCyQ/giphy.gif" alt="https://media.giphy.com/media/xUPOqo6E1XvWXwlCyQ/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this post was informative. 💪🏾 Feel free to comment or reach out to me if you have any questions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/narottam" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.buymeacoffee.com%2Fbutton-api%2F%3Ftext%3DBuy%2520me%2520a%2520coffee%26emoji%3D%26slug%3Dnarottam%26button_colour%3DFFDD00%26font_colour%3D000000%26font_family%3DPoppins%26outline_colour%3D000000%26coffee_colour%3Dffffff"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more such insights, checkout my blog website &lt;a href="http://blog.webdrip.in/" rel="noopener noreferrer"&gt;blog.webdrip.in&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>How Cryptocurrency Works Explained Visually</title>
      <dc:creator>Narottam04</dc:creator>
      <pubDate>Sat, 29 Jan 2022 13:30:52 +0000</pubDate>
      <link>https://forem.com/narottam04/how-cryptocurrency-works-explained-visually-2j32</link>
      <guid>https://forem.com/narottam04/how-cryptocurrency-works-explained-visually-2j32</guid>
      <description>&lt;p&gt;In 2008, when Lehman Brothers Holdings Inc. filed for bankruptcy, it shook people's faith in banks so much that a new class of assets appeared without formal bank backing. The first cryptocurrency named Bitcoin was invented in 2008 by an unknown person or group of people using the name Satoshi Nakamoto. The idea was to make a decentralized open source digital currency, without a central bank or single administrator. Here, is the &lt;a href="https://bitcoin.org/bitcoin.pdf" rel="noopener noreferrer"&gt;link to the proposed whitepaper by Satoshi Nakamoto&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this article, we will explore how cryptocurrency actually works, from transactions to data storage. Since, Bitcoin is the first and most well-known cryptocurrency, I will focus on it in this article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bitcoin ≠ Blockchain
&lt;/h2&gt;

&lt;p&gt;It is a common misconception that people use the word &lt;strong&gt;blockchain&lt;/strong&gt; and &lt;strong&gt;Bitcoin&lt;/strong&gt; interchangeably, but that's not true&lt;/p&gt;

&lt;p&gt;Bitcoin is not just a coin but a protocol based on the technology of &lt;strong&gt;Blockchain.&lt;/strong&gt; Protocol is set of rules that guides the participants on the network how to communicate with one another. An example of a protocol for bitcoins is how public and private keys for authentication should be managed, how mining should be done for transactions to be confirmed, etc. Ethereum, waves, neo, and ripple are a few other examples of similar protocols like bitcoin.&lt;/p&gt;

&lt;p&gt;This protocol, like Bitcoin and Ethereum, has a coin that is typically named after the protocol name, which enables human interaction. This coin is used to reward people who mine, to add blocks to the blockchain, and, most importantly, to buy stuff from one another.&lt;/p&gt;

&lt;p&gt;Tokens are layer 3 and rely on smart contracts that are constructed on protocols from layer 2. Ethereum is the most popular protocol for creating smart contracts and for creating token. Bitcoin protocol does not have token because it does not support creating smart contract on their protocol.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  A Secure Alternative to Traditional Banks 🤔
&lt;/h2&gt;

&lt;p&gt;To truly comprehend cryptocurrencies, let us first examine how blockchain and traditional client-server architecture function.&lt;/p&gt;

&lt;h3&gt;
  
  
  Client Server Architecture
&lt;/h3&gt;

&lt;p&gt;Basic concept of this architecture is, client(user) will make a http request to the server and if everything is correct it will send back that webpage served from the centralized database as a response.&lt;/p&gt;

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

&lt;p&gt;The fact that all data is stored on a centralized server controlled by the bank and companies is a huge issue. Furthermore, because the data is housed on a centralized server, the likelihood of the server being hacked is very high, implying that your data and privacy is at risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blockchain
&lt;/h2&gt;

&lt;p&gt;Blockchain solves major two flaws that are present in traditional client server architecture i.e. data privacy and security of data. Blockchain is a &lt;strong&gt;distributed immutable ledger&lt;/strong&gt; which is completely &lt;strong&gt;transparent.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Let's break down the definition in simple terms. &lt;strong&gt;Distributed&lt;/strong&gt; means that the data is stored in a network of computers, eliminating the need for &lt;strong&gt;centralized servers&lt;/strong&gt;. You can think of &lt;strong&gt;ledgers&lt;/strong&gt; as an account book, keeping track of all the transactions taking place on the blockchain, and it is &lt;strong&gt;immutable&lt;/strong&gt;, meaning that once it is added to the blockchain, it can never be changed.&lt;/p&gt;

&lt;p&gt;Blockchain transactions are &lt;strong&gt;pseudonymous&lt;/strong&gt;, so you can see other people's transactions but not alter the data contained within them. Some cryptocurrencies do allow you to encrypt a data payload or require it by defualt.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Bitcoin Mining
&lt;/h2&gt;

&lt;p&gt;Now that we've covered the fundamentals of blockchain, let's look at how transactions work in the bitcoin protocol. As an example, suppose Bob wishes to send 1BTC to Alice. &lt;/p&gt;

&lt;p&gt;Bob conducts a transaction in order to send money to Alice. The transaction initiated by Bob is initially saved in Mempool (It is an area where all unconfirmed transactions are stored). To add a transaction from mempool to the bitcoin blockchain, miners must first solve a mathematical problem that takes an average of 9 minutes to solve. The miner who solves the mathematical problem first will tell all other miner in the network that it has successfully solved the problem. Now, other miners in the network will first check if the mined block is genuinely from Bob or a hacker attempting to penetrate the chain. After double-checking everything, the transaction is successfully posted to the blockchain, and Alice receives 1BTC from Bob.&lt;/p&gt;

&lt;p&gt;It should be noted that the miner who solves the mathematical problem first will receive a reward or transaction fee in the form of bitocin.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Mathematical Problem
&lt;/h2&gt;

&lt;p&gt;Now that we have a fundamental grasp of mining, let us look at the mathematical problem that miners are solving in order to add it to the bitcoin network.&lt;/p&gt;

&lt;p&gt;When Bob conducted a transaction with Alice, the transaction looked like the one shown below. Each transaction is identified by a Block number, a nonce, data, a previous hash, and a hash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The block number,&lt;/strong&gt; as the name implies, is the current block number that is to be added to the blockchain. &lt;strong&gt;Data&lt;/strong&gt; contains the transaction details of Bob wallet to Alice wallet. In the blockchain, &lt;strong&gt;hashes&lt;/strong&gt; are like fingerprints, and they are used to remember previous blocks. The &lt;strong&gt;previous hash&lt;/strong&gt; contains the hash value of the previous block that is already mined in the blockchain.&lt;/p&gt;

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

&lt;p&gt;Nonce is a variable value or number that the miner can alter to get the proper hash, all other data in the block, such as the block number, data, and previous hash, are immutable by nature and cannot be changed by anyone.&lt;/p&gt;

&lt;h3&gt;
  
  
  SHA 256 Algorithm
&lt;/h3&gt;

&lt;p&gt;When a file is processed by this algorithm, SHA 256 creates an encrypted data file with 64 hexadecimal characters and 4 bits per character.&lt;/p&gt;

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

&lt;p&gt;Hash is generated when we pass block no, data and prev hash &amp;amp; nonce in &lt;strong&gt;SHA 256 algorithm&lt;/strong&gt;. Miners are given a &lt;strong&gt;target value by the bitcoin protocol,&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The hash generated by miners should be less than the bitcoin protocol's target value in order to be successfully added to the blockchain. Miners change the nonce number to generate hash numbers, and the miner who generates the hash that is less than the target value &lt;strong&gt;first&lt;/strong&gt; receives a reward for successfully solving the mathematical problem.&lt;/p&gt;

&lt;p&gt;To explore the demo yourself visit to this website: &lt;a href="https://demoblockchain.org/block" rel="noopener noreferrer"&gt;https://demoblockchain.org/block&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Above is a demonstration of the transaction that we were attempting; you can try it yourself on the website. Be sure to observe how the hash changes when you change the block no, nonce, or data in the block. A change like this prevents hackers from hacking blockchains, which we will discuss in the following sections.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chain Of Blocks
&lt;/h2&gt;

&lt;p&gt;Now that you have a basic understanding of how bitcoin is mined using the SHA 256 algorithm, let's look at how a successfully mined block is added in the blockchain.&lt;/p&gt;

&lt;p&gt;The first block on the blockchain is also known as the Genesis block, and it’s &lt;strong&gt;Previous Hash&lt;/strong&gt;  value is 0. Our Bob and Alice transaction is the third block that has been successfully added, with the previous hash value equal to the value of the second block's hash.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Distributed P2P Networks
&lt;/h2&gt;

&lt;p&gt;Let's zoom out a bit to see how this blockchain is kept on decentralized distributed Peer to Peer networks or P2P networks. &lt;/p&gt;

&lt;p&gt;If one peer in a distributed P2P network requires data, it will contact the peer who has that data stored. The benefit of this P2P network is that it cannot be hacked by a hacker since the data is kept in many locations and if one data is tampered with, the other data will stay safe. We will look at the benefits of p2p in the following section, but first let's see how the successfully minned block of Bob and Alice is stored in p2p networks.&lt;/p&gt;

&lt;p&gt;Let the figure below serve as an example of a P2P network with miners and users.&lt;/p&gt;

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

&lt;p&gt;Consider 'A' to be the miner who, successfully solves the mathematical problem of the transaction between Bob and Alice and adds it to the local blockchain i.e. at block 3. Once uploaded to the blockchain, it will alert the other user on the network of the newly mined block and instruct them to include it in their own block. Below is an animation that will help you visualize it.&lt;/p&gt;

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

&lt;p&gt;The other user will first verify that the block mined by 'A' is correct, and then the block will be successfully added to the blockchain.&lt;/p&gt;

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

&lt;p&gt;When the block is successfully added, our peer-to-peer network will resemble the following image.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bitcoin.org/bitcoin.pdf" rel="noopener noreferrer"&gt;https://bitcoin.org/bitcoin.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ethereum.org/en/whitepaper/" rel="noopener noreferrer"&gt;https://ethereum.org/en/whitepaper/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=6aF6p2VUORE&amp;amp;list=PLgPmWS2dQHW-cdHYZQmpAalgSp-xv_ewY&amp;amp;ab_channel=CodeEater" rel="noopener noreferrer"&gt;YouTube Course In Hindi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.giphy.com%2Fmedia%2Fl4pTjOu0NsrLApt0Q%2Fgiphy.gif%3Fcid%3Decf05e47dtlkk3fe19ovkz96zbsihgjhtu6injewu9oy5v8e%26rid%3Dgiphy.gif%26ct%3Dg" 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%2Fmedia.giphy.com%2Fmedia%2Fl4pTjOu0NsrLApt0Q%2Fgiphy.gif%3Fcid%3Decf05e47dtlkk3fe19ovkz96zbsihgjhtu6injewu9oy5v8e%26rid%3Dgiphy.gif%26ct%3Dg" alt="https://media.giphy.com/media/l4pTjOu0NsrLApt0Q/giphy.gif?cid=ecf05e47dtlkk3fe19ovkz96zbsihgjhtu6injewu9oy5v8e&amp;amp;rid=giphy.gif&amp;amp;ct=g"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, that’s all folks. This was a quick introduction of how cryptocurrency works, and I hope you learned something new from this blog today. If you want to learn in more depth about blockchain and cryptocurrency in general I recommend you following sources mentioned below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/narottam" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.buymeacoffee.com%2Fbutton-api%2F%3Ftext%3DBuy%2520me%2520a%2520coffee%26emoji%3D%26slug%3Dnarottam%26button_colour%3DFFDD00%26font_colour%3D000000%26font_family%3DPoppins%26outline_colour%3D000000%26coffee_colour%3Dffffff"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more such insights, checkout my blog website &lt;a href="http://blog.webdrip.in/" rel="noopener noreferrer"&gt;blog.webdrip.in&lt;/a&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>web3</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Storebay: An E-commerce Application With Custom Admin And Checkout functionality</title>
      <dc:creator>Narottam04</dc:creator>
      <pubDate>Thu, 13 Jan 2022 18:14:13 +0000</pubDate>
      <link>https://forem.com/narottam04/storebay-a-cross-platform-ecommerce-application-android-ios-web-3e4g</link>
      <guid>https://forem.com/narottam04/storebay-a-cross-platform-ecommerce-application-android-ios-web-3e4g</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;Storebay is an E-Commerce platform. It is built on the MERN stack (MongoDB, Express, React, Node js). It has features like a custom admin panel to manage users, PayPal checkout, reviews,android and ios app and more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;E-Commerce &lt;/p&gt;

&lt;h3&gt;
  
  
  Link to Code
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Narottam04" rel="noopener noreferrer"&gt;
        Narottam04
      &lt;/a&gt; / &lt;a href="https://github.com/Narottam04/StoreBay" rel="noopener noreferrer"&gt;
        StoreBay
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &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;MongoDB Atlas Hackathon&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Storebay: A cross-platform ecommerce application [Android, IOS, Web]&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Overview of My Submission&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Storebay is an E-Commerce platform. It is built on the MERN stack (MongoDB, Express, React, Node js). It has features like a custom admin panel to manage users, PayPal checkout, reviews,android and ios app and more.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Submission Category:&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;E-Commerce&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Live Url 🎉🎉🥳&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://storebayapp.herokuapp.com/" rel="nofollow noopener noreferrer"&gt;https://storebayapp.herokuapp.com/&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Main Tech Stack&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;React - For Frontend
Tailwind CSS - For Styling
Node Js, Express - For Backend
PayPal : For Payment
MongoDB Atlas : For Database
MongoDB Atlas Search : For autocomplete search functionality
Capacitor Js: For converting existing web app to android and ios&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Installation Guide&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Step 1: Clone Github Repository&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;git clone https://github.com/Narottam04/StoreBay.git&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Step 2: Install dependencies in backend and frontend
on root of the folder&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c1"&gt;cd&lt;/span&gt; frontend
npm install &lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Step 3 : Add .env&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;NODE_ENV = development/production
PORT = 5000
MONGO_URI = ADD_YOUR_MONGO_URI
JWT_SECRET = ADD_PASSWORD&lt;/pre&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/Narottam04/StoreBay" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Live Url 🎉🎉🥳
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://storebayapp.herokuapp.com/" rel="noopener noreferrer"&gt;https://storebayapp.herokuapp.com/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Main Tech Stack
&lt;/h3&gt;

&lt;p&gt;React - For Frontend&lt;br&gt;
Tailwind CSS - For Styling&lt;br&gt;
Node Js, Express - For Backend&lt;br&gt;
PayPal : For Payment&lt;br&gt;
MongoDB Atlas : For Database &lt;br&gt;
MongoDB Atlas Search : For autocomplete search functionality&lt;br&gt;
Capacitor Js: For converting existing web app to android and ios&lt;/p&gt;

&lt;h2&gt;
  
  
  App Preview &amp;amp; Features
&lt;/h2&gt;

&lt;h4&gt;
  
  
  HomePage
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxl21965gv6biz6v73x2k.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxl21965gv6biz6v73x2k.jpeg" alt="Home Page"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmae1w6ctaop2w85dbqj1.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmae1w6ctaop2w85dbqj1.jpeg" alt="Home Page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Login Page
&lt;/h4&gt;

&lt;p&gt;Login and Sign up is created using Node Js &amp;amp;&amp;amp; MongoDB &lt;/p&gt;

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

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

&lt;h4&gt;
  
  
  Profile Page
&lt;/h4&gt;

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

&lt;h3&gt;
  
  
  Admin Page
&lt;/h3&gt;

&lt;p&gt;Using a custom admin panel, a user can make other users admins, manage products, add new ones, update existing ones, and mark a delivery as successful.&lt;/p&gt;

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

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

&lt;h4&gt;
  
  
  Product overview
&lt;/h4&gt;

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

&lt;h4&gt;
  
  
  Reviews
&lt;/h4&gt;

&lt;p&gt;Each signed in user can only add one review per products.&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Cart
&lt;/h4&gt;

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

&lt;h2&gt;
  
  
  Checkout Process
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Step1
&lt;/h4&gt;

&lt;p&gt;User must add their shipping address for step 1&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Step2
&lt;/h4&gt;

&lt;p&gt;User must choose a payment method. Currently only paypal payment method is working&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Step 3
&lt;/h4&gt;

&lt;p&gt;Step 3 is order summary where you can view your product,shipping and payment details  &lt;/p&gt;

&lt;h4&gt;
  
  
  Step 4 [IMP]
&lt;/h4&gt;

&lt;p&gt;Payment using paypal&lt;/p&gt;

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

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

&lt;p&gt;That's all folks, I hope you enjoy this project&lt;/p&gt;

</description>
      <category>atlashackathon</category>
      <category>react</category>
      <category>mongodb</category>
      <category>node</category>
    </item>
    <item>
      <title>Web 1.0, Web 2.0 &amp; Web3 Explained</title>
      <dc:creator>Narottam04</dc:creator>
      <pubDate>Fri, 24 Dec 2021 12:40:47 +0000</pubDate>
      <link>https://forem.com/narottam04/web-10-web-20-web-30-explained-591n</link>
      <guid>https://forem.com/narottam04/web-10-web-20-web-30-explained-591n</guid>
      <description>&lt;p&gt;We can all agree that the web has changed dramatically over the years, both as a consumer and as a developer. Thanks to advancements in the web, producing attractive websites and applications has never been easier.&lt;/p&gt;

&lt;p&gt;The purpose of this blog post is to explore the past of the web, as well as discuss the potential future of the web, i.e. web 3.0.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Web 1.0 Beta
&lt;/h2&gt;

&lt;p&gt;The concept of hypertext predates the World Wide Web by several decades. However, almost all hypertext systems relied on local files. Tim Berners-Lee wished to develop a system that could work across networks, allowing individuals to link from one file on one machine to another file on another.&lt;/p&gt;

&lt;p&gt;So in December 1990, he coded an app with &lt;strong&gt;Objective-C&lt;/strong&gt; for his next computer system and named it world wide web.&lt;/p&gt;

&lt;p&gt;WorldWideWeb was more than just a file-browsing application. It was both a browser and an editor. &lt;/p&gt;

&lt;p&gt;You can check the first worldwideweb browser: &lt;a href="https://worldwideweb.cern.ch/" rel="noopener noreferrer"&gt;https://worldwideweb.cern.ch/&lt;/a&gt;&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Web 1.0
&lt;/h2&gt;

&lt;p&gt;Web 1.0 was the first stage of the World Wide Web revolution, usually referred to as &lt;strong&gt;read-only web&lt;/strong&gt;. Websites were informational and contained only static content that was hyperlinked together or in simple words there was no CSS, dynamic links, interactivity like logging in the users, comments on the blog posts etc.&lt;/p&gt;

&lt;p&gt;The websites were built using &lt;a href="https://en.wikipedia.org/wiki/Server_Side_Includes" rel="noopener noreferrer"&gt;Server Side Includes&lt;/a&gt; or &lt;a href="https://en.wikipedia.org/wiki/Common_Gateway_Interface" rel="noopener noreferrer"&gt;Common Gateway Interface&lt;/a&gt; (CGI) instead of a web application written in a dynamic programming language such as Perl, PHP, Python or Ruby.&lt;/p&gt;

&lt;p&gt;In the era of Web 1.0 i.e. from 1991 to 2004, users on the internet were &lt;strong&gt;consumers&lt;/strong&gt; of content created by &lt;strong&gt;content creators&lt;/strong&gt;.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Web 2.0
&lt;/h2&gt;

&lt;p&gt;Web 2.0 from 2004 till now, is the second stage of the World Wide Web revolution, usually referred to as &lt;strong&gt;read-write web.&lt;/strong&gt; Emphasis was given to user-generated content, ease of use, participatory culture and interoperability.&lt;/p&gt;

&lt;p&gt;Some of the early platform based on web 2.0 are YouTube, Facebook, Amazon and so on. Due to CMS technologies such as WordPress, blogging, creating a ecommerce shop became extremely popular.&lt;/p&gt;

&lt;p&gt;Web 2.0 brought about a fundamental shift, where people could share their perspectives, opinions, thoughts, and experiences through a variety of online tools and platforms.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Web 2.0 Disadvantages
&lt;/h2&gt;

&lt;p&gt;Before looking at disadvantages let's see how a traditional web 2.0 application works.&lt;/p&gt;

&lt;p&gt;A client(user) will make a HTTP request to the server and if everything is correct it will send back that webpage as a response.&lt;/p&gt;

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

&lt;p&gt;A major flaw here is that all data is stored on a centralized server, controlled by the companies. &lt;/p&gt;

&lt;p&gt;Facebook, Google, and Twitter began storing users data in their servers so that they can serve us better content through machine learning. This in turn would make us stay on their websites longer, therefore providing more ad revenue for these companies.&lt;/p&gt;

&lt;p&gt;The companies eventually started selling our information to advertisers, which meant more money for them!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.bbc.com/news/technology-46618582" rel="noopener noreferrer"&gt;Facebook's data-sharing deals exposed&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To summarize web 2.0 we can say that &lt;strong&gt;users are the product.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Web3
&lt;/h2&gt;

&lt;p&gt;The web3 concept aims to create a decentralized, but secure, internet in which people can securely exchange money and information, without the need for middlemen or big tech companies.&lt;/p&gt;

&lt;p&gt;Unlike Web 2.0 where data is stored in a single database or on a cloud provider, Web 3 applications either runs on blockchain, peer to peer nodes (servers). &lt;/p&gt;

&lt;p&gt;In contrast to web 2.0, where you are the product, some people predict that in web3, you will be the content owner. According to web3 specialists, the corporation will be run by a decentralised group known as a &lt;strong&gt;DAO (Decentralized Autonomous Organization)&lt;/strong&gt; removing the need of CEO’s and upper management in a company. Because your digital identity is not tied to your real identity in web3, you can be anonymous on the internet while still living your usual life.&lt;/p&gt;

&lt;p&gt;An example of web3 application is Obsidian for Whatsapp, Odyessy, LBRY  for YouTube, etc.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Is the buzz surrounding Web3 worth it?
&lt;/h2&gt;

&lt;p&gt;Varied people have different perspectives on this; some believe it is a hoax created by cryptocurrency traders, while others believe it is a real deal. In my opinion, blockchain and web3 are still in an early stage of development and have a long way to go.&lt;/p&gt;

&lt;p&gt;Some valid current arguments as of writings are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The compute and bandwidth problem to scale blockchain. Here is an link to the article about it &lt;a href="https://www.stephendiehl.com/blog/web3-bullshit.html" rel="noopener noreferrer"&gt;https://www.stephendiehl.com/blog/web3-bullshit.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Mining is not eco-friendly and consumes a lot of energy to mine and verify transactions. Here's a Cambridge University article about it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.cisl.cam.ac.uk/resources/sustainability-horizons/september-2019/environmental-footprint-of-cryptocurrency" rel="noopener noreferrer"&gt;https://www.cisl.cam.ac.uk/resources/sustainability-horizons/september-2019/environmental-footprint-of-cryptocurrency&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.business-standard.com/article/pti-stories/bitcoin-use-causing-co2-emissions-comparable-to-las-vegas-study-119071900858_1.html" rel="noopener noreferrer"&gt;https://www.business-standard.com/article/pti-stories/bitcoin-use-causing-co2-emissions-comparable-to-las-vegas-study-119071900858_1.html&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Personal Opinion:&lt;/strong&gt; Creating an unregulated social media platform, such as YouTube or Facebook, where users can add any data but it cannot be erased, could be a double-edged sword. On the one hand, you have freedom of speech, but on the other hand, there may be people publishing explicit content that cannot be deleted by anybody. This can be highly dangerous unless there is a means to check if the information contains explicit content by machine. I would love to hear your opinion on this issue.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ZIv4hb_Swug&amp;amp;ab_channel=Fireship" rel="noopener noreferrer"&gt;Fireship video on early web 1.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=wHTcrmhskto&amp;amp;ab_channel=Fireship" rel="noopener noreferrer"&gt;Fireship video on web 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.stephendiehl.com/blog/web3-bullshit.html" rel="noopener noreferrer"&gt;Article about disadvantages of web 3.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Web_2.0" rel="noopener noreferrer"&gt;Wikipedia web 2.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.giphy.com%2Fmedia%2Fl4pTjOu0NsrLApt0Q%2Fgiphy.gif%3Fcid%3Decf05e47dtlkk3fe19ovkz96zbsihgjhtu6injewu9oy5v8e%26rid%3Dgiphy.gif%26ct%3Dg" 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%2Fmedia.giphy.com%2Fmedia%2Fl4pTjOu0NsrLApt0Q%2Fgiphy.gif%3Fcid%3Decf05e47dtlkk3fe19ovkz96zbsihgjhtu6injewu9oy5v8e%26rid%3Dgiphy.gif%26ct%3Dg" alt="https://media.giphy.com/media/l4pTjOu0NsrLApt0Q/giphy.gif?cid=ecf05e47dtlkk3fe19ovkz96zbsihgjhtu6injewu9oy5v8e&amp;amp;rid=giphy.gif&amp;amp;ct=g"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've been learning about blockchain for about two weeks now, and while I don't believe it is yet at the level where it can transform the entire web, I do find the idea and the conecpt of blockchian and decentralized web intriguing. This is the first post in a series on blockchain, so if you're interested in learning more about this technology, keep a watch out for my article next week, in which I'll explain blockchain using animated gifs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/narottam" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.buymeacoffee.com%2Fbutton-api%2F%3Ftext%3DBuy%2520me%2520a%2520coffee%26emoji%3D%26slug%3Dnarottam%26button_colour%3DFFDD00%26font_colour%3D000000%26font_family%3DPoppins%26outline_colour%3D000000%26coffee_colour%3Dffffff"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more such insights, checkout my blog website &lt;a href="http://blog.webdrip.in/" rel="noopener noreferrer"&gt;blog.webdrip.in&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>blockchain</category>
      <category>web3</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How JavaScript Works🔥 🤖 [Visually Explained]</title>
      <dc:creator>Narottam04</dc:creator>
      <pubDate>Thu, 09 Sep 2021 12:39:39 +0000</pubDate>
      <link>https://forem.com/narottam04/how-javascript-works-visually-explained-269j</link>
      <guid>https://forem.com/narottam04/how-javascript-works-visually-explained-269j</guid>
      <description>&lt;p&gt;JavaScript is one of the most loved and hated languages in the world. It is loved because it is potent. You can make a full-stack application by just learning JavaScript and nothing else. It is also hated because it behaves in unexpected and upsetting ways, which, if you're not invested in understanding the language, might make you hate it 💔.&lt;/p&gt;

&lt;p&gt;This blog will explain how JavaScript executes code in the browser, and we will learn it through animated gifs 😆. After reading this blog, you will be one step closer to become a Rockstar Developer 🎸😎&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/EA4ZexjGOnfP2/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/EA4ZexjGOnfP2/giphy.gif" alt="https://media.giphy.com/media/EA4ZexjGOnfP2/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Execution Context
&lt;/h2&gt;

&lt;p&gt;"&lt;strong&gt;Everything in JavaScript happens inside an Execution Context."&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I want everyone to remember this statement as it is essential. You can assume this Execution context to be a big container, invoked when the browser wants to run some JavaScript code.&lt;/p&gt;

&lt;p&gt;In this container, there are two components 1. Memory component  2. Code component&lt;/p&gt;

&lt;p&gt;Memory component is also known as variable environment. In this memory component, variables and functions are stored as key-value pairs.&lt;/p&gt;

&lt;p&gt;Code component is a place in the container where code is executed one line at a time. This code component also has a fancy name, namely 'Thread of Execution'. I think it sounds cool!&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;JavaScript is a synchronous, single-threaded language.&lt;/strong&gt; It is because it can only execute one command at a time and in a specific order.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Execution of the code
&lt;/h2&gt;

&lt;p&gt;Let's take a simple example,&lt;/p&gt;

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

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;a&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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&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;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&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;sum&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;In this simple example, we initialize two variables, a and b and store 2 and 4, respectively.&lt;/p&gt;

&lt;p&gt;Then we add the value of &lt;strong&gt;a&lt;/strong&gt; and &lt;strong&gt;b&lt;/strong&gt; and store it in the &lt;strong&gt;sum&lt;/strong&gt; variable.&lt;/p&gt;

&lt;p&gt;Let's see how JavaScript will execute the code in the browser 🤖&lt;/p&gt;

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

&lt;p&gt;The browser creates a global execution context with two components, namely memory and code components.&lt;/p&gt;

&lt;p&gt;The Browser will execute the JavaScript code in two-phase&lt;/p&gt;

&lt;p&gt;1&amp;gt; Memory Creation Phase&lt;/p&gt;

&lt;p&gt;2&amp;gt; Code Execution Phase&lt;/p&gt;

&lt;p&gt;In the memory creation phase, JavaScript will scan through all the code and allocate memory to all the variables and functions in the code. For variables, JavaScript will store undefined in the memory creation phase, and for functions, it will keep the entire function code, which we will be looking at the following example.&lt;/p&gt;

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

&lt;p&gt;Now, in the 2nd phase, i.e. code execution, it starts going through the whole code line by line.&lt;/p&gt;

&lt;p&gt;As it encounters &lt;strong&gt;var a = 2,&lt;/strong&gt; it assigns 2 to 'a' in memory. Until now, the value of 'a' was undefined.&lt;/p&gt;

&lt;p&gt;Similarly, it does the same thing for the b variable. It assigns 4 to 'b'. Then it calculates and stores the value of the sum in memory which is 6. Now, in the last step, it prints the sum value in the console and then destroys the global execution context as our code is finished.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Functions Are Called In Execution Context?
&lt;/h2&gt;

&lt;p&gt;Functions in JavaScript, when you compare with other programming languages, work differently.&lt;/p&gt;

&lt;p&gt;Let's take an simple example,&lt;/p&gt;

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

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;n&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;ans&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;num&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;ans&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;square2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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;square4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;square&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&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 example has an function which takes an argument of type number and returns the square of the number.&lt;/p&gt;

&lt;p&gt;JavaScript will create a global execution context and allocate memory to all the variables and functions in the first phase when we run the code, as shown below.&lt;/p&gt;

&lt;p&gt;For functions, It will store the entire function in the memory.&lt;/p&gt;

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

&lt;p&gt;Here comes the exciting part, When JavaScript runs functions, it will create an execution context inside the global execution context.&lt;/p&gt;

&lt;p&gt;As it encounters var a = 2, it assigns 2 to 'n' in memory. Line number 2 is a function, and as the function has been allocated memory in the memory execution phase, it will directly jump to line number 6.&lt;/p&gt;

&lt;p&gt;square2 variable will invoke the square function, and javascript will create a new execution context.&lt;/p&gt;

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

&lt;p&gt;This new execution context for the square function will assign memory to all the variables present in the function in the memory creation phase.&lt;/p&gt;

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

&lt;p&gt;After assigning memory to all the variables inside the function, it will execute the code line by line. It will get the value of num, which is equal to 2 for the first variable and then it will calculate ans. After ans has been calculated, it will return the value which will be assigned to square2.&lt;/p&gt;

&lt;p&gt;Once the function returns the value, it will destroy its execution context as it has completed the work.&lt;/p&gt;

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

&lt;p&gt;Now it will follow a similar procedure for line number 7 or square4 variable, as shown below.&lt;/p&gt;

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

&lt;p&gt;Once all the code is executed, the global execution context will also be destroyed, and this is how JavaScript will execute the code behind the scene.&lt;/p&gt;

&lt;h2&gt;
  
  
  Call Stack
&lt;/h2&gt;

&lt;p&gt;When a function is invoked in JavaScript, JavaScript creates an execution context. Execution context will get complicated as we nest functions inside a function.&lt;/p&gt;

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

&lt;p&gt;JavaScript manages code execution context creation and deletion with the the help of Call Stack.&lt;/p&gt;

&lt;p&gt;A stack (sometimes called a “push-down stack”) is an ordered collection of items where the addition of new items and the removal of existing items always takes place at the same end eg. stack of books.&lt;/p&gt;

&lt;p&gt;Call Stack is a mechanism to keep track of its place in a script that calls multiple functions.&lt;/p&gt;

&lt;p&gt;Let's take an example&lt;/p&gt;

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

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;a&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;insideA&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;insideA&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;a&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;We are creating a function 'a', which calls another function 'insideA' that returns true. I know the code is dumb and doesn't do anything, but it will help us understand how JavaScript handles callback functions.&lt;/p&gt;

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

&lt;p&gt;JavaScript will create a global execution context. Global execution context will assign memory to function 'a' and invoke' function a' in the code execution phase.&lt;/p&gt;

&lt;p&gt;An execution context is created for function a, which is placed above the global execution context in the call stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Function a&lt;/strong&gt; will assign memory and invoke function &lt;strong&gt;insideA.&lt;/strong&gt; An execution context is created for &lt;strong&gt;function insideA&lt;/strong&gt; and placed above the call stack of 'function a'.&lt;/p&gt;

&lt;p&gt;Now, this insideA function will return true and will be removed from the call stack.&lt;/p&gt;

&lt;p&gt;As there is no code inside 'function a' execution context will be removed from the call stack.&lt;/p&gt;

&lt;p&gt;Finally, the global execution context is also removed from the call stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=pN6jk0uUrD8&amp;amp;list=PLlasXeu85E9cQ32gLCvAvr9vNaUccPVNP&amp;amp;ab_channel=AkshaySaini" rel="noopener noreferrer"&gt;Namaste JavaScript Playlist on YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.giphy.com%2Fmedia%2Fl4pTjOu0NsrLApt0Q%2Fgiphy.gif%3Fcid%3Decf05e47dtlkk3fe19ovkz96zbsihgjhtu6injewu9oy5v8e%26rid%3Dgiphy.gif%26ct%3Dg" 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%2Fmedia.giphy.com%2Fmedia%2Fl4pTjOu0NsrLApt0Q%2Fgiphy.gif%3Fcid%3Decf05e47dtlkk3fe19ovkz96zbsihgjhtu6injewu9oy5v8e%26rid%3Dgiphy.gif%26ct%3Dg" alt="https://media.giphy.com/media/l4pTjOu0NsrLApt0Q/giphy.gif?cid=ecf05e47dtlkk3fe19ovkz96zbsihgjhtu6injewu9oy5v8e&amp;amp;rid=giphy.gif&amp;amp;ct=g"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this post was informative. 💪🏾 Feel free to reach out to me if you have any questions. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/narottam" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.buymeacoffee.com%2Fbutton-api%2F%3Ftext%3DBuy%2520me%2520a%2520coffee%26emoji%3D%26slug%3Dnarottam%26button_colour%3DFFDD00%26font_colour%3D000000%26font_family%3DPoppins%26outline_colour%3D000000%26coffee_colour%3Dffffff"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more such insights, checkout my blog website &lt;a href="http://blog.webdrip.in/" rel="noopener noreferrer"&gt;blog.webdrip.in&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>100+ Free Illustration Resources For Your Next Personal or Clients Project</title>
      <dc:creator>Narottam04</dc:creator>
      <pubDate>Sat, 31 Jul 2021 03:24:38 +0000</pubDate>
      <link>https://forem.com/narottam04/100-free-illustration-resources-for-your-next-personal-or-clients-project-36ll</link>
      <guid>https://forem.com/narottam04/100-free-illustration-resources-for-your-next-personal-or-clients-project-36ll</guid>
      <description>&lt;p&gt;Hey Folks, I have written this same blog with &lt;strong&gt;preview of each illustration website and license&lt;/strong&gt; on my blog website &lt;a href="http://blog.webdrip.in" rel="noopener noreferrer"&gt;blog.webdrip.in&lt;/a&gt; &lt;/p&gt;

&lt;h4&gt;
  
  
  Link to the post: &lt;a href="https://blog.webdrip.in/posts/2021-04-29--30-free-illustration-resources-for-your-next-project/" rel="noopener noreferrer"&gt;https://blog.webdrip.in/posts/2021-04-29--30-free-illustration-resources-for-your-next-project/&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;If you liked my blog please checkout my blog website, I hope this resources would be helpful for your future projects ❤️&lt;/p&gt;

&lt;p&gt;If you find any free illustrations resources that you want to add and if there is any mistake in this blog post, you can comment down or email me at &lt;a href="mailto:blog@webdrip.in"&gt;blog@webdrip.in&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's start with the speed of the rocket🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  A
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://absurd.design/" rel="noopener noreferrer"&gt;Absurd Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://avataaars.com/" rel="noopener noreferrer"&gt;Avataaars&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.artify.co/" rel="noopener noreferrer"&gt;Artify&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  B
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.uistore.design/items/bam-free-3d-illustration-kit/" rel="noopener noreferrer"&gt;BAM Free 3D Illustration Kit&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://bigheads.io/" rel="noopener noreferrer"&gt;Bigheads&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.blackillustrations.com/" rel="noopener noreferrer"&gt;Black Illustration&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://blush.design/" rel="noopener noreferrer"&gt;Blush&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.bypeople.com/3d-illustrations/" rel="noopener noreferrer"&gt;ByPeople&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  C
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://control.rocks/" rel="noopener noreferrer"&gt;Control&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://iconscout.com/illustration-pack/christmas-2333" rel="noopener noreferrer"&gt;Christmas Free Illustration Pack&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  D
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://drawer.design/" rel="noopener noreferrer"&gt;Drawer&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://delesign.com/free-designs/graphics" rel="noopener noreferrer"&gt;Delesign&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.drawkit.io/" rel="noopener noreferrer"&gt;DrawKit&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://dribbble.com/shots/8934409-Diversity-Avatars" rel="noopener noreferrer"&gt;Diversity Avatars&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  E
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.uistore.design/items/empty-states-illustrations-for-sketch/" rel="noopener noreferrer"&gt;Empty States Illustrations for Sketch&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://error404.fun/" rel="noopener noreferrer"&gt;Error 404 Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  F
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://freebiesketch.com/category/illustrations/" rel="noopener noreferrer"&gt;FreebieSketch&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://flowlava.club/" rel="noopener noreferrer"&gt;Flow Lava&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/890095002328610853" rel="noopener noreferrer"&gt;FIGMA: SALY - 3D Illustration Pack&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/883778082594341562" rel="noopener noreferrer"&gt;FIGMA: Free 75 illustrations - Surface&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/829741575478342595" rel="noopener noreferrer"&gt;Figma: Avatar Illustration System&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/810922307190314237" rel="noopener noreferrer"&gt;Figma: illlustrations by realvjy&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/882513090157409891" rel="noopener noreferrer"&gt;Figma: Hitu Illustration Components&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/876023595502873887/Free-Bot-Avatar" rel="noopener noreferrer"&gt;Figma: Free Bot Avatar&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/881358461963645496/Custom-Avatar" rel="noopener noreferrer"&gt;Figma: Custom Avatar&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/844269232355884415/%F0%9F%92%A5-Vector-Illustrations" rel="noopener noreferrer"&gt;Figma: 💥 Vector Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/800912493498815197/Kyute-Avatars" rel="noopener noreferrer"&gt;Figma: Kyute Avatars&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/836380742196099239/Work-From-Home---Illustration-Kit" rel="noopener noreferrer"&gt;Figma: Work From Home - Illustration Kit&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/878430112597592463/Chat-(illustration)" rel="noopener noreferrer"&gt;Figma: Chat (illustration)&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/898410101241932232/Ghost-Agency---Ghost-Illustration-Kit" rel="noopener noreferrer"&gt;Figma: Ghost Agency - Ghost Illustration Kit&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/832551251669576735/%5BOrbit-Design-System%5D-Illustrations" rel="noopener noreferrer"&gt;Figma: [Orbit Design System] Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/874561187582459048/GEE!-ME-100-Characters-Pack" rel="noopener noreferrer"&gt;Figma: GEE! ME 100 Characters Pack&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/831316839307231218/Collaborative-Illustrations" rel="noopener noreferrer"&gt;Figma: Collaborative Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/842868033579190617/Isometric-Tents-Poster" rel="noopener noreferrer"&gt;Figma: Isometric Tents Poster&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/886097423990855480/Course-Illustrations" rel="noopener noreferrer"&gt;Figma: Course Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/878203932252854662/IntraIcons-vol-1" rel="noopener noreferrer"&gt;Figma: IntraIcons vol 1&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/838544788853042422/Hand-Illustrations" rel="noopener noreferrer"&gt;Figma: Hand Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/834210307944210537/Animal-Crossing-Character-Maker" rel="noopener noreferrer"&gt;Figma: Animal Crossing Character Maker&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/879663362976925122/Hand-Illustration" rel="noopener noreferrer"&gt;Figma: Hand Illustration&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/814594693724546379/Travel-Vignettes" rel="noopener noreferrer"&gt;Figma: Travel Vignettes&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/879321992549492147/Space-Rocket" rel="noopener noreferrer"&gt;Figma: Space Rocket&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/918750461104375244/flat-illustration" rel="noopener noreferrer"&gt;Figma: flat illustration&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/965999745884481436/3D-Workspace" rel="noopener noreferrer"&gt;Figma: 3D Workspace&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/966199982810283152/Croodles---Doodle-your-face" rel="noopener noreferrer"&gt;Figma: Croodles - Doodle your face&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/964416492056128322/Threedy-illustrations" rel="noopener noreferrer"&gt;Figma: Threedy illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/944127198658531074/Free-3D-illustration-pack(made-with-Figma)" rel="noopener noreferrer"&gt;Figma: Free 3D illustration pack(made with Figma)&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/944629175945572126/21-Illustrations-for-Transforming-Art-Exercises" rel="noopener noreferrer"&gt;Figma: 21 Illustrations for Transforming Art Exercises&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/946319887275328365/Free-6-illustrations---Peeple" rel="noopener noreferrer"&gt;Figma: Free 6 illustrations - Peeple&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/946569165254852480" rel="noopener noreferrer"&gt;Figma: Inclusive Design illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/968779488773270516" rel="noopener noreferrer"&gt;Figma: Doctor/medical ILLUSTRATION&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/936540776354146650/Splash-Screen-Online-Course-UI-KIT-(FREEBIES)" rel="noopener noreferrer"&gt;Figma: Splash Screen Online Course UI KIT (FREEBIES)&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/954030554372094309/3D-Gadgets-Collection-(Freebie)" rel="noopener noreferrer"&gt;Figma: 3D Gadgets Collection (Freebie)&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/948550175340288024/50%2B-Free-Indian-Character-Illustrations" rel="noopener noreferrer"&gt;Figma: 50+ Free Indian Character Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/967725953534715486/Trad-Illustration-pack" rel="noopener noreferrer"&gt;Figma: Trad Illustration pack&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/937060221263018358/3D-Illustration-Kit-(Freebie)" rel="noopener noreferrer"&gt;Figma: 3D Illustration Kit (Freebie)&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/946737636746247057/Businessman-Billy-3D-JPG" rel="noopener noreferrer"&gt;Figma: Businessman Billy 3D JPG&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/920149365405377059/People-illustrations---Artitor" rel="noopener noreferrer"&gt;Figma: People illustrations - Artitor&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/921343110001149556/Startupist-Free-illustrations" rel="noopener noreferrer"&gt;Figma: Startupist Free illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/930945729840272411/Illustrations-for-different-projects%2C-vector-graphics" rel="noopener noreferrer"&gt;Figma: Illustrations for different projects, vector graphics&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/930980690328560670/Nice-people---characters-and-elements" rel="noopener noreferrer"&gt;Figma: Nice People&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.figma.com/community/file/865151903316043704/Vector-Character-Illustrations" rel="noopener noreferrer"&gt;Figma: Vector Character Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  G
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.getillustrations.com/illustration-packs" rel="noopener noreferrer"&gt;Getillustrations.com&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  H
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.handz.design/" rel="noopener noreferrer"&gt;Handz&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.uistore.design/items/halftone-free-illustrations/" rel="noopener noreferrer"&gt;Halftone Free Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://wannathis.one/humans" rel="noopener noreferrer"&gt;Humans&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://icons8.com/l/3d-hands/#buy-fun" rel="noopener noreferrer"&gt;Handy 3D Hands&lt;/a&gt;
&lt;/h2&gt;

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

&lt;h2&gt;
  
  
  I
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://icons8.com/illustrations" rel="noopener noreferrer"&gt;Icons8&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://interfacer.xyz/" rel="noopener noreferrer"&gt;Interfacer&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://iradesign.io/gallery/illustrations" rel="noopener noreferrer"&gt;IRA Design&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://isometriclove.com/" rel="noopener noreferrer"&gt;Isometriclove&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://iconscout.com/illustration-pack/indian-doodle" rel="noopener noreferrer"&gt;Indian Doodle Illustration Pack&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  K
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://wannathis.one/kukla-kit#Download" rel="noopener noreferrer"&gt;Kukla Kit&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.kapustin.co/" rel="noopener noreferrer"&gt;Kasputin.co&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  L
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://lukaszadam.com/illustrations" rel="noopener noreferrer"&gt;Lukasz Adam&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://lucid.pixsellz.io/" rel="noopener noreferrer"&gt;Lucid Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  M
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.manypixels.co/gallery" rel="noopener noreferrer"&gt;ManyPixels&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  N
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://growwwkit.com/illustrations/neighbour-larry/" rel="noopener noreferrer"&gt;Neighbour Larry&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  O
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.openpeeps.com/" rel="noopener noreferrer"&gt;Open Peeps&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.opendoodles.com/" rel="noopener noreferrer"&gt;Open Doodles&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  P
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://pixabay.com/illustrations/search/?order=ec" rel="noopener noreferrer"&gt;Pixabay&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://growwwkit.com/illustrations/phonies/" rel="noopener noreferrer"&gt;Phonies&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;a href="https://powerpeopleplatform.com/" rel="noopener noreferrer"&gt;PowerPeoplePlatform&lt;/a&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.pixeltrue.com/free-illustrations" rel="noopener noreferrer"&gt;Pixeltrue&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  R
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.manuelalangella.com/retroooo-folks/" rel="noopener noreferrer"&gt;Retroooo Folks Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  S
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://usesmash.com/" rel="noopener noreferrer"&gt;Smash&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://storyset.com/" rel="noopener noreferrer"&gt;Stroyset&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://sapiens.ui8.net/6f3c3c2" rel="noopener noreferrer"&gt;Sapiens Character Free Illustration Builder&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://superscene.pro/" rel="noopener noreferrer"&gt;Superscene&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://stubborn.fun/" rel="noopener noreferrer"&gt;Stubborn Generator&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://storytale.io/packages/slam/" rel="noopener noreferrer"&gt;Slam&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://weareskribbl.com/?ref=uistore.design" rel="noopener noreferrer"&gt;Skribbl&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://icons8.com/l/zombie-hands/" rel="noopener noreferrer"&gt;Scary 3D Hands for Halloween&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  T
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://amritpaldesign.com/toy-faces" rel="noopener noreferrer"&gt;Toy Faces Library&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.behance.net/gallery/111365565/THIS-IS-CHLOE" rel="noopener noreferrer"&gt;This is Chloe&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.behance.net/gallery/115536601/THIS-IS-OLIVER?tracking_source=project_owner_other_projects" rel="noopener noreferrer"&gt;This is Oliver&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.thedoodlelibrary.com/" rel="noopener noreferrer"&gt;The Doodle Library&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  U
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.uihut.com/market?tab=4&amp;amp;isPattern=0" rel="noopener noreferrer"&gt;UI HUT&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://undraw.co/" rel="noopener noreferrer"&gt;unDraw&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  W
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.ls.graphics/illustrations/whoosh" rel="noopener noreferrer"&gt;Whoosh! - Funny illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.whoooa.rocks/?ref=uistore.design" rel="noopener noreferrer"&gt;Whoooa Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Y
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.uistore.design/items/your-home-helper-free-illustrations-pack-for-figma/" rel="noopener noreferrer"&gt;Your Home Helper - Free Illustrations Pack&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Numbers:
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://3ddd.casa/" rel="noopener noreferrer"&gt;3ddd&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.uistore.design/items/free-remote-work-illustrations/" rel="noopener noreferrer"&gt;25+ Free Remote Work Illustrations&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.behance.net/gallery/100566979/3D-Pandemic-Icon-Pack-Free-Download" rel="noopener noreferrer"&gt;3D Pandemic Icon Pack - Free Download&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.shapefest.com/expansions/3000-hands" rel="noopener noreferrer"&gt;3000 Hands Shapefest&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://amritpaldesign.com/3d-rooms-project" rel="noopener noreferrer"&gt;3D Rooms Project&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/narottam" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.buymeacoffee.com%2Fbutton-api%2F%3Ftext%3DBuy%2520me%2520a%2520coffee%26emoji%3D%26slug%3Dnarottam%26button_colour%3DFFDD00%26font_colour%3D000000%26font_family%3DPoppins%26outline_colour%3D000000%26coffee_colour%3Dffffff"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get more insights and resources like this on my blog, &lt;a href="https://blog.webdrip.in" rel="noopener noreferrer"&gt;https://blog.webdrip.in&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>design</category>
      <category>programming</category>
      <category>css</category>
    </item>
  </channel>
</rss>
