<?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: Michael</title>
    <description>The latest articles on DEV Community by Michael (@d1020).</description>
    <link>https://dev.to/d1020</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%2F507252%2Fbda3e589-1dcc-4f45-8050-f3c38b216b15.png</url>
      <title>DEV Community: Michael</title>
      <link>https://dev.to/d1020</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/d1020"/>
    <language>en</language>
    <item>
      <title>How Rompt Helped Me Optimize My GPT-Powered Product Through Massive A/B Testing</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Fri, 12 May 2023 20:18:55 +0000</pubDate>
      <link>https://dev.to/d1020/how-rompt-helped-me-optimize-my-gpt-powered-product-through-massive-ab-testing-3o69</link>
      <guid>https://dev.to/d1020/how-rompt-helped-me-optimize-my-gpt-powered-product-through-massive-ab-testing-3o69</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;One of the main challenges developers of AI-powered products face is refining the prompts that power my GPT-based applications. Fine-tuning prompts is a guessing game that involves intuition and trial and error, but that's where &lt;a href="https://rompt.ai"&gt;Rompt&lt;/a&gt; comes in.&lt;/p&gt;

&lt;p&gt;Rompt is a platform that allows developers to perform massive A/B tests for the GPT prompts used in their applications. In this article, I'll share my experience using Rompt and how it helped me optimize the prompts for my AI-powered product.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EG96xfxX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0pbqoh13808wkseitvvr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EG96xfxX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0pbqoh13808wkseitvvr.png" alt="Hero image rompt.ai" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up experiments
&lt;/h2&gt;

&lt;p&gt;The first step in using Rompt is inputting a set of potentially optimal prompts. These prompts can have embedded variables, which are wrapped in curly brackets. For instance, my initial prompt was: "Write a summary of the {book_title} book."&lt;/p&gt;

&lt;p&gt;Next, I had to set the experiment parameters, which included:&lt;/p&gt;

&lt;h2&gt;
  
  
  Assigning models to each prompt
&lt;/h2&gt;

&lt;p&gt;Defining a set of possible values for the variables in the prompts&lt;br&gt;
Specifying the number of outputs to generate for each prompt&lt;br&gt;
In my case, I assigned the GPT-4 model to my prompt, set the book_title variable to a list of popular book titles, and requested 10 outputs for each prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Blind rating of generated outputs
&lt;/h2&gt;

&lt;p&gt;Once Rompt generated the outputs, I received a flat list of responses without any indication of the source prompt. This blind rating system ensured that I could evaluate the quality of each output based solely on its appropriateness for my product, without any bias towards a specific prompt.&lt;/p&gt;

&lt;p&gt;As I went through the list, I rated each output on a scale of 1 to 5, with 1 being the least appropriate and 5 being the most appropriate.&lt;/p&gt;

&lt;p&gt;Identifying the highest-performing source prompts&lt;br&gt;
After I completed rating all the outputs, Rompt revealed a list of the highest-performing source prompts. This allowed me to identify the prompts that generated the most appropriate responses for my product.&lt;/p&gt;

&lt;p&gt;With this information, I could make data-driven decisions about which prompts to use in my AI-powered application, ultimately leading to better user experiences and more relevant content generation.&lt;/p&gt;

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

