<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: langford</title>
    <description>The latest articles on DEV Community by langford (@langf00rd).</description>
    <link>https://dev.to/langf00rd</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%2F702128%2F03754063-1241-4fba-9a5a-965aa3c87119.jpg</url>
      <title>DEV Community: langford</title>
      <link>https://dev.to/langf00rd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/langf00rd"/>
    <language>en</language>
    <item>
      <title>a platform for creating sales voice agents for businesses</title>
      <dc:creator>langford</dc:creator>
      <pubDate>Sat, 26 Jul 2025 22:23:28 +0000</pubDate>
      <link>https://dev.to/langf00rd/a-platform-for-creating-sales-voice-agents-for-businesses-203a</link>
      <guid>https://dev.to/langf00rd/a-platform-for-creating-sales-voice-agents-for-businesses-203a</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/assemblyai-2025-07-16"&gt;AssemblyAI Voice Agents Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;i built a platform that lets businesses create AI sales reps (voice agents) that can hold near-real-time conversations, pitch products/services, collect customer information, and answer relevant questions&lt;/p&gt;

&lt;p&gt;the voice agent can be embedded into a website as a widget and users can trigger a conversation via a floating action button&lt;/p&gt;

&lt;p&gt;each agent is provided with domain-specific knowledge tailored to the business, ensuring that responses stay accurate. these agents aren’t just chatbots, instead, they act as an extension of the business, using preconfigured behavior, and product/service expertise defined by the business&lt;/p&gt;

&lt;p&gt;the app shows usage analytics as well as summarized conversations with extracted information like lead quality, customer information and intent, as well as next steps the business can take based on the conversation between user and ai sales agent&lt;/p&gt;

&lt;p&gt;this project falls primarily under the business automation and domain expert prompt categories&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;app link: &lt;a href="https://aivoiceagentthing.duckdns.org" rel="noopener noreferrer"&gt;click here&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%2F7w28185lsscuo15qh4j3.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%2F7w28185lsscuo15qh4j3.png" alt="embed script generation" width="800" height="458"&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%2F6ns9jak6umev0wr6pb93.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%2F6ns9jak6umev0wr6pb93.png" alt="random website with embedded script tag" width="800" height="458"&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%2Fww6su9o5jj2ccl0uzqux.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%2Fww6su9o5jj2ccl0uzqux.png" alt="agent running on random website" width="800" height="783"&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%2Fbo8d6bli0n49isma9jr0.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%2Fbo8d6bli0n49isma9jr0.png" alt="conversation analytics &amp;amp; summary" width="800" height="438"&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%2Flbfyj94uv9f4n55ns957.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%2Flbfyj94uv9f4n55ns957.png" alt="full conversation transcript on dashboard" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/langf00rd/ai-audio-agent-engine" rel="noopener noreferrer"&gt;click here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Implementation &amp;amp; AssemblyAI Integration
&lt;/h2&gt;

&lt;p&gt;the frontend is built with Next.js with Tailwind CSS, and the backend is in Node.js, Express, PostgreSQL and the AssemblyAI SDK&lt;/p&gt;

&lt;p&gt;AssemblyAI’s Universal-Streaming API powers real-time voice transcription via WebSockets. The low-latency transcription it provides is essential for delivering almost instantaneous transcriptions&lt;/p&gt;

&lt;p&gt;after a successful web socket connection is made, the app connects to Assembly's transcriber and pipes audio from the frontend to a transcriber stream&lt;/p&gt;

&lt;p&gt;here is a sample nodejs code for connecting to Assembly AI via a websocket:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AssemblyAI&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;assemblyai&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ffmpeg&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fluent-ffmpeg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;PassThrough&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Readable&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;stream&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handleWebSocketConnection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;AssemblyAI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ASSEMBLY_AI_API_KEY&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;transcriber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;streaming&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;transcriber&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;sampleRate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="nx"&gt;_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;


  &lt;span class="nx"&gt;transcriber&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;turn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;turn&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;turn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transcript&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;transcript&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;turn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transcript&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;transcriber&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inputStream&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PassThrough&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;ffmpegProcess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ffmpeg&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;inputStream&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;inputFormat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;webm&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="nf"&gt;audioFrequency&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;16000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;audioChannels&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;audioCodec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pcm_s16le&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="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;s16le&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="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;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;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ffmpeg error:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;Readable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toWeb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ffmpegProcess&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;pipeTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;transcriber&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

  &lt;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;inputStream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&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;span class="nx"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;close&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;inputStream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;transcriber&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;once transcription is received, it's sent to an llm that generates appropriate responses based on predefined context. any response from the llm is read out loud in human voice using amazon polly's predefined voices&lt;/p&gt;

&lt;p&gt;that's all for now. cheers!&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%2F26kdmjxchjbpvjxq0byk.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%2F26kdmjxchjbpvjxq0byk.gif" alt="thank you gif" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>assemblyaichallenge</category>
      <category>ai</category>
      <category>api</category>
    </item>
    <item>
      <title>Learning the Fundamentals of Web3 and Blockchain Development</title>
      <dc:creator>langford</dc:creator>
      <pubDate>Fri, 17 Feb 2023 16:27:04 +0000</pubDate>
      <link>https://dev.to/langf00rd/learning-the-fundamentals-of-web3-and-blockchain-development-3cbj</link>
      <guid>https://dev.to/langf00rd/learning-the-fundamentals-of-web3-and-blockchain-development-3cbj</guid>
      <description>&lt;p&gt;Are you a programmer interested in learning more about blockchain technology? You have come to the perfect spot!&lt;/p&gt;

&lt;p&gt;Blockchain technology and its associated web3 protocols offer an exciting and powerful way to create, store and use digital assets. But before you can start building on the blockchain, you must first understand the basics.&lt;/p&gt;

&lt;p&gt;The first step to learning the fundamentals of blockchain and web3 development is to understand the underlying technology. Blockchain is a distributed ledger technology that allows for a secure and immutable digital ledger. It is composed of a network of computers that are connected to each other and can securely store, update and transfer data. This distributed nature of the blockchain makes it incredibly resilient and secure, as the data stored on the blockchain is difficult to corrupt or tamper with.&lt;/p&gt;

&lt;p&gt;Once you have a basic understanding of blockchain technology, the next step is to learn about web3 protocols. Web3 protocols are the protocols and standards that allow for the development and deployment of blockchain-based applications. They provide the necessary tools and frameworks for developers to create, deploy and manage decentralized applications. &lt;/p&gt;

&lt;p&gt;Once you are familiar with the basics of blockchain and web3 development, the next step is to learn the specific programming languages used for blockchain development. The most common languages used for blockchain development are Solidity and JavaScript, both of which are powerful and versatile programming languages.&lt;/p&gt;

&lt;p&gt;Finally, you will need to learn the basics of developing and deploying smart contracts on the blockchain. Smart contracts are pieces of code that are stored on the blockchain and can be used to facilitate transactions and other behaviors. Learning the fundamentals of smart contract development will go a long way in your pursuit of becoming a blockchain developer.&lt;/p&gt;

&lt;p&gt;Learning the fundamentals of blockchain and web3 development is a challenging but rewarding endeavor. With some dedication and hard work, you can become a proficient blockchain developer and begin building powerful applications on the blockchain.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How Blogging Can Boost Your Career as a Developer</title>
      <dc:creator>langford</dc:creator>
      <pubDate>Fri, 30 Dec 2022 14:31:26 +0000</pubDate>
      <link>https://dev.to/langf00rd/how-blogging-can-boost-your-career-as-a-developer-2dcl</link>
      <guid>https://dev.to/langf00rd/how-blogging-can-boost-your-career-as-a-developer-2dcl</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Ah, blogging - that old but surprisingly helpful pastime. If you're a developer, blogging can be an incredibly rewarding activity. It can help you hone your skills and learn new technologies and also allow you to make some extra passive income! So, let's get to it! In this article, we'll cover the many benefits of blogging for developers and provide tips for getting started.&lt;/p&gt;

&lt;h1&gt;
  
  
  Benefits of Blogging for Developers
&lt;/h1&gt;

&lt;p&gt;Developers have a lot to gain by blogging. Here are some of the key benefits you can experience:&lt;/p&gt;

&lt;h2&gt;
  
  
  Enhancing Your Skills and Knowledge
&lt;/h2&gt;

&lt;p&gt;One of the most significant advantages of blogging as a developer is that it can help you hone your skills and learn new technologies. That's because blogging is a great way to stay up to date with industry trends, network with other professionals, and get a better understanding of what's going on in the tech world.&lt;/p&gt;

&lt;p&gt;Furthermore, you can expand your knowledge base and become an expert by writing about technology topics. This can help you stand out from the crowd and make you a more attractive hire for employers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Increasing Visibility and Credibility
&lt;/h2&gt;

&lt;p&gt;Blogging is also great for increasing your visibility and credibility in the tech community. By creating a portfolio of work that showcases your abilities, you can prove to potential employers or clients that you know what you're doing.&lt;/p&gt;

&lt;p&gt;Additionally, you can make yourself known to a larger audience by connecting with other professionals and industry experts. This can lead to exciting opportunities you otherwise wouldn't have access to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generating Passive Income Opportunities
&lt;/h2&gt;

&lt;p&gt;Finally, blogging can be a great way to generate passive income. You can create monetized content, leverage affiliate marketing opportunities, and even build an audience to market your content. This can be a great way to make some money on the side.&lt;/p&gt;

&lt;h1&gt;
  
  
  Tips for Getting Started with Blogging as a Developer
&lt;/h1&gt;

&lt;p&gt;Now that you know the benefits of blogging for developers, here are some tips for getting started:&lt;/p&gt;

&lt;p&gt;Decide on a topic and create a plan for your blog posts.&lt;/p&gt;

&lt;p&gt;Choose the right platform for hosting your blog and decide on the design elements you want to include.&lt;/p&gt;

&lt;p&gt;Promote your blog posts on social media platforms and other channels to reach more people.&lt;/p&gt;

&lt;p&gt;Make sure you are consistent in creating content and engaging with readers.&lt;/p&gt;

&lt;p&gt;Use SEO tactics to help your blog posts rank higher in search engine results pages.&lt;/p&gt;

&lt;p&gt;Track your progress by measuring key metrics such as page views, time spent on the page, etc., so you can adjust your strategy accordingly.&lt;/p&gt;

&lt;p&gt;Leverage guest blogging opportunities to increase your reach and establish yourself as an authority in the field.&lt;/p&gt;

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

&lt;p&gt;As you can see, blogging can be an excellent way for developers to enhance their skills, increase their visibility and credibility, and even make some extra money. So, get those creative juices flowing and start blogging today! With the right strategy and commitment, you, too, can start blogging and see the benefits for yourself.&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
      <category>community</category>
    </item>
    <item>
      <title>5 Tips for Advancing Your Career as a Developer</title>
      <dc:creator>langford</dc:creator>
      <pubDate>Mon, 26 Dec 2022 16:58:20 +0000</pubDate>
      <link>https://dev.to/langf00rd/5-tips-for-advancing-your-career-as-a-developer-45d1</link>
      <guid>https://dev.to/langf00rd/5-tips-for-advancing-your-career-as-a-developer-45d1</guid>
      <description>&lt;p&gt;Photo by Fotis Fotopoulos on UnsplashIt is essential for you, as a developer, to constantly strive for career advancement and remain up to date on the most recent technologies and best practices. This article will offer five suggestions to help you advance in your development career.&lt;/p&gt;

&lt;h2&gt;
  
  
  #1 Invest in ongoing education
&lt;/h2&gt;

&lt;p&gt;Continuing education is one of the most important things you can do to advance your career as a developer. You can practice and use your skills in various ways by taking online courses, attending conferences and workshops, and working on personal projects. If you want to remain competitive and valuable to potential employers, you must keep up with the changes in the technology industry.&lt;/p&gt;

&lt;h2&gt;
  
  
  #2 Network and develop relationships
&lt;/h2&gt;

&lt;p&gt;Networking and developing relationships with industry professionals can significantly benefit your development career. Not only can it assist you in finding employment opportunities, but it can also offer you expert guidance and mentorship. Joining online communities, attending meetups and conferences, and participating in hackathons are all ways to build your network.&lt;/p&gt;