&lt;p&gt;Rompt is a valuable tool for developers working with GPT-powered applications. It takes the guesswork out of optimizing prompts by enabling massive A/B testing, blind rating, and data-driven decision-making. As a user, I found Rompt easy to use, and it saved me countless hours that I would have spent manually testing and tweaking prompts. If you're a developer looking to improve the quality of your AI-generated content, give &lt;a href="https://rompt.ai"&gt;Rompt&lt;/a&gt; a try.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w2zkqD9B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/io7bdyjzbf6uwkq75uos.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w2zkqD9B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/io7bdyjzbf6uwkq75uos.png" alt="Final output rompt.ai" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>gpt3</category>
      <category>openai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>strz – Very Strongly Typed String Functions</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Fri, 14 Apr 2023 15:00:00 +0000</pubDate>
      <link>https://dev.to/d1020/strz-very-strongly-typed-string-functions-58on</link>
      <guid>https://dev.to/d1020/strz-very-strongly-typed-string-functions-58on</guid>
      <description>&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/dilan-dio4"&gt;
        dilan-dio4
      &lt;/a&gt; / &lt;a href="https://github.com/dilan-dio4/strz"&gt;
        strz
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      💪 Very strongly typed string functions in TypeScript
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
&lt;code&gt;strz&lt;/code&gt; – &lt;em&gt;Very&lt;/em&gt; Strongly Typed String Functions&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
0️⃣ No dependencies&lt;/li&gt;
&lt;li&gt;
🌲 Tree shakable&lt;/li&gt;
&lt;li&gt;
📦 Small&lt;/li&gt;
&lt;li&gt;
5️⃣ Typescript 5&lt;/li&gt;
&lt;li&gt;
📝 Strongly typed&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Why?&lt;/h3&gt;
&lt;p&gt;In projects that encourage strong typing, the standard library requires manually casting to match function parameter signatures. &lt;code&gt;strz&lt;/code&gt; brings the power of strong typing to the standard library.&lt;/p&gt;
&lt;h3&gt;
Example&lt;/h3&gt;
&lt;div class="highlight highlight-source-ts notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt; &lt;span class="pl-s1"&gt;split&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s1"&gt;suffix&lt;/span&gt; &lt;span class="pl-kos"&gt;}&lt;/span&gt; &lt;span class="pl-k"&gt;from&lt;/span&gt; &lt;span class="pl-s"&gt;'strz'&lt;/span&gt;
&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;str&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-s"&gt;"The quick brown fox jumps over the lazy dog"&lt;/span&gt;

&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;splitStr&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;split&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;str&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s"&gt;" "&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-c"&gt;// splitStr is of type ["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]&lt;/span&gt;
&lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-s1"&gt;suffixed&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-en"&gt;suffix&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-s1"&gt;str&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-s"&gt;"!"&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt; &lt;span class="pl-c"&gt;// suffixed is of type "The quick brown fox jumps over the lazy dog!"&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
Installation&lt;/h3&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install strz&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
Usage&lt;/h3&gt;
&lt;div class="highlight highlight-source-ts notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
  &lt;span class="pl-s1"&gt;charAt&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-s1"&gt;toLowerCase&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-s1"&gt;toUpperCase&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-s1"&gt;toArray&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-s1"&gt;slice&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-s1"&gt;uncapitalize&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-s1"&gt;capitalize&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-s1"&gt;prefix&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-s1"&gt;suffix&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-s1"&gt;split&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-s1"&gt;trim&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-s1"&gt;trimStart&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-s1"&gt;trimEnd&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/dilan-dio4/strz"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>typescript</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>How To Accept Crypto Payments in Your SaaS With Keagate</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Mon, 18 Jul 2022 12:47:40 +0000</pubDate>
      <link>https://dev.to/d1020/how-to-accept-crypto-payments-in-your-saas-with-keagate-56ge</link>
      <guid>https://dev.to/d1020/how-to-accept-crypto-payments-in-your-saas-with-keagate-56ge</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/dxMZIbeRJac"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dilan-dio4/Keagate"&gt;Keagate Repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dilan-dio4.github.io/keagate-example-swagger/"&gt;Keagate API&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Keagate: Open-source, high-performance alternative to Coinbase Commerce &amp; CoinGate.</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Sun, 10 Jul 2022 22:59:57 +0000</pubDate>
      <link>https://dev.to/d1020/keagate-open-source-high-performance-alternative-to-coinbase-commerce-coingate-2h40</link>
      <guid>https://dev.to/d1020/keagate-open-source-high-performance-alternative-to-coinbase-commerce-coingate-2h40</guid>
      <description>&lt;p&gt;&lt;em&gt;tldr – &lt;a href="https://github.com/dilan-dio4/Keagate#instant-payment-notifications"&gt;Keagate&lt;/a&gt; is an open-source cryptocurrency payment gateway for multiple currencies.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;There's a couple reasons that Keagate is the superior method for accepting crypto payment. To name a few; no fees or middle, multiple coins available, open-source, etc...&lt;/p&gt;

&lt;p&gt;The payment workflow can be &lt;a href="https://dilan-dio4.github.io/keagate-example-swagger/"&gt;api-driven&lt;/a&gt; or utilize the built in invoice interface.&lt;/p&gt;

&lt;p&gt;Example invoice: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pspVt59h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8o7ek5q96hp5p2czm3bq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pspVt59h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8o7ek5q96hp5p2czm3bq.png" alt="Keagate invoice" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To use Keagate in your next project, there's two installation methods.&lt;/p&gt;

&lt;p&gt;1 – One-liner in Unix environments&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-sSL&lt;/span&gt; https://raw.githubusercontent.com/dilan-dio4/Keagate/main/packages/scripts/keagate.sh&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2 – Manual installation, &lt;a href="https://github.com/dilan-dio4/Keagate#manual-installation"&gt;as seen here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Lastly, proceed through the configuration helper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node packages/scripts/build/configure.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More information is available on the &lt;a href="https://github.com/dilan-dio4/Keagate"&gt;Github&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>blockchain</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>A collection of the best HTTP clients for various languages</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Thu, 24 Feb 2022 19:31:08 +0000</pubDate>
      <link>https://dev.to/d1020/a-collection-of-the-best-http-clients-for-various-languages-42j</link>
      <guid>https://dev.to/d1020/a-collection-of-the-best-http-clients-for-various-languages-42j</guid>
      <description>&lt;p&gt;Hello fellow developers! We're making an &lt;em&gt;Awesome *&lt;/em&gt; list of the best HTTP clients for different languages and frameworks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/easybase/awesome-http"&gt;The list is &lt;code&gt;awesome-http&lt;/code&gt; and can be seen here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Please contribute any of your ideas&lt;/strong&gt;. We've already had some great contributions!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>github</category>
    </item>
    <item>
      <title>react-avatar-group: A responsive, automatically-generated group avatar component, powered by ui-avatars.</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Thu, 30 Sep 2021 14:25:13 +0000</pubDate>
      <link>https://dev.to/d1020/react-avatar-group-a-responsive-automatically-generated-group-avatar-component-powered-by-ui-avatars-pk</link>
      <guid>https://dev.to/d1020/react-avatar-group-a-responsive-automatically-generated-group-avatar-component-powered-by-ui-avatars-pk</guid>
      <description>&lt;p&gt;This library is great for displaying the 'active' users of your React application. The responsiveness of react-avatar-group is meant to be similar to the Google Docs user icons. Some live examples are &lt;a href="https://easybase.github.io/react-avatar-group/" rel="noopener noreferrer"&gt;available here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you need a more &lt;a href="https://easybase.io/4-reasons-to-use-websockets-for-your-next-project-with-example/#bonus-adding-user-avatars" rel="noopener noreferrer"&gt;in-depth tutorial on using this package with actual, live users, check out this post here&lt;/a&gt;. Otherwise, here's a quick walk-through on how to use this package.&lt;/p&gt;

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

&lt;p&gt;First, install the package:&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 react-avatar-group
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open up your React file and import the package, as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// App.tsx&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;AvatarGroup&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-avatar-group&lt;/span&gt;&lt;span class="dl"&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AvatarGroup&lt;/span&gt;
    &lt;span class="na"&gt;avatars&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;James&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ava&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;avatar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Jackson&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;fontColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;FF00FF&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;tooltip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;This is a custom tooltip&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The only required prop to the &lt;code&gt;AvatarGroup&lt;/code&gt; component is &lt;code&gt;avatars&lt;/code&gt;, which is an array of strings or &lt;a href="https://github.com/easybase/react-avatar-group#iavatar" rel="noopener noreferrer"&gt;&lt;em&gt;IAvatar&lt;/em&gt;&lt;/a&gt; objects, for more customization.&lt;/p&gt;

&lt;p&gt;Another important prop is &lt;code&gt;max&lt;/code&gt;. This will hide the avatars beyond a certain length with a custom overflow avatar (as seen in the gif above). &lt;code&gt;displayAllOnHover&lt;/code&gt; will show all minions passed when the mouse hovers the avatar group, if there is a &lt;code&gt;max&lt;/code&gt; number passed.&lt;/p&gt;