&lt;h2&gt;
  
  
  #3 Participate in open-source projects
&lt;/h2&gt;

&lt;p&gt;Being a part of open-source projects is a great way to learn new skills, improve your portfolio, and help the community. You can collaborate with other developers on real-world projects and receive feedback from industry veterans through open-source projects. It's also a great way to show potential employers your skills. You can search for open-source projects on websites like GitHub and GitLab or contribute to projects you already use to get involved.&lt;/p&gt;

&lt;h2&gt;
  
  
  #4 Develop your soft skills
&lt;/h2&gt;

&lt;p&gt;It is essential to improve your non-technical skills, such as communication, teamwork, and problem-solving, in addition to your technical skills. Employers place a high value on these skills, referred to as "soft skills," frequently. You can work on team projects, take communication classes, and practice presenting to others to improve your soft skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  #5 Set Goals &amp;amp; Objectives
&lt;/h2&gt;

&lt;p&gt;To advance your development career, you should set and work toward specific, attainable career objectives. You can create a career development plan that outlines your short- and long-term objectives to set career goals. It allows you to track your progress and success and helps you stay focused and motivated. You can also look for chances to learn new skills and have new experiences that will help you get where you want to go.&lt;/p&gt;

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

&lt;p&gt;In conclusion, advancing your career as a developer requires continuous learning, goal-setting, networking, and a combination of technical and non-technical skills. By following these five hints, you'll be well-headed to propelling your profession and making progress as a designer.&lt;br&gt;
Connect with me on Twitter &lt;a href="//www.twitter.com/langford_dev"&gt;@langford_dev&lt;/a&gt; and email me at &lt;a href="mailto:langfordquarshie21@gmail.com"&gt;langfordquarshie21@gmail.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>mongodb</category>
      <category>database</category>
    </item>
    <item>
      <title>Is AI the End of Traditional Programming?</title>
      <dc:creator>langford</dc:creator>
      <pubDate>Sun, 25 Dec 2022 17:07:39 +0000</pubDate>
      <link>https://dev.to/langf00rd/is-ai-the-end-of-traditional-programming-176l</link>
      <guid>https://dev.to/langf00rd/is-ai-the-end-of-traditional-programming-176l</guid>
      <description>&lt;p&gt;Artificial intelligence (AI) has made its way into nearly every industry, including software development. Some have wondered whether traditional programming will become obsolete as AI technologies advance.&lt;/p&gt;

&lt;p&gt;In this blog post, we’ll define AI and traditional programming, provide examples of AI’s use in software development, discuss the challenges and ethical concerns associated with AI in software development, and consider the potential future role of traditional programming in a world where AI is becoming more prevalent.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI vs. Traditional Programming
&lt;/h2&gt;

&lt;p&gt;First, let’s define AI and traditional programming.&lt;/p&gt;

&lt;p&gt;AI refers to the ability of computers and machines to perform tasks that would typically require human intelligence, such as learning, problem-solving, and decision-making. On the other hand, traditional programming involves writing code in a specific programming language to create software applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  How AI is used in software development
&lt;/h2&gt;

&lt;p&gt;Now, let’s look at examples of how AI is used in software development.&lt;/p&gt;

&lt;p&gt;One way AI is utilized is through code completion, where AI algorithms can suggest code snippets to programmers as they write code. AI can also detect code bugs, suggest fixes, and assist with natural language processing tasks, such as generating code from natural language descriptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pros and cons of AI in software development
&lt;/h2&gt;

&lt;p&gt;The potential benefits of using AI in software development include increased efficiency and accuracy. However, using AI in software development also has challenges and ethical concerns. One challenge is the need for large amounts of data to train AI algorithms, which can be a barrier for smaller organizations. Additionally, there is the potential for bias in AI algorithms if the data used to train them is biased. Ethical concerns surrounding the use of AI in software development include the potential impact on employment and the need for responsible use of AI.&lt;/p&gt;

&lt;p&gt;So, what does the future hold for traditional programming in a world where AI is increasingly prevalent in software development? It’s essential to consider both the pros and cons of relying on AI versus traditional programming. On the one hand, AI can improve efficiency and accuracy in software development. On the other hand, traditional programming allows for more control and customization in the development process. Ultimately, AI and standard programming will likely continue to play a role in software development, with the balance between the two shifting over time.&lt;/p&gt;

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

&lt;p&gt;In conclusion, AI is not the end of traditional programming but is changing how software is developed. While AI has the potential to improve efficiency and accuracy in software development, there are also challenges and ethical concerns to consider. The future role of traditional programming in a world where AI is increasingly prevalent remains to be seen. Both AI and standard programming will likely continue to coexist and evolve together.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>NFT Metadata Upload DApp With React &amp; Thirdweb Storage 🔐</title>
      <dc:creator>langford</dc:creator>
      <pubDate>Wed, 09 Nov 2022 00:10:32 +0000</pubDate>
      <link>https://dev.to/langf00rd/nft-metadata-upload-dapp-with-react-thirdweb-storage-25c6</link>
      <guid>https://dev.to/langf00rd/nft-metadata-upload-dapp-with-react-thirdweb-storage-25c6</guid>
      <description>&lt;p&gt;In this article, we’ll create an app that allows us to upload NFT metadata and get an IPFS link to the NFT.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--czt5c3tI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://user-images.githubusercontent.com/55645613/200696024-55ca5f10-7e34-4ce3-bc0e-9ccf93133d5f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--czt5c3tI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://user-images.githubusercontent.com/55645613/200696024-55ca5f10-7e34-4ce3-bc0e-9ccf93133d5f.gif" alt="tw-nft-metadata-storage" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Thirdweb Storage
&lt;/h2&gt;

&lt;p&gt;Thirdweb Storage is a tool/package that makes it simple to store and access files using decentralized file storage systems such as IPFS. It currently only supports IPFS but will support Filecoin and Arweave in the future. More information is available in the &lt;a href="https://portal.thirdweb.com/storage"&gt;thirdweb storage documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When we store an item (file, string, object, etc.) with Thirdweb Storage, we are given a link to that item.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation and setup
&lt;/h2&gt;

&lt;p&gt;First, we'll create our React app, which we'll call tw-nft-metadata-storage.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-react-app tw-nft-metadata-storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next we install Thirdweb Storage with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add @thirdweb-dev/storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you use npm, you can install it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @thirdweb-dev/storage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all we'll need to install for this app.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Code
&lt;/h2&gt;

&lt;p&gt;Let's begin by creating a few variables for the &lt;code&gt;App.js&lt;/code&gt; file: name, description, image, link, and loading.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;name - Name of NFT&lt;/li&gt;
&lt;li&gt;description - NFT's description&lt;/li&gt;
&lt;li&gt;image - Link to image source for the NFT&lt;/li&gt;
&lt;li&gt;link - IPFS link to uploaded NFT&lt;/li&gt;
&lt;li&gt;loading - displays when NFT is being uploaded
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&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;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setDescription&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&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;image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setImage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&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;link&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setLink&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&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;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/main&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have a basic layout in the &lt;code&gt;App.js&lt;/code&gt; file with a page title, an upload button, and text input fields for the NFT's name, description, and image.&lt;/p&gt;

&lt;p&gt;We also have a loader with the text &lt;strong&gt;loading...&lt;/strong&gt; that appears when the app uploads our metadata; once the load is finished, the upload button appears.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&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;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setDescription&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&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;image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setImage&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&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;link&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setLink&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&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;loading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;NFT&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="nx"&gt;upload&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;textarea&lt;/span&gt;
        &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;setDescription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
      &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;setImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;loading&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;uploading&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&amp;gt; : &amp;lt;button&amp;gt;upload metadata 🚀&amp;lt;/&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blank&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;link&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/a&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/main&lt;/span&gt;&lt;span class="err"&gt;&amp;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;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the &lt;code&gt;App.css&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;system-ui&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;-apple-system&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlinkMacSystemFont&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;"Segoe UI"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Roboto&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;Oxygen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Cantarell&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;"Open Sans"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;"Helvetica Neue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;main&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;500px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80px&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;textarea&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;textarea&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#4b0aff3&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#4b0aff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#fff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.link&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#4b0aff&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;When you run the React app, you should see something like this in the browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s93ycLcB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/55645613/200690888-a21916cd-d454-4484-b7e0-3de842936722.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s93ycLcB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/55645613/200690888-a21916cd-d454-4484-b7e0-3de842936722.png" alt="thirdweb storage nft metadata upload page" width="662" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Logic
&lt;/h2&gt;

&lt;p&gt;When you press the upload button, the function &lt;code&gt;uploadMetadata()&lt;/code&gt; is called.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;uploadMetadata&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;upload&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="err"&gt;🚀&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;uploadMetadata()&lt;/code&gt; function is an async function that contains the logic for upload and link generation. We'll start by displaying a loading indicator, then create an object with a name, description, and a link to the image of the NFT we want to upload. These values come from what we type into the input fields.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uploadMetadata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;metadata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thirdweb Storage allows for simple file uploading. It is outside this tutorial's scope, so we'll cover it in another article.&lt;/p&gt;

&lt;p&gt;Following that, we will work on the upload and link generation logic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uploadMetadata&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="cm"&gt;/***/&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;upload&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resolveScheme&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;setLink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;setLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To upload the metadata, we use the &lt;code&gt;storage.upload()&lt;/code&gt; function and pass the metadata object; to get the IPFS link to the NFT, we use the &lt;code&gt;storage.resolveScheme()&lt;/code&gt; function and pass the URI returned after the upload is complete.&lt;/p&gt;

&lt;p&gt;Finally, we set the NFT URL value to the &lt;code&gt;link&lt;/code&gt; variable and hide the loader.&lt;/p&gt;

&lt;p&gt;When you return to the browser and enter the values, then click the upload button, you should see a loader for a few seconds, followed by a link to the uploaded NFT, as shown in the gif below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--czt5c3tI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://user-images.githubusercontent.com/55645613/200696024-55ca5f10-7e34-4ce3-bc0e-9ccf93133d5f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--czt5c3tI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://user-images.githubusercontent.com/55645613/200696024-55ca5f10-7e34-4ce3-bc0e-9ccf93133d5f.gif" alt="tw-nft-metadata-storage" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;That’s it for this article.&lt;/p&gt;

&lt;p&gt;If you liked this article, consider following me on &lt;a href="https://twitter.com/langford_dev"&gt;Twitter&lt;/a&gt; and signing up for my &lt;a href="https://www.getrevue.co/profile/langford_dev"&gt;weekly newsletter&lt;/a&gt;. Also checkout my &lt;a href="https://www.youtube.com/@TheSuperDev"&gt;YouTube&lt;/a&gt; for more developer content.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>thirdweb</category>
      <category>tutorial</category>
      <category>react</category>
    </item>
    <item>
      <title>5 ways to make your website 10x faster ⚡🚀</title>
      <dc:creator>langford</dc:creator>
      <pubDate>Thu, 18 Aug 2022 23:06:14 +0000</pubDate>
      <link>https://dev.to/langf00rd/5-ways-to-make-your-website-10x-faster-3829</link>
      <guid>https://dev.to/langf00rd/5-ways-to-make-your-website-10x-faster-3829</guid>
      <description>&lt;p&gt;The speed of your website significantly impacts how long people stay on it, the conversion rate, and the number of views it receives. Unfortunately, some developers overlook minor changes that could be implemented to address this issue.&lt;/p&gt;

&lt;p&gt;Take a look at these statistics. A &lt;strong&gt;one-second delay&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reduces page views by &lt;strong&gt;11%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;decreases customer satisfaction by &lt;strong&gt;16%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;reduces conversion rates by &lt;strong&gt;7%&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although these percentages may appear negligible, they make a significant difference. When a visitor has a negative experience and leaves, it isn't easy to persuade him back.&lt;/p&gt;

&lt;p&gt;In this article, I will show you five things you should do right now to improve the speed of your website!&lt;/p&gt;

&lt;h2&gt;
  
  
  #1 Minify file sizes
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8Iu-KFc2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wh50in48m8f9961wnrub.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8Iu-KFc2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wh50in48m8f9961wnrub.png" alt="minify file size meme" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The larger the file sizes on your website, the more HTTP requests are made on each visit to your page, and the more bandwidth it takes to download your page's content, making your website load slower.&lt;/p&gt;

&lt;p&gt;CSS and JavaScript files are typically large. In such cases, reducing the file size can help to improve load time. When a file is minified, unnecessary comments, whitespaces, and formatting are removed. Essentially, anything the computer does not require to understand your code is removed. Reducing file size and increasing the load time&lt;/p&gt;

&lt;p&gt;Fortunately, there are numerous online tools available to help you minify files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.minifier.org/"&gt;Minifier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/kangax/html-minifier"&gt;HTMLMinifier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ben-eb/cssnano"&gt;CSSnano&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/mishoo/UglifyJS2"&gt;UglifyJs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  #2 Asynchronously load CSS and JavaScript files
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--djGsKsEO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r0xok85i9neo8bnz3l4r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--djGsKsEO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r0xok85i9neo8bnz3l4r.png" alt="async load meme" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Loading imported files asynchronously significantly increases load time. This is how it works.&lt;/p&gt;

&lt;p&gt;The synchronous method involves loading files one line at a time. When a file is being loaded, it must finish before other files can be loaded. This process is often reflected in the frontend, where the HTML content is sometimes displayed without CSS styles. After a few seconds, it shows a normal looking website, resulting in a bad experience.&lt;/p&gt;

&lt;p&gt;Asynchronous loading involves loading multiple files at the same time. This way, your website does not have to wait for one file's load process to complete before moving on to the next.&lt;/p&gt;

&lt;p&gt;Here's how to go about it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!-- async load CSS file--&amp;gt;
&amp;lt;link rel="preload" href="styles.css" as="style" onload="this.rel='stylesheet'"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// async load javaScript
&amp;lt;script async src="script.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can use the 'defer' attribute to tell the browser not to wait for the 'script' to finish loading. In this fashion, the 'script' loads in the background and executes when the DOM is entirely built.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;script defer src="script.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  #3 Media optimization
&lt;/h2&gt;

&lt;p&gt;Images and media take the longest to load and have larger file sizes than HTML and CSS files.&lt;/p&gt;

&lt;p&gt;We are familiar with JPEGs, MP4s, and other file types that typically have larger file sizes, contributing to slower media loads and a poor user experience.&lt;/p&gt;

&lt;p&gt;However, some other file formats have relatively smaller file sizes. Even though these files are compressed, they do not affect the resolution or quality of your media files. As a result, while using smaller media files, quality is maintained.&lt;/p&gt;

&lt;p&gt;Optimized image file types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SVG&lt;/li&gt;
&lt;li&gt;WEBP&lt;/li&gt;
&lt;li&gt;AVIF&lt;/li&gt;
&lt;li&gt;ICO&lt;/li&gt;
&lt;li&gt;TIFF&lt;/li&gt;
&lt;li&gt;ICO&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Optimized video file types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WEBM&lt;/li&gt;
&lt;li&gt;MPEG-4 Part 14&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Optimized audio file types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AAC&lt;/li&gt;
&lt;li&gt;OGG&lt;/li&gt;
&lt;li&gt;WAV&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  #4. Use a CDN
&lt;/h2&gt;

&lt;p&gt;Content Delivery Networks (CDNs) cache content on servers located all over the world. When a user requests a file, the request is routed to the CDN server closest to the user's geographical location rather than the hosting server, which is likely thousands of miles away. As a result, the load time is reduced.&lt;/p&gt;

&lt;p&gt;CDNs you can use today &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Akamai&lt;/li&gt;
&lt;li&gt;CloudFlare&lt;/li&gt;
&lt;li&gt;Stackpath&lt;/li&gt;
&lt;li&gt;CDN77&lt;/li&gt;
&lt;li&gt;CacheFly&lt;/li&gt;
&lt;li&gt;Amazon CloudFront&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  #5 Test website performance
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TIokn4LQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8auxbx0mklgya8rnm6j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TIokn4LQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8auxbx0mklgya8rnm6j.png" alt="response time meme" width="420" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;During testing sessions, you can identify and fix issues affecting your website's performance before it goes live. To diagnose performance issues on your website, use a tool like Google's &lt;a href="https://pagespeed.web.dev/"&gt;PageSpeed&lt;/a&gt;. You can use the network tab in the dev tools to track the number of requests made and the amount of bandwidth used.&lt;/p&gt;

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

&lt;p&gt;That's it for this article.&lt;/p&gt;

&lt;p&gt;If you found it useful, consider following me on &lt;a href="https://twitter.com/langford_dev"&gt;Twitter&lt;/a&gt; and signing up for my weekly &lt;a href="https://www.getrevue.co/profile/langford_dev"&gt;newsletter&lt;/a&gt; for more web developer content.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>testing</category>
      <category>programming</category>
    </item>
    <item>
      <title>10 GitHub repositories to Become a React Master 👨‍💻💯</title>
      <dc:creator>langford</dc:creator>
      <pubDate>Wed, 17 Aug 2022 23:05:00 +0000</pubDate>
      <link>https://dev.to/langf00rd/10-github-repositories-to-become-a-react-master-pd1</link>
      <guid>https://dev.to/langf00rd/10-github-repositories-to-become-a-react-master-pd1</guid>
      <description>&lt;p&gt;I came across a couple of GitHub repositories that will make you a React Pro in no time! If you're new to React or are already familiar with the framework and want to advance, you should check out these GitHub repositories.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Awesome React
&lt;/h2&gt;

&lt;p&gt;⭐ 50.3K&lt;br&gt;
A massive collection of nearly everything you need to know about React.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/enaqx"&gt;
        enaqx
      &lt;/a&gt; / &lt;a href="https://github.com/enaqx/awesome-react"&gt;
        awesome-react
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A collection of awesome things regarding React ecosystem
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h2 id="user-content-awesome-react-"&gt;
&lt;a class="heading-link" href="https://github.com/enaqx/awesome-react#awesome-react-"&gt;&lt;strong&gt;Awesome React&lt;/strong&gt; &lt;/a&gt;&lt;a href="https://github.com/sindresorhus/awesome"&gt;&lt;img src="https://camo.githubusercontent.com/abb97269de2982c379cbc128bba93ba724d8822bfbe082737772bd4feb59cb54/68747470733a2f2f63646e2e7261776769742e636f6d2f73696e647265736f726875732f617765736f6d652f643733303566333864323966656437386661383536353265336136336531353464643865383832392f6d656469612f62616467652e737667" alt="Awesome"&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;A collection of awesome things regarding the React ecosystem.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/enaqx/awesome-react#react"&gt;React&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-general-resources"&gt;React General Resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-tutorials"&gt;React Tutorials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-development-tools"&gt;React Development Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-frameworks"&gt;React Frameworks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-component-libraries"&gt;React Component Libraries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-state-management-and-data-fetching"&gt;React State Management and Data Fetching&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-styling"&gt;React Styling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-routing"&gt;React Routing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-libraries"&gt;React Libraries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-testing"&gt;React Testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-awesome-components"&gt;React Awesome Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-components-sandboxes"&gt;React Components Sandboxes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-forms"&gt;React Forms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-tables-and-grids"&gt;React Tables and Grids&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-maps"&gt;React Maps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-charts"&gt;React Charts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-renderers"&gt;React Renderers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-internationalization"&gt;React Internationalization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-graphics-and-animations"&gt;React Graphics and Animations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-integration"&gt;React Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-real-apps"&gt;React Real Apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/enaqx/awesome-react#react-native"&gt;React Native&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-native-general-resources"&gt;React Native General Resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-native-navigation"&gt;React Native Navigation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-native-awesome-components"&gt;React Native Awesome Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#react-native-libraries"&gt;React Native Libraries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/enaqx/awesome-react#contribution"&gt;Contribution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="user-content-react"&gt;&lt;a class="heading-link" href="https://github.com/enaqx/awesome-react#react"&gt;React&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id="user-content-react-general-resources"&gt;&lt;a class="heading-link" href="https://github.com/enaqx/awesome-react#react-general-resources"&gt;React General Resources&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://react.dev/" rel="nofollow"&gt;React Official Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/facebook/react"&gt;React GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.reactiflux.com/" rel="nofollow"&gt;Reactiflux Discord Channel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://react.dev/community" rel="nofollow"&gt;React Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://react.dev/community/conferences" rel="nofollow"&gt;React Conferences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codesandbox.io/s/new" rel="nofollow"&gt;React CodeSandbox Playground&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="user-content-react-tutorials"&gt;&lt;a class="heading-link" href="https://github.com/enaqx/awesome-react#react-tutorials"&gt;React Tutorials&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://react.dev/learn" rel="nofollow"&gt;React Official Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/docs/nodejs/reactjs-tutorial" rel="nofollow"&gt;Using React in Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions"&gt;React Interview Questions &amp;amp; Answers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.patterns.dev/" rel="nofollow"&gt;Design patterns and Component patterns for building powerful Web Apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/alan2207/bulletproof-react"&gt;A simple, scalable, and powerful architecture for building production ready React applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/typescript-cheatsheets/react-typescript-cheatsheet"&gt;Cheatsheets for experienced React developers getting started with&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/enaqx/awesome-react"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  2. React Bits
&lt;/h2&gt;

&lt;p&gt;⭐ 12.3K&lt;br&gt;
A collection of React patterns, techniques, tips, and tips.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/vasanthk"&gt;
        vasanthk
      &lt;/a&gt; / &lt;a href="https://github.com/vasanthk/react-bits"&gt;
        react-bits
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      ✨ React patterns, techniques, tips and tricks ✨
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-react-bits"&gt;
&lt;a href="https://vasanthk.gitbooks.io/react-bits" rel="nofollow"&gt;React Bits&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;A compilation of React Patterns, techniques, tips and tricks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gitbook format&lt;/strong&gt;: &lt;a href="https://vasanthk.gitbooks.io/react-bits" rel="nofollow"&gt;https://vasanthk.gitbooks.io/react-bits&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Github repo&lt;/strong&gt;: &lt;a href="https://github.com/vasanthk/react-bits"&gt;https://github.com/vasanthk/react-bits&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Your contributions are heartily ♡ welcome. (✿◠‿◠)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Translations by community:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;中文版 (Chinese): &lt;a href="https://github.com/hateonion/react-bits-CN"&gt;react-bits-cn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;한국어 (Korean): &lt;a href="https://github.com/rayleighko/react-bits-ko"&gt;react-bits-ko&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Design Patterns and Techniques
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/18.conditionals-in-jsx.md"&gt;Conditional in JSX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/19.async-nature-of-setState.md"&gt;Async Nature Of setState()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/20.dependency-injection.md"&gt;Dependency Injection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/21.context-wrapper.md"&gt;Context Wrapper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/22.event-handlers.md"&gt;Event Handlers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/23.flux-pattern.md"&gt;Flux Pattern&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/24.one-way-data-flow.md"&gt;One Way Data Flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/25.presentational-vs-container.md"&gt;Presentational vs Container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/26.third-party-integration.md"&gt;Third Party Integration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/27.passing-function-to-setState.md"&gt;Passing Function To setState()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/28.decorators.md"&gt;Decorators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/29.feature-flags-using-redux.md"&gt;Feature Flags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/30.component-switch.md"&gt;Component Switch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/31.reaching-into-a-component.md"&gt;Reaching Into A Component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/32.list-components.md"&gt;List Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/33.format-text-via-component.md"&gt;Format Text via Component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./patterns/34.share-tracking-logic.md"&gt;Share Tracking Logic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Anti-Patterns
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/README.md"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/01.props-in-initial-state.md"&gt;Props In Initial State&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/02.findDOMNode.md"&gt;findDOMNode()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/03.mixins.md"&gt;Mixins&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/04.setState-in-componentWillMount.md"&gt;setState() in componentWillMount()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/05.mutating-state.md"&gt;Mutating State&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/06.using-indexes-as-key.md"&gt;Using Indexes as Key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./anti-patterns/07.spreading-props-dom.md"&gt;Spreading Props on DOM elements&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Handling UX Variations
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/README.md"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/01.composing-variations.md"&gt;Composing UX Variations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/02.toggle-ui-elements.md"&gt;Toggle UI Elements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/03.HOC-feature-toggles.md"&gt;HOC for Feature Toggles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/04.HOC-props-proxy.md"&gt;HOC props proxy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/05.wrapper-components.md"&gt;Wrapper Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./ux-variations/06.display-order-variations.md"&gt;Display Order Variations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Perf Tips
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./perf-tips/README.md"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./perf-tips/01.shouldComponentUpdate-check.md"&gt;shouldComponentUpdate() check&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./perf-tips/02.pure-component.md"&gt;Using Pure Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./perf-tips/03.reselect.md"&gt;Using reselect&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Styling
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./styling/README.md"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./styling/01.stateless-ui-components.md"&gt;Stateless UI Components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./styling/02.styles-module.md"&gt;Styles Module&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vasanthk/react-bits./styling/03.style-functions.md"&gt;Style Functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vasanthk/react-bits./styling/04.using-npm-modules.md"&gt;NPM&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/vasanthk/react-bits"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  3. React Developer Roadmap
&lt;/h2&gt;