&lt;p&gt;All the &lt;a href="https://github.com/easybase/react-avatar-group#props" rel="noopener noreferrer"&gt;props for react-avatar-group can be seen here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Using these other props, your &lt;code&gt;AvatarGroup&lt;/code&gt; may look like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;AvatarGroup&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-avatar-group&lt;/span&gt;&lt;span class="dl"&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="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;AvatarGroup&lt;/span&gt;
    &lt;span class="na"&gt;avatars&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;James&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ava&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;avatar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Jackson&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;fontColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;FF00FF&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;tooltip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;This is a custom tooltip&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;initialCharacters&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;max&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="na"&gt;displayAllOnHover&lt;/span&gt;
    &lt;span class="na"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>typescript</category>
    </item>
    <item>
      <title>I made a questionnaire to help less familiar devs choose the best JS framework/library to use for their web projects.</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Tue, 06 Apr 2021 00:41:41 +0000</pubDate>
      <link>https://dev.to/d1020/i-made-a-questionnaire-to-help-less-familiar-devs-choose-the-best-framework-library-to-use-for-their-projects-338n</link>
      <guid>https://dev.to/d1020/i-made-a-questionnaire-to-help-less-familiar-devs-choose-the-best-framework-library-to-use-for-their-projects-338n</guid>
      <description>&lt;p&gt;Hey everyone!&lt;/p&gt;

&lt;p&gt;I wanted to share the &lt;strong&gt;short quiz&lt;/strong&gt; that I created to help individuals looking to get into web/app development choose the &lt;a href="https://easybase.io/best-javascript-framework-library-quiz/"&gt;best library for their specific use case&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The quiz is available &lt;a href="https://easybase.io/best-javascript-framework-library-quiz/"&gt;here&lt;/a&gt; and I welcome any feedback from those of you who have suggestions.&lt;/p&gt;

&lt;p&gt;Thanks and have a great week!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>angular</category>
      <category>vue</category>
    </item>
    <item>
      <title>Price Comparison of Popular Serverless Architecture Providers</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Sat, 06 Mar 2021 16:49:14 +0000</pubDate>
      <link>https://dev.to/d1020/price-comparison-of-popular-serverless-architecture-providers-2jk9</link>
      <guid>https://dev.to/d1020/price-comparison-of-popular-serverless-architecture-providers-2jk9</guid>
      <description>&lt;p&gt;Serverless computing has become very popular over the last decade. There are many benefits to going serverless, especially when deploying production applications as an individual or small team. One of the main benefits is the pricing model, whether it be pay-as-you-go or tiered. The monetary cost of serverless application development is very much to the benefit of the developer. &lt;/p&gt;

&lt;p&gt;You may be asking, "what is a serverless application?". This model of application development abstracts away the overhead of manually owning and configuring the backend modules required for modern apps. You can &lt;a href="https://easybase.io/about/2021/01/30/What-Is-a-Serverless-Application/"&gt;learn more about serverless apps here&lt;/a&gt;. This piece will aggregate the pricing calculators and models of leading serverless providers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V5Aft319--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wa6um4hqtj6newxyst5d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V5Aft319--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wa6um4hqtj6newxyst5d.png" alt="Easybase serverless architecture diagram" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h1&gt;
  
  
  1. AWS
&lt;/h1&gt;

&lt;p&gt;Amazon Web Services is a popular, enterprise solution for highly experienced developers with demanding processes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://calculator.aws/#/"&gt;AWS Pricing&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Easybase
&lt;/h1&gt;

&lt;p&gt;Created with the small team or individual in mind, Easybase is great for adding serverless capability to your applications. Although lacking in some of the niche aspects of serverless computing, the platform features packages for React and React Native.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://easybase.io/pricing/"&gt;Easybase Pricing&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Azure
&lt;/h1&gt;

&lt;p&gt;Similar to AWS, Microsoft's Azure is the platform for many of the most popular applications today. Although its interface is quite complicated and can be difficult to set up and use for novice developers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://azure.microsoft.com/en-us/pricing/"&gt;Azure Pricing&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  4. IBM Cloud
&lt;/h1&gt;