&lt;p&gt;⭐ 17.4K&lt;br&gt;
An amazing road map to becoming a React developer.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adam-golab"&gt;
        adam-golab
      &lt;/a&gt; / &lt;a href="https://github.com/adam-golab/react-developer-roadmap"&gt;
        react-developer-roadmap
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Roadmap to becoming a React developer
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-react-developer-roadmap"&gt;&lt;a class="heading-link" href="https://github.com/adam-golab/react-developer-roadmap#react-developer-roadmap"&gt;React Developer Roadmap&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://github.com/adam-golab/react-developer-roadmapREADME-CN.md"&gt;README in Chinese&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/adam-golab/react-developer-roadmapREADME-JA.md"&gt;README in Japanese&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/adam-golab/react-developer-roadmapREADME-KO.md"&gt;README in Korean&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/adam-golab/react-developer-roadmapREADME-PTBR.md"&gt;README in Portuguese (Brazil)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/adam-golab/react-developer-roadmapREADME-RU.md"&gt;README in Russian&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/adam-golab/react-developer-roadmapREADME-ES.md"&gt;README in Spanish&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Roadmap to becoming a React developer in 2019:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Below you can find a chart demonstrating the paths that you can take and the libraries that you would want to learn to become a React developer. I made this chart as a tip for everyone who asks me, "What should I learn next as a React developer?"&lt;/p&gt;
&lt;h2 id="user-content-disclaimer"&gt;&lt;a class="heading-link" href="https://github.com/adam-golab/react-developer-roadmap#disclaimer"&gt;Disclaimer&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;The purpose of this roadmap is to give you an idea about the landscape. The road map will guide you if you are confused about what to learn next, rather than encouraging you to pick what is hip and trendy. You should grow some understanding of why one tool would be better suited for some cases than the other and remember hip and trendy does not always mean best suited for…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adam-golab/react-developer-roadmap"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  4. React Hooks Cheat sheet
&lt;/h2&gt;

&lt;p&gt;⭐ 750+&lt;br&gt;
A cheatsheet for React hooks with live editable examples&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ohansemmanuel"&gt;
        ohansemmanuel
      &lt;/a&gt; / &lt;a href="https://github.com/ohansemmanuel/react-hooks-cheatsheet"&gt;
        react-hooks-cheatsheet
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🦖 React hooks cheatsheet with live editable examples 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content---------"&gt;
&lt;a class="heading-link" href="https://github.com/ohansemmanuel/react-hooks-cheatsheet#--------"&gt;
  &lt;/a&gt;&lt;a href="http://react-hooks-cheatsheet.surge.sh/" rel="nofollow"&gt;
    &lt;img src="https://camo.githubusercontent.com/2abb12afc4ff0b343b41e738a347dae2ff35ce8af34b52eddd583f349b388a0b/68747470733a2f2f692e696d6775722e636f6d2f52454c577973362e706e67" alt="react-hooks-cheatsheet" title="react-hooks-cheatsheet" width="300"&gt;
  &lt;/a&gt;

&lt;/h1&gt;
&lt;p&gt;A Cheatsheet with live editable examples 💪&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A one-stop reference for the React hooks APIs&lt;/li&gt;
&lt;li&gt;Doesn't replace the official docs.&lt;/li&gt;
&lt;li&gt;However, it contains actual code examples each mimicking all APIs of hooks.&lt;/li&gt;
&lt;li&gt;Contains some real world examples of cases / issues you'll likely run into&lt;/li&gt;
&lt;li&gt;Most importantly, the cheatsheet contains &lt;strong&gt;live editable&lt;/strong&gt; codes.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt; 
&lt;div&gt;
    &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/d59a01648b6ab192d95d0ae4e30e7d5d1675637aa50ef7d2f639d7e9fa43c8e6/68747470733a2f2f692e696d6775722e636f6d2f64734f466e65742e676966"&gt;&lt;img src="https://camo.githubusercontent.com/d59a01648b6ab192d95d0ae4e30e7d5d1675637aa50ef7d2f639d7e9fa43c8e6/68747470733a2f2f692e696d6775722e636f6d2f64734f466e65742e676966"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
&lt;h2 id="user-content-examples"&gt;&lt;a class="heading-link" href="https://github.com/ohansemmanuel/react-hooks-cheatsheet#examples"&gt;Examples&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;includes live examples 🙋‍&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
    &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/758ff5b222d048bdb42308606aae4816eee741ea0151cb4b4ec57f853cc05ce6/68747470733a2f2f692e696d6775722e636f6d2f78617757424e522e676966"&gt;&lt;img src="https://camo.githubusercontent.com/758ff5b222d048bdb42308606aae4816eee741ea0151cb4b4ec57f853cc05ce6/68747470733a2f2f692e696d6775722e636f6d2f78617757424e522e676966"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;p&gt;
  &lt;a href="http://react-hooks-cheatsheet.surge.sh/" rel="nofollow"&gt;
    👉🏿👉🏿👉🏿 Get Started 
  &lt;/a&gt;
&lt;/p&gt;

&lt;h2 id="user-content-todos"&gt;&lt;a class="heading-link" href="https://github.com/ohansemmanuel/react-hooks-cheatsheet#todos"&gt;Todos&lt;/a&gt;&lt;/h2&gt;

&lt;ul class="contains-task-list"&gt;
&lt;li class="task-list-item"&gt;
 Add example call signatures to all hooks&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Add more examples that explain interesting use cases from the official &lt;a href="https://reactjs.org/docs/hooks-faq.html" rel="nofollow"&gt;Hooks FAQ&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="user-content-contributing"&gt;&lt;a class="heading-link" href="https://github.com/ohansemmanuel/react-hooks-cheatsheet#contributing"&gt;Contributing&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Contributions of any kind are welcome. If you wanna knock off any of the todos above, please feel free to issue a PR.
Got an interesting idea for the cheatsheet? Issue a PR :)&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ohansemmanuel/react-hooks-cheatsheet"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  5. ReactJs Interview Questions
&lt;/h2&gt;

&lt;p&gt;⭐ 23.1K&lt;br&gt;
This repository contains almost every React interview question imaginable.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sudheerj"&gt;
        sudheerj
      &lt;/a&gt; / &lt;a href="https://github.com/sudheerj/reactjs-interview-questions"&gt;
        reactjs-interview-questions
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      List of top 500 ReactJS Interview Questions &amp;amp; Answers....Coding exercise questions are coming soon!!
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-react-interview-questions--answers"&gt;&lt;a class="heading-link" href="https://github.com/sudheerj/reactjs-interview-questions#react-interview-questions--answers"&gt;React Interview Questions &amp;amp; Answers&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Click ⭐if you like the project. Pull Request are highly appreciated. Follow me &lt;a href="https://twitter.com/SudheerJonna" rel="nofollow"&gt;@SudheerJonna&lt;/a&gt; for technical updates.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div&gt;
&lt;p&gt;
  &lt;a href="https://react.gg/?s=rjsiq" rel="nofollow"&gt;
    &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--30oFmIdm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/sudheerj/reactjs-interview-questions./images/collab/uidev-banner4x.png" alt="React interview" width="100%"&gt;
  &lt;/a&gt;
&lt;/p&gt;


&lt;/div&gt;
&lt;br&gt;


&lt;div&gt;
&lt;p&gt;
  &lt;a href="https://zerotomastery.io/?utm_source=github&amp;amp;utm_medium=sponsor&amp;amp;utm_campaign=reactjs-interview-questions" rel="nofollow"&gt;
    &lt;img src="https://camo.githubusercontent.com/b734c6be704a0195ca425120caf1bd53a513e708edc0dd0a2c151cbe23471871/68747470733a2f2f70726f636573732e66732e746561636861626c6563646e2e636f6d2f41444e75704d6e577952376b435752766d37364c617a2f726573697a653d6865696768743a37302f68747470733a2f2f7777772e66696c657069636b65722e696f2f6170692f66696c652f414b59746a6a35535347794a75795a726b414232" alt="ZTM Logo" width="100" height="50"&gt;
  &lt;/a&gt;
    &lt;/p&gt;
&lt;ol&gt;
      &lt;li&gt;I recommend this &lt;a href="https://links.zerotomastery.io/react_sudheer" rel="nofollow"&gt;React course&lt;/a&gt; if you’re serious about learning React and want to go beyond the basics&lt;/li&gt;
      &lt;li&gt;Want to ace your coding interview and get hired at your dream company? &lt;a href="http://links.zerotomastery.io/mci_sudheer" rel="nofollow"&gt;Take this coding interview bootcamp&lt;/a&gt;
&lt;/li&gt;
    &lt;/ol&gt;
&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This repository is specific to ReactJS. Please check &lt;a href="https://github.com/sudheerj/javascript-interview-questions"&gt;Javascript Interview questions&lt;/a&gt; for core javascript questions.&lt;/p&gt;

&lt;h3 id="user-content-table-of-contents"&gt;&lt;a class="heading-link" href="https://github.com/sudheerj/reactjs-interview-questions#table-of-contents"&gt;Table of Contents&lt;/a&gt;&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;No.&lt;/th&gt;
&lt;th&gt;Questions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core React&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions#what-is-react"&gt;What is React?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions#what-are-the-major-features-of-react"&gt;What are the major features of React?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions#what-is-jsx"&gt;What is JSX?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions#what-is-the-difference-between-element-and-component"&gt;What is the difference between Element and Component?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions#how-to-create-components-in-react"&gt;How to create components in React?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions#when-to-use-a-class-component-over-a-function-component"&gt;When to use a Class Component over a Function Component?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions#what-are-pure-components"&gt;What are Pure Components?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions#what-is-state-in-react"&gt;What is state in React?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions#what-are-props-in-react"&gt;What are props in React?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/sudheerj/reactjs-interview-questions#what-is-the-difference-between-state-and-props"&gt;What is the difference between state and props?&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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/sudheerj/reactjs-interview-questions"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2&gt;
  
  
  6. React in Patterns
&lt;/h2&gt;

&lt;p&gt;⭐ 11.6K&lt;br&gt;
A free book that talks about design patterns/techniques used while developing with&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/krasimir"&gt;
        krasimir
      &lt;/a&gt; / &lt;a href="https://github.com/krasimir/react-in-patterns"&gt;
        react-in-patterns
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A free book that talks about design patterns/techniques used while developing with React.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-react-in-patterns"&gt;&lt;a class="heading-link" href="https://github.com/krasimir/react-in-patterns#react-in-patterns"&gt;React in patterns&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;📚 A free book that talks about design patterns/techniques used while developing with &lt;a href="https://facebook.github.io/react/" rel="nofollow"&gt;React&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="user-content-book"&gt;&lt;a class="heading-link" href="https://github.com/krasimir/react-in-patterns#book"&gt;Book&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.gitbook.com/book/krasimir/react-in-patterns/details" rel="nofollow"&gt;GitBook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://krasimir.gitbooks.io/react-in-patterns/content/" rel="nofollow"&gt;Web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gitbook.com/download/pdf/book/krasimir/react-in-patterns" rel="nofollow"&gt;PDF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gitbook.com/download/mobi/book/krasimir/react-in-patterns" rel="nofollow"&gt;Mobi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gitbook.com/download/epub/book/krasimir/react-in-patterns" rel="nofollow"&gt;ePub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/krasimir/react-in-patterns./book/cover_small.jpg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---RGjlKCp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/krasimir/react-in-patterns./book/cover_small.jpg" alt="React in patterns cover"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="user-content-translations"&gt;&lt;a class="heading-link" href="https://github.com/krasimir/react-in-patterns#translations"&gt;Translations&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/SangKa/react-in-patterns-cn"&gt;简体中文&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="user-content-content"&gt;&lt;a class="heading-link" href="https://github.com/krasimir/react-in-patterns#content"&gt;Content&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-01/README.md"&gt;In brief&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="user-content-foundation"&gt;&lt;a class="heading-link" href="https://github.com/krasimir/react-in-patterns#foundation"&gt;Foundation&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-02/README.md"&gt;Communication&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-02/README.md#input"&gt;Input&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-02/README.md#output"&gt;Output&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-03/README.md"&gt;Event handlers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-04/README.md"&gt;Composition&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-04/README.md#using-reacts-children-api"&gt;Using React's children API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-04/README.md#passing-a-child-as-a-prop"&gt;Passing a child as a prop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-04/README.md#higher-order-component"&gt;Higher-order component&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-04/README.md#function-as-a-children-render-prop"&gt;Function as a children, render prop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-05/README.md"&gt;Controlled and uncontrolled inputs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-06/README.md"&gt;Presentational and container components&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="user-content-data-flow"&gt;&lt;a class="heading-link" href="https://github.com/krasimir/react-in-patterns#data-flow"&gt;Data flow&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-07/README.md"&gt;One direction data flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-08/README.md"&gt;Flux&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-08/README.md#flux-architecture-and-its-main-characteristics"&gt;Flux architecture and its main characteristics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-08/README.md#implementing-a-flux-architecture"&gt;Implementing a Flux architecture&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-09/README.md"&gt;Redux&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-09/README.md#redux-architecture-and-its-main-characteristics"&gt;Redux architecture and its main characteristics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-09/README.md#simple-counter-app-using-redux"&gt;Simple counter app using Redux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="user-content-misc"&gt;&lt;a class="heading-link" href="https://github.com/krasimir/react-in-patterns#misc"&gt;MISC&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-10/README.md"&gt;Dependency injection&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-10/README.md#using-reacts-context-prior-v-163"&gt;Using React's context (prior to v. 16.3)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-10/README.md#using-reacts-context-v-163-and-above"&gt;Using React's context (v. 16.3 and above)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-10/README.md#using-the-module-system"&gt;Using the module system&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-11/README.md"&gt;Styling&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-11/README.md#the-good-old-css-class"&gt;The good old CSS class&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-11/README.md#inline-styling"&gt;Inline styling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-11/README.md#css-modules"&gt;CSS modules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-11/README.md#styled-components"&gt;Styled-components&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-12/README.md"&gt;Integration of third-party libraries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/krasimir/react-in-patterns./book/chapter-13/README.md"&gt;React and separation of concerns&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="user-content-source-code"&gt;&lt;a class="heading-link" href="https://github.com/krasimir/react-in-patterns#source-code"&gt;Source code&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The code samples used in the book are available &lt;a href="https://github.com/krasimir/react-in-patterns./code"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="user-content-other-resources"&gt;&lt;a class="heading-link" href="https://github.com/krasimir/react-in-patterns#other-resources"&gt;Other resources&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://facebook.github.io/react/contributing/design-principles.html" rel="nofollow"&gt;React Design principles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/krasimir/react-in-patterns"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;h2&gt;
  
  
  7. 30 Days Of React
&lt;/h2&gt;

&lt;p&gt;⭐ 15.6K&lt;br&gt;
This repository provides a step-by-step guide to learning React in 30 days. Before you begin, however, you should be familiar with HTML, CSS, and JavaScript. This repository is intended for beginners, intermediates, and advanced developers.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Asabeneh"&gt;
        Asabeneh
      &lt;/a&gt; / &lt;a href="https://github.com/Asabeneh/30-Days-Of-React"&gt;
        30-Days-Of-React
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      30 Days of  React challenge is a step by step guide to learn React in 30 days.  These videos may help too: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/Asabeneh/30-Days-Of-React./images/30_days_of_react.jpg"&gt;&lt;img width="100%" src="https://res.cloudinary.com/practicaldev/image/fetch/s--ufSxVyW1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/Asabeneh/30-Days-Of-React./images/30_days_of_react.jpg"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;h1 id="user-content--30-days-of-react"&gt;&lt;a class="heading-link" href="https://github.com/Asabeneh/30-Days-Of-React#-30-days-of-react"&gt; 30 Days Of React&lt;/a&gt;&lt;/h1&gt;
  &lt;a href="https://www.linkedin.com/in/asabeneh/" rel="nofollow"&gt;
  &lt;img src="https://camo.githubusercontent.com/5200e768dca3bed73cbb531464d8215085841ef6c35afdb82a2bbb31fc2c9ecb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7374796c652d2d3565626130302e7376673f6c6162656c3d4c696e6b6564496e266c6f676f3d6c696e6b6564696e267374796c653d736f6369616c"&gt;
  &lt;/a&gt;
  &lt;a href="https://twitter.com/Asabeneh" rel="nofollow"&gt;
  &lt;img alt="Twitter Follow" src="https://camo.githubusercontent.com/d6c4b11a12d1cdda1e284831e22ca87598370aa7b7ff543cd7d12302e43ef6c0/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f666f6c6c6f772f61736162656e65683f7374796c653d736f6369616c"&gt;
  &lt;/a&gt;
&lt;p&gt;Author: &lt;a href="https://www.linkedin.com/in/asabeneh/" rel="nofollow"&gt;Asabeneh Yetayeh&lt;/a&gt;&lt;br&gt;
 October, 2020&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./01_Day_JavaScript_Refresher/01_javascript_refresher.md"&gt;Day 1 &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;# Day&lt;/th&gt;
&lt;th&gt;Topics&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;00&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/Asabeneh/30-Days-Of-React#introduction"&gt;Introduction&lt;/a&gt;&lt;br&gt; &lt;a href="https://github.com/Asabeneh/30-Days-Of-React#how-to-use-repo"&gt;How to Use Repo&lt;/a&gt;&lt;br&gt; &lt;a href="https://github.com/Asabeneh/30-Days-Of-React#requirements"&gt;Requirements&lt;/a&gt;&lt;br&gt; &lt;a href="https://github.com/Asabeneh/30-Days-Of-React#setup"&gt;Setup&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;01&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./01_Day_JavaScript_Refresher/01_javascript_refresher.md"&gt;JavaScript Refresher&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;02&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./02_Day_Introduction_to_React/02_introduction_to_react.md"&gt;Getting Started React&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;03&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./03_Day_Setting_Up/03_setting_up.md"&gt;Setting Up&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;04&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./04_Day_Components/04_components.md"&gt;Components&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;05&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./05_Day_Props/05_props.md"&gt;Props&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;06&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./06_Day_Map_List_Keys/06_map_list_keys.md"&gt;List, Map and Keys&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;07&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./07_Day_Class_Components/07_class_components.md"&gt;Class Components&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;08&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./08_Day_States/08_states.md"&gt;States&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;09&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./09_Day_Conditional_Rendering/09_conditional_rendering.md"&gt;Conditional Rendering&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./10_React_Project_Folder_Structure/10_react_project_folder_structure.md"&gt;React Project Folder Structure&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./11_Day_Events/11_events.md"&gt;Events&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./12_Day_Forms/12_forms.md"&gt;Forms&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./13_Day_Controlled_Versus_Uncontrolled_Input/13_uncontrolled_input.md"&gt;Controlled and Uncontrolled Component&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./14_Day_Component_Life_Cycles/14_component_life_cycles.md"&gt;Component Life Cycles&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./15_Third_Party_Packages/15_third_party_packages.md"&gt;Third Party Packages&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./16_Higher_Order_Component/16_higher_order_component.md"&gt;Higher Order Components&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./17_React_Router/17_react_router.md"&gt;React Router&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./18_Fetch_And_Axios/18_fetch_axios.md"&gt;Fetch versus Axios&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./19_projects/19_projects.md"&gt;Projects&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./20_projects/20_projects.md"&gt;Projects&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./21_Introducing_Hooks/21_introducing_hooks.md"&gt;Hooks&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./22_Form_Using_Hooks/22_form_using_hooks.md"&gt;Forms Using Hook&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./23_Fetching_Data_Using_Hooks/23_fetching_data_using_hooks.md"&gt;Fetching Data Using Hooks&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./24_projects/24_projects.md"&gt;Project using Hooks&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./25_Custom_Hooks/25_custom_hooks.md"&gt;Custom Hooks&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./26_Context/26_context.md"&gt;Context&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./27_Ref/27_ref.md"&gt;Ref&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./28_project/28_project.md"&gt;project&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./29_explore/29_explore.md"&gt;Explore&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React./30_conclusions/30_conclusions.md"&gt;Conclusions&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;🧡🧡🧡 HAPPY CODING 🧡🧡🧡&lt;/p&gt;

&lt;div&gt;
Support the &lt;strong&gt;author&lt;/strong&gt; to create more educational materials &lt;br&gt;
&lt;a href="https://www.paypal.me/asabeneh" rel="nofollow"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dsv4stQV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/Asabeneh/30-Days-Of-React./images/paypal_lg.png" alt="Paypal Logo"&gt;&lt;/a&gt;
&lt;/div&gt;




&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React#introduction"&gt;Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React#requirements"&gt;Requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Asabeneh/30-Days-Of-React#how-to-use-repo"&gt;How to Use Repo&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React#star-and-fork-this-repo"&gt;Star and Fork this Repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React#clone-your-fork"&gt;Clone your Fork&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React#create-a-new-branch"&gt;Create a New Branch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Asabeneh/30-Days-Of-React#structure-exercise-solutions"&gt;Structure Exercise Solutions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Asabeneh/30-Days-Of-React#commit-exercise-solutions"&gt;Commit Exercise&lt;/a&gt;…&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Asabeneh/30-Days-Of-React"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  8. React World React Apps
&lt;/h2&gt;

&lt;p&gt;⭐ 2.7K&lt;br&gt;
This repository's &lt;code&gt;/app&lt;/code&gt; directory contains a plethora of open source real-world projects built by highly experienced React developers.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/jeromedalbert"&gt;
        jeromedalbert
      &lt;/a&gt; / &lt;a href="https://github.com/jeromedalbert/real-world-react-apps"&gt;
        real-world-react-apps
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Real world React apps and their open source codebases for developers to learn from
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-real-world-react-apps"&gt;&lt;a class="heading-link" href="https://github.com/jeromedalbert/real-world-react-apps#real-world-react-apps"&gt;Real world React apps&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;Real world React apps and their open source codebases for developers to learn from&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Learn from React apps written by experienced developers.&lt;/p&gt;
&lt;p&gt;You'll find the source code for the apps in the &lt;a href="https://github.com/jeromedalbert/real-world-react-appsapps/"&gt;&lt;code&gt;apps/&lt;/code&gt;&lt;/a&gt; subdirectory.&lt;/p&gt;
&lt;p&gt;Thank you to every developer who has worked on a project this repo links to, your work is helping developers learn React.&lt;/p&gt;
&lt;h2 id="user-content-how-to-install-on-your-computer"&gt;&lt;a class="heading-link" href="https://github.com/jeromedalbert/real-world-react-apps#how-to-install-on-your-computer"&gt;How to install on your computer&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Clone this git repo:&lt;/span&gt;
git clone git@github.com:jeromedalbert/real-world-react-apps.git