&lt;p&gt;The newest member of the serverless computing game, IBM is similar to Azure but lacks the maturity featured in Microsoft's platform. IBM Cloud is definitely still a contender and has a bright future if they can cater to the needs not catered by the other competitors.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.ibm.com/cloud/pricing"&gt;IBM Cloud Pricing&lt;/a&gt;&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>cloud</category>
      <category>react</category>
      <category>reactnative</category>
    </item>
    <item>
      <title>How I used Reddit &amp; Twitter to Make Your README More Effective</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Sun, 13 Dec 2020 21:20:57 +0000</pubDate>
      <link>https://dev.to/d1020/how-i-used-reddit-twitter-to-make-your-readme-more-effective-36bi</link>
      <guid>https://dev.to/d1020/how-i-used-reddit-twitter-to-make-your-readme-more-effective-36bi</guid>
      <description>&lt;p&gt;Many lessons from my time at university have stuck with me throughout the years. One of the most important was in regards to technical writing (&lt;em&gt;thank you to my CS 787 professor&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;The lesson being that the process of technical writing is focused on being &lt;strong&gt;clear&lt;/strong&gt; and &lt;strong&gt;concise&lt;/strong&gt;. Every aspect of this technical work, whether it be visual or text, should be without redundancy or unrelated content.&lt;/p&gt;

&lt;p&gt;This does not mean that your writing shouldn't be sophisticated or tedious, it just means you should be conveying relevant information. In other words, &lt;strong&gt;get to the point&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  My Story
&lt;/h1&gt;

&lt;p&gt;So that brings me to the README I've been working on. I have a repo that I wanted to be more alluring to potential users. This is a common situation that many open-source developers find themselves in. I didn't have too much experience writing high-quality READMEs.&lt;/p&gt;

&lt;p&gt;Over years of using GitHub, I've seen some awesome READMEs with unique styles and crazy visuals/animations, but now I don't necessarily think that is always the most effective way to improve your README.&lt;/p&gt;

&lt;p&gt;Last week I posted on various programming-related subreddits something along the lines of 'Looking for tips/criticism on my Github README?', about five in total. Furthermore, I DMed a couple of experienced open-source developers.&lt;/p&gt;

&lt;p&gt;Over the following 48 hours, I received staggered feedback that I'm excited to share with you today. I've compiled the three most important points featured in the responses.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. Informative Visuals
&lt;/h1&gt;

&lt;p&gt;A picture is worth a thousand words. By that logic, too many pictures mean too many words. Take a look at &lt;a href="https://github.com/CCOSTAN/Home-AssistantConfig#readme"&gt;this repo&lt;/a&gt; for example. There's a lot of images that clutter up the repo aesthetically. Are all of these images necessary? Too much large imagery damages the navigability of the page.&lt;/p&gt;

&lt;p&gt;Imagery is very important as long it's purposeful. No-one likes reading a boring wall of text, but one or two branding/business images is enough. Your README should come off as a tool for potential developers to understand the purpose of your project, not as a sales pitch.&lt;/p&gt;

&lt;p&gt;Furthermore, over-stimulating imagery can be a turn off to potential users as opposed to a mature, organized aesthetic.&lt;/p&gt;

&lt;p&gt;This feedback led me to change the position and size of some of my more massive imagery. &lt;strong&gt;Stick to less than two branding images&lt;/strong&gt;. Any other pictures/animations should be essential to either learning how to get up and running or understanding your project's purpose.&lt;/p&gt;

&lt;p&gt;By the way, &lt;a href="https://github.com/easybase/easybase-react"&gt;here's a link to my work-in-progress README&lt;/a&gt;. A star on the GitHub repo would be greatly appreciated if you liked this article. Thanks!&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Navigability
&lt;/h1&gt;

&lt;p&gt;For something like a GitHub page, organization and navigability go hand-in-hand. Users will likely reference your README multiple times. It's a one-stop shop for developers to find more information on specific topics (installation, dependencies, etc).&lt;/p&gt;

&lt;p&gt;In my opinion, the most effective way to fulfill this navigability requirement is through the use of a Table of Contents. Many small to &lt;a href="https://github.com/cvxgrp/cvxpy"&gt;medium sized quality projects&lt;/a&gt; have some sort of ToC even if it's rudimentary.&lt;/p&gt;

&lt;p&gt;This serves two purposes. First, it's a place for potential users to instantly navigate to their desired section. Second, it gives your README a structure to follow. Readers get a preview of what is to come as they continue forward. This structure results in a README that is &lt;strong&gt;organized&lt;/strong&gt; and &lt;strong&gt;engaging&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ecotrust-canada.github.io/markdown-toc/"&gt;Here's a tool&lt;/a&gt; that will automatically create a table of contents for an existing markdown document.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Expandable Content!
&lt;/h1&gt;

&lt;p&gt;Now this one isn't as much feedback as much as it is my suggestion based on feedback. I didn't even consider using this markdown functionality until someone specifically suggested it to me. Turns out you can create expandable sections in your README with the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;details&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;Section Header!&lt;span class="nt"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;

Some information...

&lt;span class="sb"&gt;`# Here's some code`&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/details&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After trying this formatting method in my README, I can say that I'll probably be using it in the future. It made the layout much more concise and aesthetically pleasing.&lt;/p&gt;

&lt;p&gt;As I said previously, no-one likes reading a wall of text. This dramatically improved the readability of my repo. What's great about this markdown feature is that it dramatically reduces README clutter without losing content.&lt;/p&gt;

&lt;p&gt;Users don't have to leave the page if they want more detail on a specific subject, they just have to click the dropdown arrow. &lt;a href="https://github.com/easybase/easybase-react#usage"&gt;Here's my specific implementation for reference&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For a more robust discussion on drop-downs in markdown, take a look at &lt;a href="https://gist.github.com/citrusui/07978f14b11adada364ff901e27c7f61"&gt;this gist&lt;/a&gt;.&lt;/p&gt;




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

&lt;p&gt;Thanks for reading! These three tips can certainly boost the effectiveness of your READMEs. Remember, the core goal of your README is to be &lt;strong&gt;clear&lt;/strong&gt; and &lt;strong&gt;concise&lt;/strong&gt; at every step.&lt;/p&gt;

&lt;p&gt;The three suggestions above were chosen by me, based on feedback from multiple sources. Be sure to consider informative visuals, navigability, and collapsable content in your future projects.&lt;/p&gt;

&lt;p&gt;Feel free to leave a response regarding any questions or concerns. I'll be sure to get back to you!&lt;/p&gt;

</description>
      <category>github</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>react</category>
    </item>
    <item>
      <title>5 Great React Libraries to Look Out for in 2021</title>
      <dc:creator>Michael</dc:creator>
      <pubDate>Wed, 09 Dec 2020 02:36:45 +0000</pubDate>
      <link>https://dev.to/d1020/5-great-react-libraries-to-look-out-for-in-2021-4g23</link>
      <guid>https://dev.to/d1020/5-great-react-libraries-to-look-out-for-in-2021-4g23</guid>
      <description>&lt;p&gt;Front-end JavaScript frameworks have become incredibly popular over the last five years, including &lt;a href="https://vuejs.org/" rel="noopener noreferrer"&gt;Vue&lt;/a&gt;, &lt;a href="https://angular.io/" rel="noopener noreferrer"&gt;Angular&lt;/a&gt;, and &lt;a href="https://reactjs.org/" rel="noopener noreferrer"&gt;React&lt;/a&gt;. These modules have allowed beginners and exports turn their ideas into reality. Furthermore, they can deploy their applications on all kinds of devices.&lt;/p&gt;

&lt;p&gt;Let's take a look at 5 React libraries that are going to be very influential in 2021. Particularly, we'll focus on packages that are relatively new and making strides in the community.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;



&lt;h1&gt;
  
  
  1. &lt;strong&gt;react-data-grid&lt;/strong&gt;
&lt;/h1&gt;
&lt;h2&gt;
  
  
  &lt;a href="https://github.com/adazzle/react-data-grid" rel="noopener noreferrer"&gt;Github&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbundlephobia%2Fmin%2Freact-data-grid%3Fstyle%3Dsocial" 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%2Fimg.shields.io%2Fbundlephobia%2Fmin%2Freact-data-grid%3Fstyle%3Dsocial" alt="npm bundle size"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, an Excel clone for React that's actually intuitive and aesthetically pleasing. This is a difficult task to accomplish and I must say that this project really nails it. The featured grid has support for editors, keyboard navigation, and copy &amp;amp; paste.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://adazzle.github.io/react-data-grid/canary/iframe.html?id=demos--common-features&amp;amp;viewMode=story" rel="noopener noreferrer"&gt;Here's an example of a react-data-grid sheet&lt;/a&gt;. Notice how snappy it is. I'm assuming they utilized some form of virtualization and it really shows in this example. The application is snappy and sharp. Plus, initializing one of these grid could not be easier!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;DataGrid&lt;/span&gt;
      &lt;span class="na"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;id&lt;/span&gt;&lt;span class="dl"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;title&lt;/span&gt;&lt;span class="dl"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Title&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;

      &lt;span class="na"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Example&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&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="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Demo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h1&gt;
  
  
  2. &lt;strong&gt;use-editable&lt;/strong&gt;
&lt;/h1&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://github.com/kitten/use-editable" rel="noopener noreferrer"&gt;Github&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbundlephobia%2Fmin%2Fuse-editable%3Fstyle%3Dsocial" 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%2Fimg.shields.io%2Fbundlephobia%2Fmin%2Fuse-editable%3Fstyle%3Dsocial" alt="npm bundle size"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There a plethora of text editors available for React [especially when it comes to WYSIWYG]. This library takes a different approach though. I have to start by saying this library is incredibly small, so give it a look if this could be useful for your projects. The &lt;code&gt;use-editable&lt;/code&gt; library provides a small hook that allows elements to be &lt;code&gt;contenteditable&lt;/code&gt; while still being fully React renderable. This project's goal is to eliminate the needs for any interfacing with the DOM or &lt;code&gt;innerHTML&lt;/code&gt; to deal with natively editable content. It works on almost much any element too!&lt;/p&gt;

&lt;p&gt;To use this library, simply initiate a ref your React element and a state for your element. From there all you have to do is pass it to the useEditable hooks as follows: &lt;code&gt;useEditable(editorRef, setRefContent)&lt;/code&gt;. Here's a &lt;a href="https://codesandbox.io/s/use-editable-0l9kc" rel="noopener noreferrer"&gt;CodeSandbox demo&lt;/a&gt;. Give it a try!&lt;/p&gt;



&lt;h1&gt;
  
  
  3. &lt;strong&gt;easybase-react&lt;/strong&gt;
&lt;/h1&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://github.com/easybase/easybase-react" rel="noopener noreferrer"&gt;Github&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbundlephobia%2Fmin%2Feasybase-react%3Fstyle%3Dsocial" 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%2Fimg.shields.io%2Fbundlephobia%2Fmin%2Feasybase-react%3Fstyle%3Dsocial" alt="npm bundle size"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You know we had to plug our own! This library makes user authentication and database integration easier than ever before. It works with both Easybase projects or REACT integrations. The &lt;code&gt;useEasybase()&lt;/code&gt; hook gives developers access to the functions needed for a scalable project. Just wrap your root component in a custom &lt;code&gt;ebconfig.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;EasybaseProvider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useEasybase&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;easybase-react&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;ebconfig&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;ebconfig.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;EasybaseProvider&lt;/span&gt; &lt;span class="na"&gt;ebconfig&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ebconfig&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ProjectUser&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;EasybaseProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;From there you can perform user authentication operations and access a stateful database array! Just for you, &lt;a href="https://app.easybase.io" rel="noopener noreferrer"&gt;it's free&lt;/a&gt;. Here's some more information if you want to &lt;a href="https://easybase.io/react/2020/09/20/The-Best-Way-To-Add-A-Database-To-Your-React-React-Native-Apps/" rel="noopener noreferrer"&gt;learn about Easybase and React&lt;/a&gt;. Let's take a brief look at user authentication with &lt;code&gt;easybase-react&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;ProjectUser&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;isUserSignedIn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signIn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signUp&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useEasybase&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="nf"&gt;isUserSignedIn&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;You're signed in!&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;FrameRenderer&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;flex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;flexDirection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;column&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Username&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;usernameValue&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setUsernameValue&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="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Password&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"password"&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;passwordValue&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;setPasswordValue&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="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;

        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;signIn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;usernameValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;passwordValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          Sign In
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;signUp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;usernameValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;passwordValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          Sign Up
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h1&gt;
  
  
  4. &lt;strong&gt;react-flow&lt;/strong&gt;
&lt;/h1&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://github.com/wbkd/react-flow" rel="noopener noreferrer"&gt;Github&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbundlephobia%2Fmin%2Freact-flow%3Fstyle%3Dsocial" 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%2Fimg.shields.io%2Fbundlephobia%2Fmin%2Freact-flow%3Fstyle%3Dsocial" alt="npm bundle size"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This package has solid usage for its age. It's main implementation is the ability to build interactive node-based editors, flow charts and diagrams. The developers focused on a solid mix of functionality and customizability.&lt;/p&gt;

&lt;p&gt;The package accomplishes it goal of making it easy to implement node-based graphs with custom node types. Plus, it comes with components (mini-map, graph controls, etc.). Feel free to check out the examples or read the blog post to get started.&lt;/p&gt;

&lt;p&gt;Take a look at an &lt;a href="https://reactflow.dev/examples/" rel="noopener noreferrer"&gt;example here&lt;/a&gt;. This library appears to cover a lot of developer use cases regarding flow chart visualizations. It's fast and responsive too!&lt;/p&gt;



&lt;h1&gt;
  
  
  5. &lt;strong&gt;Atomic Layout&lt;/strong&gt;
&lt;/h1&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://github.com/kettanaito/atomic-layout" rel="noopener noreferrer"&gt;Github&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbundlephobia%2Fmin%2Fatomic-layout%3Fstyle%3Dsocial" 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%2Fimg.shields.io%2Fbundlephobia%2Fmin%2Fatomic-layout%3Fstyle%3Dsocial" alt="npm bundle size"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note this project's peer dependencies&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Surprisingly this is our only layout library in this list (even though it feels like there's millions out there) and there is a good reason for that. I personally am not one for layout libraries due to the functionality of &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Flexbox" rel="noopener noreferrer"&gt;flexbox&lt;/a&gt;, but this package might change how I structure my projects in the future. Turns out &lt;code&gt;atomic-layout&lt;/code&gt; handles much more than just spacing.&lt;/p&gt;

&lt;p&gt;It's often very difficult to handle proper distributing and spacing when considering device scalability. Atomic Layout helps you to compose your elements by introducing a dedicated spacing layer called Composition. It encourages you to separate concerns between UI elements' visual appearance and spacing between them. Let's take a look at a brief example below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;areasMobile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
  thumbnail
  header
  footer
`&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;areasTablet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
  thumbnail header
  thumbnail footer
`&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Card&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;imageUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;actions&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Composition&lt;/span&gt; &lt;span class="na"&gt;areas&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;areasMobile&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;areasMd&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;areasTablet&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;Thumbnail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Header&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Footer&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="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Fragment&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Thumbnail&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;imageUrl&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Thumbnail&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Header&lt;/span&gt; &lt;span class="na"&gt;as&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"h3"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Footer&lt;/span&gt; &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;paddingMd&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;actions&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Footer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Fragment&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Composition&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;p&gt;The &lt;code&gt;Composition&lt;/code&gt; element allows developers to contextualize their React components based on the size of the users device. This is much cleaner than conditionally rendering every attribute of the component. Take a look at a more &lt;a href="https://codesandbox.io/s/responsive-props-8m14f?file=/src/components/Item.js" rel="noopener noreferrer"&gt;detailed example&lt;/a&gt; that shows the true power of this library.&lt;/p&gt;



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

&lt;p&gt;Thanks a lot for reading! Feel free to leave a comment if you have any questions/concerns, I'll be sure to get back to you.&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>git</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