&lt;span class="pl-c1"&gt;cd&lt;/span&gt; real-world-react-apps/

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; The apps are linked to as git submodules.&lt;/span&gt;
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; This will take some time... (see comment below for possible speedup)&lt;/span&gt;
git submodule update --init

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; OR if you've got git 2.9+ installed try to run updates in parallel:&lt;/span&gt;
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; git submodule update --init --jobs 4&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2 id="user-content-how-you-can-analyze-the-apps"&gt;&lt;a class="heading-link" href="https://github.com/jeromedalbert/real-world-react-apps#how-you-can-analyze-the-apps"&gt;How you can analyze the apps&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Some of the examples below use &lt;a href="https://github.com/ggreer/the_silver_searcher"&gt;ag&lt;/a&gt;, but could just as well use grep or equivalent.&lt;/p&gt;
&lt;h4 id="user-content-global-searches"&gt;&lt;a class="heading-link" href="https://github.com/jeromedalbert/real-world-react-apps#global-searches"&gt;Global searches&lt;/a&gt;&lt;/h4&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Look for&lt;/span&gt;&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/jeromedalbert/real-world-react-apps"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  9. React Coding Challenges
&lt;/h2&gt;

&lt;p&gt;⭐ 2.1K&lt;br&gt;
As the name implies, this repository contains a curation of various React challenges ranging in difficulty level.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/alexgurr"&gt;
        alexgurr
      &lt;/a&gt; / &lt;a href="https://github.com/alexgurr/react-coding-challenges"&gt;
        react-coding-challenges
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A series of ReactJS coding challenges with a variety of difficulties. 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ac5d4fbd57fc7cff8996b214be5305997d514fe81b1f014115472cdccf00a5b5/68747470733a2f2f7075752e73682f4879726d562f393563343538643964392e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/ac5d4fbd57fc7cff8996b214be5305997d514fe81b1f014115472cdccf00a5b5/68747470733a2f2f7075752e73682f4879726d562f393563343538643964392e706e67" width="500"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id="user-content-️-looking-for-collaborators-️"&gt;&lt;a class="heading-link" href="https://github.com/alexgurr/react-coding-challenges#%EF%B8%8F-looking-for-collaborators-%EF%B8%8F"&gt;⭐️ Looking for collaborators ⭐️&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We're looking for people to come and help work on the latest challenge &lt;strong&gt;Coinbee&lt;/strong&gt;. If you're interested, get in touch via our slack community or via my website &lt;a href="https://alexgurr.com" rel="nofollow"&gt;alexgurr.com&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;A series of &lt;strong&gt;ReactJS coding challenges&lt;/strong&gt; with a variety of difficulties. Deep dive into the why &lt;a href="https://dev.to/alexgurr/react-coding-challenges-for-interviews-beginners-1hlk" rel="nofollow"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Interested in some React fundamentals / philosophies? Check out the &lt;a href="https://github.com/mithi/react-philosophies"&gt;react-philosophies&lt;/a&gt; GitHub repo.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id="user-content-sponsored"&gt;&lt;a class="heading-link" href="https://github.com/alexgurr/react-coding-challenges#sponsored"&gt;Sponsored&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b5f0a8ca746ef68575194b0d5ff4ae5392761806d25030dfad3b8b2f6cda85da/68747470733a2f2f7777772e74696d65746f657374696d6174652e636f6d2f66617669636f6e2e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/b5f0a8ca746ef68575194b0d5ff4ae5392761806d25030dfad3b8b2f6cda85da/68747470733a2f2f7777772e74696d65746f657374696d6174652e636f6d2f66617669636f6e2e706e67" width="50"&gt;&lt;/a&gt; &lt;a href="https://www.timetoestimate.com" rel="nofollow"&gt;Time To Estimate&lt;/a&gt;. A fun, simple way for agile teams to remotely estimate tasks together. Free, with no sign-up required.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/78c13a445ed7a4e7fc7173d7310a386a77e1b8f6325a7f07f80b7ce53d8de983/68747470733a2f2f7777772e6d69786d656c6c6f2e636f6d2f66617669636f6e2e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/78c13a445ed7a4e7fc7173d7310a386a77e1b8f6325a7f07f80b7ce53d8de983/68747470733a2f2f7777772e6d69786d656c6c6f2e636f6d2f66617669636f6e2e706e67" width="50"&gt;&lt;/a&gt; &lt;a href="https://www.mixmello.com" rel="nofollow"&gt;mixmello&lt;/a&gt;. Create remixed versions of your favourite Spotify playlists.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h2 id="user-content-the-challenges"&gt;&lt;a class="heading-link" href="https://github.com/alexgurr/react-coding-challenges#the-challenges"&gt;The Challenges&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="user-content-easy-"&gt;&lt;a class="heading-link" href="https://github.com/alexgurr/react-coding-challenges#easy-"&gt;Easy 🙂&lt;/a&gt;&lt;/h3&gt;
&lt;h5 id="user-content--rocket-ship"&gt;
&lt;a class="heading-link" href="https://github.com/alexgurr/react-coding-challenges#-rocket-ship"&gt;🚀 &lt;/a&gt;&lt;a href="https://github.com/alexgurr/react-coding-challenges/tree/master/rocket-ship"&gt;Rocket Ship&lt;/a&gt;
&lt;/h5&gt;
&lt;p&gt;Unnecessary re-renders, fine grained control.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id="user-content-medium-"&gt;&lt;a class="heading-link" href="https://github.com/alexgurr/react-coding-challenges#medium-"&gt;Medium 😐&lt;/a&gt;&lt;/h3&gt;
&lt;h5 id="user-content--dark-mode"&gt;
&lt;a class="heading-link" href="https://github.com/alexgurr/react-coding-challenges#-dark-mode"&gt;🌙 &lt;/a&gt;&lt;a href="https://github.com/alexgurr/react-coding-challenges/tree/master/dark-mode"&gt;Dark Mode&lt;/a&gt;
&lt;/h5&gt;
&lt;p&gt;State / shared state, DOM manipulation.&lt;/p&gt;
&lt;h5 id="user-content--coinbee-"&gt;&lt;a class="heading-link" href="https://github.com/alexgurr/react-coding-challenges#-coinbee-"&gt;🐝 Coinbee &lt;img src="https://camo.githubusercontent.com/05d774edbda20701c99fca81df4fb367ae0ba6f425b459f4290f73784a2451f9/68747470733a2f2f62616467656e2e6e65742f62616467652f7374617475732f636f6d696e67253230736f6f6e2f677265656e3f69636f6e3d" alt="soon"&gt;&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Data visualisation and graphing. API usage.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;h3 id="user-content-hard-"&gt;&lt;a class="heading-link" href="https://github.com/alexgurr/react-coding-challenges#hard-"&gt;Hard 😬&lt;/a&gt;&lt;/h3&gt;
&lt;h5 id="user-content--spootify"&gt;
&lt;a class="heading-link" href="https://github.com/alexgurr/react-coding-challenges#-spootify"&gt;🎧 &lt;/a&gt;&lt;a href="https://github.com/alexgurr/react-coding-challenges/tree/master/spootify"&gt;Spootify&lt;/a&gt;
&lt;/h5&gt;
&lt;p&gt;Loading state, API usage.&lt;/p&gt;
&lt;h5 id="user-content--chatter"&gt;
&lt;a class="heading-link" href="https://github.com/alexgurr/react-coding-challenges#-chatter"&gt;🤖 &lt;/a&gt;&lt;a href="https://github.com/alexgurr/react-coding-challenges/tree/master/chatter"&gt;Chatter&lt;/a&gt;
&lt;/h5&gt;
&lt;p&gt;Web sockets, events, callbacks &amp;amp; React hooks. Talks to &lt;a href="https://github.com/alexgurr/botty"&gt;Botty&lt;/a&gt;…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/alexgurr/react-coding-challenges"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  10. React TypeScript Cheatsheet
&lt;/h2&gt;

&lt;p&gt;⭐ 35.8K&lt;br&gt;
If you're a React developer learning TypeScript, this repository includes a variety of cheatsheets that you'll find extremely useful.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/typescript-cheatsheets"&gt;
        typescript-cheatsheets
      &lt;/a&gt; / &lt;a href="https://github.com/typescript-cheatsheets/react"&gt;
        react
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Cheatsheets for experienced React developers getting started with TypeScript
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-reacttypescript-cheatsheets"&gt;&lt;a class="heading-link" href="https://github.com/typescript-cheatsheets/react#reacttypescript-cheatsheets"&gt;React+TypeScript Cheatsheets&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Cheatsheets for experienced React developers getting started with TypeScript&lt;/p&gt;

&lt;a href="https://github.com/typescript-cheatsheets/react/issues/81"&gt;
  &lt;img height="90" width="90" alt="react + ts logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--D564PfCl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://user-images.githubusercontent.com/84442212/194379444-02e5ec69-5e6c-4100-bd7a-c31d628af29c.png"&gt;
&lt;/a&gt;
&lt;p&gt;&lt;a href="https://react-typescript-cheatsheet.netlify.app/docs/basic/setup" rel="nofollow"&gt;&lt;strong&gt;Web docs&lt;/strong&gt;&lt;/a&gt; |
&lt;a href="https://github.com/typescript-cheatsheets/react-typescript-cheatsheet-es"&gt;&lt;strong&gt;Español&lt;/strong&gt;&lt;/a&gt; |
&lt;a href="https://github.com/typescript-cheatsheets/react-pt"&gt;&lt;strong&gt;Português&lt;/strong&gt;&lt;/a&gt; |
&lt;a href="https://github.com/typescript-cheatsheets/react/blob/main/CONTRIBUTING.md"&gt;Contribute!&lt;/a&gt; |
&lt;a href="https://github.com/typescript-cheatsheets/react/issues/new/choose"&gt;Ask!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;👋 This repo is maintained by &lt;a href="https://twitter.com/swyx" rel="nofollow"&gt;@swyx&lt;/a&gt;, &lt;a href="https://twitter.com/sebsilbermann" rel="nofollow"&gt;@eps1lon&lt;/a&gt; and &lt;a href="https://twitter.com/tammergard" rel="nofollow"&gt;@filiptammergard&lt;/a&gt;. We're so happy you want to try out TypeScript with React! If you see anything wrong or missing, please &lt;a href="https://github.com/typescript-cheatsheets/react/issues/new/choose"&gt;file an issue&lt;/a&gt;! 👍&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/typescript-cheatsheets/react/CONTRIBUTORS.md"&gt;&lt;img src="https://camo.githubusercontent.com/dd626eff77f4d95232200c911cadc7dcbd2e39d5282e21b50138850782c52ba3/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f636f6e7472696275746f72732f747970657363726970742d63686561747368656574732f72656163742d747970657363726970742d636865617473686565743f636f6c6f723d6f72616e6765267374796c653d666c61742d737175617265" alt="All Contributors"&gt;&lt;/a&gt; | &lt;a href="https://discord.gg/wTGS5z9" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/9908ddfa0808b3fac2a1bd2ae6b09528047095ceb78813969f0ce3744f8180a8/68747470733a2f2f696d672e736869656c64732e696f2f646973636f72642f3530383335373234383333303736303234332e7376673f6c6162656c3d266c6f676f3d646973636f7264266c6f676f436f6c6f723d66666666666626636f6c6f723d373338394438266c6162656c436f6c6f723d364137454332" alt="Discord"&gt;&lt;/a&gt; | &lt;a href="http://twitter.com/home?status=Awesome%20%40Reactjs%20%2B%20%40TypeScript%20cheatsheet%20by%20%40ferdaber%2C%20%40sebsilbermann%2C%20%40swyx%20%26%20others!%20https%3A%2F%2Fgithub.com%2Ftypescript-cheatsheets%2Freact" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/b236b49688d81d997005bb9eb12036af6c79c92f58737f1dcabb495c4670fc6c/68747470733a2f2f696d672e736869656c64732e696f2f747769747465722f75726c3f6c6162656c3d48656c70253230737072656164253230746865253230776f7264253231267374796c653d736f6369616c2675726c3d68747470732533412532462532466769746875622e636f6d253246747970657363726970742d63686561747368656574732532467265616374" alt="Tweet"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="user-content-all-react--typescript-cheatsheets"&gt;&lt;a class="heading-link" href="https://github.com/typescript-cheatsheets/react#all-react--typescript-cheatsheets"&gt;All React + TypeScript Cheatsheets&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://react-typescript-cheatsheet.netlify.app/docs/basic/setup" rel="nofollow"&gt;The Basic Cheatsheet&lt;/a&gt; is focused on helping React devs just start using TS in React &lt;strong&gt;apps&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Focus on opinionated best practices, copy+pastable examples.&lt;/li&gt;
&lt;li&gt;Explains some basic TS types usage and setup along the way.&lt;/li&gt;
&lt;li&gt;Answers the most Frequently Asked Questions.&lt;/li&gt;
&lt;li&gt;Does not cover generic type logic in detail. Instead we prefer to teach simple troubleshooting techniques for newbies.&lt;/li&gt;
&lt;li&gt;The goal is to get effective with TS without learning &lt;em&gt;too much&lt;/em&gt; TS.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://react-typescript-cheatsheet.netlify.app/docs/advanced" rel="nofollow"&gt;The Advanced Cheatsheet&lt;/a&gt; helps show and explain advanced usage of generic types for people writing…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/typescript-cheatsheets/react"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;That's it for this article.&lt;/p&gt;

&lt;p&gt;If you found it useful, consider following me on &lt;a href="https://twitter.com/langford_dev"&gt;Twitter&lt;/a&gt; and signing up for my weekly &lt;a href="https://www.getrevue.co/profile/langford_dev"&gt;newsletter&lt;/a&gt; for more web developer content.&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>github</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Create A Custom Mouse Pointer in HTML, CSS and JavaScript 👆</title>
      <dc:creator>langford</dc:creator>
      <pubDate>Tue, 16 Aug 2022 15:18:00 +0000</pubDate>
      <link>https://dev.to/langf00rd/create-a-custom-mouse-pointer-in-html-css-and-javascript-491l</link>
      <guid>https://dev.to/langf00rd/create-a-custom-mouse-pointer-in-html-css-and-javascript-491l</guid>
      <description>&lt;p&gt;In this tutorial, we'll see how to transform the standard mouse pointer into a fancy emoji that changes style when we click.&lt;/p&gt;

&lt;p&gt;I will post a complete video tutorial on my &lt;a href="https://www.youtube.com/langforddev"&gt;YouTube channel&lt;/a&gt;, and you can view it there.&lt;/p&gt;

&lt;p&gt;With that said, let's get coding!&lt;/p&gt;

&lt;h2&gt;
  
  
  What we'll be building
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b5oab2bO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w9d0lhubk9vpf9ylc6hq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b5oab2bO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w9d0lhubk9vpf9ylc6hq.gif" alt="gif of final project" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Start by creating these three files; &lt;code&gt;index.html&lt;/code&gt;, &lt;code&gt;styles.css&lt;/code&gt;, and &lt;code&gt;script.js&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The HTML Structure
&lt;/h3&gt;

&lt;p&gt;Create the standard HTML boilerplate code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;title&amp;gt;Custom Mouse Pointer&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;Then, in the &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tag of our HTML file, we import the &lt;code&gt;styles.css&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;link rel="stylesheet" href="styles.css" /&amp;gt;
        &amp;lt;title&amp;gt;Custom Mouse Pointer&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Import the JavaScript file by setting the &lt;code&gt;src&lt;/code&gt; of the &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag at the bottom of our HTML file to our &lt;code&gt;script.js&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;link rel="stylesheet" href="styles.css" /&amp;gt;
        &amp;lt;title&amp;gt;Custom Mouse Pointer&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;script src="script.js"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, create a div with the class &lt;code&gt;pointer&lt;/code&gt;. This element will be used in place of the default cursor. And since it’s an html element, we can apply numerous styles to it&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;link rel="stylesheet" href="styles.css" /&amp;gt;
        &amp;lt;title&amp;gt;Custom Mouse Pointer&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;div class="pointer"&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;script src="script.js"&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all there is to the HTML file! You should get an empty page when you open the &lt;code&gt;index.html&lt;/code&gt; file in your browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  Styling Our HTML
&lt;/h3&gt;

&lt;p&gt;First, we set the background of our webpage to a light purplish color.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body {
    background: #8499ff;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We set the webpage's height and width to the maximum height and width of the device that is viewing the page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body {
    ...
    height: 100vh;
    width: 100vw;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, by setting the &lt;code&gt;overflow&lt;/code&gt; property to &lt;code&gt;none&lt;/code&gt;, we prevent vertical and horizontal scrolling.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body {
    ...
    overflow: hidden;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, we hide the pointer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body {
    ...
    cursor: none;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should have this for the &lt;code&gt;body&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;body {
    background: #8499ff;
    height: 100vh;
    width: 100vw;
    overflow: hidden;
    cursor: none;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We're now going to style the &lt;code&gt;pointer&lt;/code&gt;. We will not style the pointer directly but rather the &lt;code&gt;::after&lt;/code&gt; pseudo-class.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;::after&lt;/code&gt; pseudo-class selects content that comes after a selected element—allowing you to insert text after a specific tag, which is what we'll do in this tutorial.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.pointer::after {
    content: "🤩";
    font-size: 40px;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We set the &lt;code&gt;content&lt;/code&gt; property in the code above to an emoji (🤩). This emoji will be our default cursor icon. The size is then increased to &lt;code&gt;40px&lt;/code&gt; to make it a little bigger.&lt;/p&gt;

&lt;p&gt;We change the default emoji every time the mouse is clicked to (😜). The class &lt;code&gt;pointer-clicked&lt;/code&gt; is created to accomplish this. This class will be assigned to the pointer in the JavaScript.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.pointer-clicked::after {
    content: '😜';
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adding functionality with JavaScript
&lt;/h3&gt;

&lt;p&gt;First select the pointer we created in the HTML with the &lt;code&gt;document.querySelector()&lt;/code&gt; method&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const pointer = document.querySelector(".pointer");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have to listen for these two mouse events:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mousemove&lt;/strong&gt;: When the mouse pointer is moved&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mousedown&lt;/strong&gt;: When the mouse pointer is clicked/pressed down
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;window.addEventListener("mousemove", onPointerMove);
window.addEventListener("mousedown", onMouseClick);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lets create the callback functions for these event listeners.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const onPointerMove = (e) =&amp;gt; {
    // on pointer move
}

const onMouseClick = () =&amp;gt; {
    // on mouse click
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the actual pointer moves, we want to get its position and pass it to the pointer element we created in HTML.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const onPointerMove = (e) =&amp;gt; {
    const mouseY = e.clientY;
    const mouseX = e.clientX;
    pointer.style.transform = `translate3d(${mouseX}px, ${mouseY}px, 0)`;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;clientY&lt;/code&gt; returns the vertical coordinate of the pointer relative to the viewport. The &lt;code&gt;clientX&lt;/code&gt; property, on the other hand, returns the horizontal coordinate. &lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;pointer.style.transform&lt;/code&gt; line, we change the location of the custom pointer by assigning it the coordinates of the actual cursor. Smart move! 😊&lt;/p&gt;

&lt;p&gt;When the mouse clicks, we add a new class called &lt;code&gt;pointer-clicked&lt;/code&gt;. And then remove this newly created class after 150 milliseconds in the &lt;code&gt;setTimeout&lt;/code&gt; function, resolving the pointer to its default state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const onMouseClick = () =&amp;gt; {
    pointer.classList.add('pointer-clicked')
    setTimeout(() =&amp;gt; {
        pointer.classList.remove('pointer-clicked')
    }, 150)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At the end of everything, the &lt;code&gt;script.js&lt;/code&gt; file should have this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const pointer = document.querySelector('.pointer');

const onPointerMove = (e) =&amp;gt; {
    const mouseY = e.clientY;
    const mouseX = e.clientX;
    pointer.style.transform = `translate3d(${mouseX}px, ${mouseY}px, 0)`;
}

const onMouseClick = () =&amp;gt; {
    pointer.classList.add('pointer-clicked')
    setTimeout(() =&amp;gt; {
        pointer.classList.remove('pointer-clicked')
    }, 150)
}

window.addEventListener("mousemove", onPointerMove);
window.addEventListener("mousedown", onMouseClick);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now opening the &lt;code&gt;index.html&lt;/code&gt; in your browser, you should see this!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b5oab2bO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w9d0lhubk9vpf9ylc6hq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b5oab2bO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w9d0lhubk9vpf9ylc6hq.gif" alt="gif of final project" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code is available on &lt;a href="https://github.com/langford-dev/custom-mouse-pointer/tree/main"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;That's it for this article.&lt;/p&gt;

&lt;p&gt;If you found this article useful, consider following me on &lt;a href="https://twitter.com/langford_dev"&gt;Twitter&lt;/a&gt; and signing up for my weekly &lt;a href="https://www.getrevue.co/profile/langford_dev"&gt;newsletter&lt;/a&gt; for web and software development content.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
      <category>css</category>
      <category>html</category>
    </item>
    <item>
      <title>Best Books For Learning Web Development 📚</title>
      <dc:creator>langford</dc:creator>
      <pubDate>Mon, 15 Aug 2022 14:27:00 +0000</pubDate>
      <link>https://dev.to/langf00rd/best-books-for-learning-web-development-42c7</link>
      <guid>https://dev.to/langf00rd/best-books-for-learning-web-development-42c7</guid>
      <description>&lt;p&gt;Tutorial videos and online courses are the most popular ways to learn almost anything. However, a fraction of people prefers reading from a physical book. If you fall into this category and want to learn web development, this article is for you.&lt;/p&gt;

&lt;p&gt;We'll go over the best and most highly recommended books for learning and mastering web development. Let's get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. HTML &amp;amp; CSS, and JavaScript &amp;amp; JQuery by Jon Duckett
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jQqHiVrW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qdkkalai6mhrzdv4gx0t.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jQqHiVrW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qdkkalai6mhrzdv4gx0t.jpeg" alt="image of the HTML &amp;amp; CSS, and JavaScript &amp;amp; JQuery by Jon Duckett book" width="250" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This book deserves to be at the top of this list. It is, without a doubt, one of the most popular web development books among the tech community. &lt;/p&gt;

&lt;p&gt;It is well written and simple to understand, especially for beginners.&lt;/p&gt;

&lt;p&gt;This book is also available in digital format on the internet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://amzn.to/2OYVKPG"&gt;Get it on Amazon&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.pdfdrive.com/javascript-and-jquery-interactive-front-end-web-development-e195248768.html"&gt;Download here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Eloquent JavaScript, 3rd Edition: A Modern Introduction to Programming
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pwYTDbkq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ib32ntaowk0klilromh3.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pwYTDbkq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ib32ntaowk0klilromh3.jpeg" alt="image of the Eloquent JavaScript book" width="250" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Written by Marijn Haverbeke, Eloquent JavaScript is known as The Best JavaScript Book. It is centered around beginners and teaches you JavaScript from the basics to the more complex topics. It employs a practical method of teaching by building mini projects and simple games so you can further understand JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eloquentjavascript.net/"&gt;Read online here&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.amazon.com/Eloquent-JavaScript-3rd-Introduction-Programming/dp/1593279507/ref=nodl_#"&gt;Get on Amazon&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. HTML and CSS Learn The Fundamentals In 7 days by Michael Knapp
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lH2hbX4H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gczqz9fig4jmz7rkdl93.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lH2hbX4H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gczqz9fig4jmz7rkdl93.png" alt="Image of the HTML and CSS Learn The Fundamentals In 7 days by Knapp book" width="188" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s why I love this book:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It is geared toward beginners&lt;/li&gt;
&lt;li&gt;Doesn’t require the reader to have any prior web development experience at all&lt;/li&gt;
&lt;li&gt;Is excellent for starting your web development journey&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This book touches on almost everything there is to know about HTML and CSS. Knapp teaches basic HTML structure, hacking together a website, analytics, and SEO.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/HTML-CSS-Learn-Fundaments-Days/dp/1393794653/ref=nodl_?dplnkId=62480ce9-2ddf-4b77-a7ec-fde5bf8e02d8"&gt;Get on Amazon&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.pdfdrive.com/html-and-css-learn-the-fundaments-in-7-days-e176042952.html"&gt;Download here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. A beginner’s guide to HTML, CSS, Javascript, and Web Graphics, by Jennifer Niederst Robbins
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ozTPju2Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gju6v6zc6bed306jlyda.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ozTPju2Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gju6v6zc6bed306jlyda.jpeg" alt="Image of the A beginner’s guide to HTML, CSS, Javascript, and Web Graphics book" width="410" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This book, which has over 500 pages, breaks down concepts such as how the web and web pages work before delving into HTML, CSS, JavaScript, Responsive Design, and web graphics.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pdfdrive.com/learning-web-design-a-beginners-guide-to-html-css-javascript-and-web-graphics-e156930607.html"&gt;Download here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Kyle Simpson’s You Don’t Know JS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sdtok_0e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w4yjdby50dlslycyo2dn.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sdtok_0e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w4yjdby50dlslycyo2dn.jpeg" alt="Image of Kyle Simpson’s You Don’t Know JS" width="333" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You Don't Know JS is a series of smaller books that cover different topics and delve deeply into the core mechanics of the JavaScript language.&lt;/p&gt;

&lt;p&gt;This book is an excellent recommendation if you’re a beginner.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pdfdrive.com/you-dont-know-js-e32591583.html"&gt;Download here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Bonus: The Clean Coder by Robert Martin
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_aoWyovA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vnx4u5uecinx51ta1oo7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_aoWyovA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vnx4u5uecinx51ta1oo7.jpeg" alt="Image of The Clean Coder by Robert Martin" width="250" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Based on the title, you've probably guessed what this book is about. You are correct! It's all about writing clean code. Robert Martin teaches us the art of writing clean, readable code, as well as tips on how to advance in your developer career.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pdfdrive.com/the-clean-coder-d51117520.html"&gt;Download here&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;That's it for this article.&lt;/p&gt;

&lt;p&gt;If you found this article useful, consider following me on &lt;a href="https://twitter.com/langford_dev"&gt;Twitter&lt;/a&gt; and signing up for my weekly &lt;a href="https://www.getrevue.co/profile/langford_dev"&gt;newsletter&lt;/a&gt; for web and software development content.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>productivity</category>
      <category>career</category>
      <category>learn</category>
    </item>
    <item>
      <title>How To Create A React Component Library ⚛️</title>
      <dc:creator>langford</dc:creator>
      <pubDate>Sun, 14 Aug 2022 18:14:00 +0000</pubDate>
      <link>https://dev.to/langf00rd/how-to-create-a-react-component-library-4ei7</link>
      <guid>https://dev.to/langf00rd/how-to-create-a-react-component-library-4ei7</guid>
      <description>&lt;p&gt;If you're reading this, I assume you're familiar with UI component libraries such as Material UI, Ant Design, Semantic UI, Chakra UI, and others. These libraries provide components like Buttons, Popups, Labels. Spinners, Loaders, etc.&lt;/p&gt;

&lt;p&gt;Luckily, setting up a similar React UI component library is pretty simple, allowing you to create reusable components that can be imported and used in any React project. This article will walk you through the process of creating your very own React component library step by step.&lt;/p&gt;

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

&lt;p&gt;Creating our folder structure may be difficult, so we will take the easy way out by using the CLI tool &lt;a href="https://www.npmjs.com/package/create-react-library"&gt;create-react-library&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This tool configures our project with Rollup, Babel, and Jest for bundling, transpiling, and testing. It also allows our project to support TypeScript, complex peer dependencies, and CSS modules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing create-react-library
&lt;/h2&gt;

&lt;p&gt;This package requires Node version 10 or higher. The most recent Node version can be downloaded from the official NodeJs &lt;a href="https://nodejs.org/download/release/latest/"&gt;downloads page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Install &lt;code&gt;create-react-library&lt;/code&gt; by running the following command from your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g create-react-library 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Creating our project
&lt;/h2&gt;

&lt;p&gt;Now that we've installed &lt;code&gt;create-react-library&lt;/code&gt;, we can run the command below to create our project. For this tutorial, we'll name our project as &lt;code&gt;test-library&lt;/code&gt;. You can change the name to whatever you want.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;create-react-library test-library
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or with npx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx create-react-library test-library
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will be required to enter a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Package Name&lt;/li&gt;
&lt;li&gt;Package Description&lt;/li&gt;
&lt;li&gt;Author's GitHub Handle&lt;/li&gt;
&lt;li&gt;GitHub Repo Path&lt;/li&gt;
&lt;li&gt;License&lt;/li&gt;
&lt;li&gt;Package Manager&lt;/li&gt;
&lt;li&gt;Template&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After the installation is done, open the newly created project in your text editor, you should have a similar folder and file structure as seen in the screenshot below. If something doesn't seem right, repeat the preceding command.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eK7DLvlJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/follio/image/upload/v1660492811/escfkqzapfvjvnzerl59.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eK7DLvlJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/follio/image/upload/v1660492811/escfkqzapfvjvnzerl59.png" alt="project folder structure screenshot" width="523" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The package creates a local repository and links the packages together, allowing us to view and test our components locally. That's pretty cool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Development
&lt;/h2&gt;

&lt;p&gt;Our local development is divided into two separate parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using rollup to watch and compile our code from &lt;code&gt;src/&lt;/code&gt; into the &lt;code&gt;dist/&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;Running and listening from changes in the &lt;code&gt;example/&lt;/code&gt; react project&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Running the example react app
&lt;/h3&gt;

&lt;p&gt;A basic react app that has already been linked to the library we're creating can be found in the &lt;code&gt;example/&lt;/code&gt; folder. Start the react app dev server by:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd example # change directory into the example/ folder
npm start # runs a dev server for the react app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might get an error like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  ...
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you do, open the &lt;code&gt;package.json&lt;/code&gt; file in the &lt;code&gt;example/&lt;/code&gt; folder and change the default script object to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
    "start": "node ../node_modules/react-scripts/bin/react-scripts.js --openssl-legacy-provider start",
    "build": "node ../node_modules/react-scripts/bin/react-scripts.js --openssl-legacy-provider build",
    "test": "node ../node_modules/react-scripts/bin/react-scripts.js --openssl-legacy-provider test",
    "eject": "node ../node_modules/react-scripts/bin/react-scripts.js --openssl-legacy-provider eject"
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you navigate to &lt;code&gt;localhost:3000/&lt;/code&gt; in your preferred browser, you should see this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v64jCbSz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/follio/image/upload/v1660494275/uqity9ghrcocaxgqlrny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v64jCbSz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/follio/image/upload/v1660494275/uqity9ghrcocaxgqlrny.png" alt="react app" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Running the component’s code
&lt;/h3&gt;

&lt;p&gt;In the base directory, run this to watch for changes and compile the code from our &lt;code&gt;src/&lt;/code&gt; folder in real-time&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm start # runs rollup with the watch flag
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Component's Code
&lt;/h2&gt;

&lt;p&gt;A sample component &lt;code&gt;ExampleComponent&lt;/code&gt; has been created for us in the base directory's &lt;code&gt;src/&lt;/code&gt; folder. This component takes a &lt;code&gt;text&lt;/code&gt; property and renders a simple UI, as seen in the browser.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react'
import styles from './styles.module.css'

export const ExampleComponent = ({ text }) =&amp;gt; {
  return &amp;lt;div className={styles.test}&amp;gt;Example Component: {text}&amp;lt;/div&amp;gt;
}

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

&lt;/div&gt;



&lt;p&gt;The styles for the component can be found in the &lt;code&gt;styles.module.css&lt;/code&gt; file. From here, you can style your component however you want.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* add css module styles here (optional) */

.test {
  margin: 2em;
  padding: 0.5em;
  border: 2px solid #000;
  font-size: 2em;
  text-align: center;
}

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

&lt;/div&gt;



&lt;p&gt;Our component(s)' compiled code can be found in the dist folder. This is the folder we’ll be deploying to npm.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rzmUvCBE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/follio/image/upload/v1660495468/scwtx4wozwot0bmyhsyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rzmUvCBE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://res.cloudinary.com/follio/image/upload/v1660495468/scwtx4wozwot0bmyhsyc.png" alt="Dist folder screenshot" width="511" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Importing Our Library
&lt;/h2&gt;

&lt;p&gt;In the &lt;code&gt;example/src/App.js&lt;/code&gt; file, our library is imported together with the CSS file containing all of our stylings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react'

import { ExampleComponent } from 'test-library'
import 'test-library/dist/index.css'

const App = () =&amp;gt; {
  return &amp;lt;ExampleComponent text="Create React Library Example 😄" /&amp;gt;
}

export default App

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Publishing our project to npm
&lt;/h2&gt;

&lt;p&gt;We run the following command to generate a &lt;code&gt;commonjs&lt;/code&gt; and &lt;code&gt;es&lt;/code&gt; version of our code, push it to the &lt;code&gt;dist/&lt;/code&gt; folder, and publish it to npm:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Thats it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploying to GitHub Pages
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates a build version of our &lt;code&gt;example/&lt;/code&gt; React app in which we imported and displayed our components. It will be pushed to our GitHub repo, and a GitHub page will be created.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final words
&lt;/h2&gt;

&lt;p&gt;That’s it! We've created our very own react component library that can be imported and used in any react project.&lt;/p&gt;

&lt;p&gt;Milky UI is an open source react UI component project I'm working on. I created the project using the same method. The code is available on &lt;a href="https://github.com/langford-dev/milky-ui/"&gt;GitHub&lt;/a&gt;. It is also available on &lt;a href="https://www.npmjs.com/package/milky-ui"&gt;npm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope you found this post useful. See you in the next article&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>showdev</category>
    </item>
    <item>
      <title>CSS Rainbow Text Animation 🌈</title>
      <dc:creator>langford</dc:creator>
      <pubDate>Sat, 13 Aug 2022 22:11:00 +0000</pubDate>
      <link>https://dev.to/langf00rd/css-rainbow-text-animation-4p5d</link>
      <guid>https://dev.to/langf00rd/css-rainbow-text-animation-4p5d</guid>
      <description>&lt;p&gt;In this tutorial, we'll make a simple CSS rainbow text animation.&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%2Ffollio%2Fimage%2Fupload%2Fc_fit%2Ch_333%2Cw_1371%2Fv1656066767%2Fanuhitikp1nca91yrvsi.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%2Fres.cloudinary.com%2Ffollio%2Fimage%2Fupload%2Fc_fit%2Ch_333%2Cw_1371%2Fv1656066767%2Fanuhitikp1nca91yrvsi.gif" alt="css rainbow text animation gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/langfordquarshie21/superdev-code-snippets/tree/main/css-text-animation" rel="noopener noreferrer"&gt;Click here&lt;/a&gt; to checkout the source code for this tutorial.&lt;/p&gt;

&lt;h2&gt;
  
  
  HTML
&lt;/h2&gt;

&lt;p&gt;In the &lt;code&gt;index.html&lt;/code&gt; file, we'll only need an &lt;code&gt;h1&lt;/code&gt; tag with text.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h1&amp;gt;Superdev.&amp;lt;/h1&amp;gt;

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  CSS
&lt;/h2&gt;

&lt;p&gt;Our CSS file will include the &lt;code&gt;h1&lt;/code&gt;'s basic styling as well as the code for animating the text.&lt;/p&gt;

&lt;h3&gt;
  
  
  Styling the text
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;h1 {
    background-clip: text;
    background: url('https://vivaldi.com/wp-content/uploads/colors-1024x656.png');
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    animation: text 3s linear infinite;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because no animations have been applied up to this point, our text will look like this:&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%2Fres.cloudinary.com%2Ffollio%2Fimage%2Fupload%2Fv1656068408%2Ffxkge2bktl3fagdn3tts.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%2Fres.cloudinary.com%2Ffollio%2Fimage%2Fupload%2Fv1656068408%2Ffxkge2bktl3fagdn3tts.jpg" alt="css rainbow text without animation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding animations
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@keyframes text {
    0% {
        background-position: 0% 50%;
    }

    50% {
        background-position: 100% 100%;
    }

    100% {
        background-position: 0% 50%;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  That's it 🎉
&lt;/h2&gt;

&lt;p&gt;You should see something like this when you open the &lt;code&gt;index.html&lt;/code&gt; file in your 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%2Fres.cloudinary.com%2Ffollio%2Fimage%2Fupload%2Fc_fit%2Ch_333%2Cw_1371%2Fv1656066767%2Fanuhitikp1nca91yrvsi.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%2Fres.cloudinary.com%2Ffollio%2Fimage%2Fupload%2Fc_fit%2Ch_333%2Cw_1371%2Fv1656066767%2Fanuhitikp1nca91yrvsi.gif" alt="css rainbow text animation gif"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
