<?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: Chandu</title>
    <description>The latest articles on DEV Community by Chandu (@chandan).</description>
    <link>https://dev.to/chandan</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%2F374373%2F3f287090-0f80-4025-b417-c2cba6c20ef9.jpeg</url>
      <title>DEV Community: Chandu</title>
      <link>https://dev.to/chandan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chandan"/>
    <language>en</language>
    <item>
      <title>15 Trust badges from top B2B Services Review Platforms in 2020</title>
      <dc:creator>Chandu</dc:creator>
      <pubDate>Sun, 07 Jun 2020 03:56:34 +0000</pubDate>
      <link>https://dev.to/chandan/15-trust-badges-from-top-b2b-services-review-platforms-in-2020-oe9</link>
      <guid>https://dev.to/chandan/15-trust-badges-from-top-b2b-services-review-platforms-in-2020-oe9</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qhv80-hW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AYmATrxEFuONboVhn.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qhv80-hW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AYmATrxEFuONboVhn.jpeg" alt="Cover image for trust badges by B2b service review platforms"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today online review sites have become the most powerful form of word-of-mouth advertising. Listing your company or service offering in B2B services review platforms can significantly increase your acquisition rates as they host verified reviews of business-to-business services providers to help find reputable services providers such as SEO consultants, web, and mobile app designers &amp;amp; developers, etc. These platforms often issue a free badge that you can display on your website with a link to your business profile on their platform. If your company is featured in their top companies list, you get a special badge for that too. So, what’s special about these badges?&lt;/p&gt;

&lt;h3&gt;
  
  
  A trust badge from a top B2B Services Review Platform ensures your visitors that your company is legitimate and is accredited with the correct bodies or regulators.
&lt;/h3&gt;

&lt;p&gt;There are a ton of free badges online but it’s very important to use the right trust badges — ones that people recognize. So let’s dive in to see the &lt;strong&gt;top 15 Trust badges from B2B Services Review Platforms in 2020&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Good Firms
&lt;/h3&gt;

&lt;p&gt;GoodFirms is a full-fledged research and review platform that helps software buyers and service seekers to opt for the best software or firm. At the same time, it helps IT companies and software vendors to boost user acquisition stats, market share, and brand awareness. GoodFirms, just as the name suggests, is a dedicated community of &lt;strong&gt;“&lt;/strong&gt; performing &lt;strong&gt;“&lt;/strong&gt; IT companies as well as software solutions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--79bZOntO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AGKi3Ncr60_x_aWgR" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--79bZOntO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AGKi3Ncr60_x_aWgR" alt="Goodfirms badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of goodfirms.co:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;19,912 Global Alexa rank.&lt;/li&gt;
&lt;li&gt;15000+ verified reviews.&lt;/li&gt;
&lt;li&gt;9000+ companies listed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get goodfirms.co badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://www.goodfirms.co/media-kit/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Clutch
&lt;/h3&gt;

&lt;p&gt;Clutch is a B2B research, ratings, and reviews firm in the heart of Washington, DC. They connect small and mid-market businesses with best-fit marketing, advertising, design, development, and IT companies, consultants, or software. Their methodology considers verified feedback from client references, services offered, work quality, and market presence to compare and rank companies in a specific market.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_wuA1jNr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AEI-5cS6NwQtx_mk4" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_wuA1jNr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AEI-5cS6NwQtx_mk4" alt="Clutch trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of Clutch.co:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;150,000+ Agencies listed&lt;/li&gt;
&lt;li&gt;36,000+ Client Reviews&lt;/li&gt;
&lt;li&gt;20,371 Global Alexa rank&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get Clutch.co badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their widget and badges offerings &lt;a href="https://clutch.co/widgets-logos-badges"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Business Of Apps
&lt;/h3&gt;

&lt;p&gt;Business of Apps is the leading media and information brand for the app industry and provides world-class news, analysis, data &amp;amp; marketplaces for app businesses. They host comprehensive B2B directories and marketplaces covering app ad platforms, app development, app marketing, influencers, and other specialist areas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--12khkkwQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AWDDZppZnTrx242-j" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--12khkkwQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AWDDZppZnTrx242-j" alt="Business of apps trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of businessofapps.com:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;21,308 Global Alexa rank.&lt;/li&gt;
&lt;li&gt;200k global audience each month.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get businessofapps.com badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://www.businessofapps.com/badges/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  UpCity
&lt;/h3&gt;

&lt;p&gt;UpCity is dedicated to helping our partners in our marketplace grow their businesses by providing the support and help they need to build their online recommendability. For businesses seeking services, the transparency and trust they provide through reviews and data-driven insights help dramatically improve the B2B partner selection and purchase experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yYYn-o9W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AjY9eWkSJQ7yT8FYn" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yYYn-o9W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AjY9eWkSJQ7yT8FYn" alt="Upcity trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of upcity.com:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;23,804 Global Alexa rank&lt;/li&gt;
&lt;li&gt;225,000 visitors each month&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get upcity.com badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://help.upcity.com/en/articles/2524712-using-the-badging-center"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  AppFutura
&lt;/h3&gt;

&lt;p&gt;AppFutura is a platform connecting buyers and service providers in the fields of app development, custom software development, and digital marketing. Their directories, created with a unique methodology, allow buyers to browse through thousands of companies listed and categorize them as per the needs of their projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ruI4b9H4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AztFjopzTat3IJ5I0" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ruI4b9H4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AztFjopzTat3IJ5I0" alt="appfutura trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of appfutura.com:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;45,575 Global Alexa rank&lt;/li&gt;
&lt;li&gt;8,000+ companies listed.&lt;/li&gt;
&lt;li&gt;1,000+ reviews published.&lt;/li&gt;
&lt;li&gt;40K+ visitors each month.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get appfutura.com badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://www.appfutura.com/blog/appfutura-tips-new-badges-on-appfutura/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Software World
&lt;/h3&gt;

&lt;p&gt;SoftwareWorld is a software review platform that showcases top software solutions suitable for various industries, providing a comprehensive review service by comparing the best software solutions available on the market. The platform creates unbiased lists of the top software solutions by category, helping businesses find the right solution for them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nNS9mGh9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AhM0JuHsRucIyvGpH" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nNS9mGh9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AhM0JuHsRucIyvGpH" alt="software world trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of softwareworld.co:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;59,743 Global Alexa rank.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get softwareworld.co badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://www.softwareworld.co/media-kit/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design Rush
&lt;/h3&gt;

&lt;p&gt;DesignRush Is A B2B Marketplace Connecting Brands With Agencies and acts as your guide to finding the best professional agencies, categorized by their areas of expertise. They analyzed and ranked hundreds of agencies to help brands find top full-service agencies, web design companies, digital marketing firms &amp;amp; top technology companies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vP8KXiiP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AC8p23XINoH4B8Fn6" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vP8KXiiP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AC8p23XINoH4B8Fn6" alt="design rush trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of designrush.com:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;62,824 Global Alexa rank&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get designrush.com badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://www.designrush.com/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Top Developers
&lt;/h3&gt;

&lt;p&gt;TopDevelopers.co is a dedicated directory of IT service providers. The list of IT companies is graded through discreet research and analysis on various industry-specific metrics to help the businesses in finding a reliable technical partner. Their verified reviews will also help you find the best partner to technically accelerate your business.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jw7-_yNx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2APseVvHqT29mMbDGI" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jw7-_yNx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2APseVvHqT29mMbDGI" alt="Topdevelopers trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of topdevelopers.co:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;80,601 Global Alexa rank&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get topdevelopers.co badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://www.topdevelopers.co/badges"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Extract
&lt;/h3&gt;

&lt;p&gt;Extract.co examines software companies and digital agencies with key industry metrics, discover their reputation and quality standards and reveal the best effective companies. They help in understanding which services deliver well or which industry is more focused or what technologies the company/team is more effective at. They also do well research on previous customer experience before awarding a project to a new company.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Tot1MkRh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2Aiv9-HznnJMEj4g0Y" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Tot1MkRh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2Aiv9-HznnJMEj4g0Y" alt="extract trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of extract.co:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;86,359 Global Alexa rank.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get extract.co badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://extract.co/howitworks"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Techimply
&lt;/h3&gt;

&lt;p&gt;TechImply is an IT Firm recommendation platform for all IT companies &amp;amp; technology vendors. More than 10,000 potential buyers use TechImply to find the right business software and IT Firms. You can easily get started on TechImply by creating your company/software profile.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6Q2qleOq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AeQG8epeN1cNOG81W" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6Q2qleOq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AeQG8epeN1cNOG81W" alt="tech imply trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of techimply.com:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;116,848 Global Alexa rank&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get techimply.com badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://www.techimply.com/awards-badges"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  It Firms
&lt;/h3&gt;

&lt;p&gt;Ascertain the topmost Web Development, Mobile App Development, Software Development &amp;amp; eCommerce Development firms across the globe. ItFirms leave no stone unturned to let you discover some of the renowned firms that will coincide with your needs and delivers high-quality services. Keeping abreast of the latest statistics and data, they provide 100%true and trusted insights on top IT companies and trends worldwide.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aOok5dsO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AWjpOyIEX8vNgFCip" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aOok5dsO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AWjpOyIEX8vNgFCip" alt="itfirms trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of itfirms.co:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;122,826 Global Alexa rank.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get itfirms.co badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://www.itfirms.co/sponsor-badges/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wadline
&lt;/h3&gt;

&lt;p&gt;Wadline helps clients find the best IT companies for projects in Web, Mobile, and Software development. Their commitment is to make the IT-sphere more understandable and convenient for customers all over the world. You will find the list with the best of them. Check any company you like, browse the customer rating and reviews, and make a good decision.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4SXcCkMR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AryVL9F_GFfZiV1bL" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4SXcCkMR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AryVL9F_GFfZiV1bL" alt="wadline trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of wadline.com:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;155,625 Global Alexa rank&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get wadline.com badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://wadline.com/badges-logos"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Selected Firms
&lt;/h3&gt;

&lt;p&gt;Selected Firms is a pre-eminent source for finding and vetting the supreme eCommerce, mobile, web, and marketing companies on the web. It gives 100%true and believed bits of knowledge on top IT organizations and patterns around the world. They investigate every possibility to give you a chance to find a portion of the eminent firms that will concur with your needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SSyzg2LE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2A4ms9q2_uxklH8skF" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SSyzg2LE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2A4ms9q2_uxklH8skF" alt="selectedfirms trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of selectedfirms.co:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;354,957 Global Alexa rank&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get selectedfirms.co badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://selectedfirms.co/badge/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Top Firms
&lt;/h3&gt;

&lt;p&gt;TopFirms is an IT Directory to say but delivers immense values to its users more than that. It is the modern way to find or acquire quality, reliability, and best value of the investment. They have conceptualized it after observing the struggling IT &amp;amp; software development service seekers in the market for the most reliable and suitable match for their bespoke requirements &amp;amp; budget.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8dzQ5sjG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2Aqjub2U2o24QYVkir" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8dzQ5sjG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2Aqjub2U2o24QYVkir" alt="top firms trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of topfirms.co:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;374,242 Global Alexa rank&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get topfirms.co badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://topfirms.co/sponsor-badges"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Up Firms
&lt;/h3&gt;

&lt;p&gt;UpFirms is a B2B research, rating, and review platform that helps service seekers to pick one of the best firms. At the same time, UpFirms assists IT companies to boost their user acquisition, market share, and brand visibility. They list the top-performing companies IT in various service categories according to their rank and rating. Service seekers can browse UpFirms categories for outsourcing any services solutions with verified reviews and ratings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oEJPh-6L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AqS4kJVEXwvMOW-0I" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oEJPh-6L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AqS4kJVEXwvMOW-0I" alt="upfirms trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Interesting stats of upfirms.com:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;491,400 Global Alexa rank.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where to get upfirms.com badges?
&lt;/h3&gt;

&lt;p&gt;You can check out their badges &lt;a href="https://upfirms.com/media-kit/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some tips for choosing the right B2B review platforms:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Choose the reviews platforms that best suit your industry&lt;/li&gt;
&lt;li&gt;Create an account and apply to get listed&lt;/li&gt;
&lt;li&gt;Understand the platform ranking factor&lt;/li&gt;
&lt;li&gt;Ask your clients to write detailed reviews&lt;/li&gt;
&lt;li&gt;Keep your company information up-to-date&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Other trust badges you can look into:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Security seals:&lt;/strong&gt; These types of seals ensure that the communication between the browser and your site is encrypted via security protocols like SSL and also the user privacy is maintained. These are generally issued by companies like Norton, McAfee, etc, on the technical security aspect of the website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zsdmXNpN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2A-xc29J1_q6SIINVr" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zsdmXNpN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2A-xc29J1_q6SIINVr" alt="security trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Certified Partner badges:&lt;/strong&gt; These badges are awarded to technical professionals who have successfully passed a certification exam or achieved full certification. In other words, they validate your professional and technical expertise in that particular area.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rycm1ZFI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AVuUUKWsvEDW7FFlx" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rycm1ZFI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AVuUUKWsvEDW7FFlx" alt="certified trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content protection badges:&lt;/strong&gt; How often do you encounter a situation where other websites copy your hard work (content) and publish under their name? It’s frustrating! This is where content protection badges from companies like DCMA and Copyscape come into play. You can simply place the protective seal on your website which deters thieves from stealing your content. If at all you find your content elsewhere you can easily request a takedown.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZmGLnKJF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AMbRpJC7lCN6EA1jB" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZmGLnKJF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2AMbRpJC7lCN6EA1jB" alt="copyright trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E-Commerce trust badges:&lt;/strong&gt; One of the key problems e-commerce site owners face is cart abandonment where users add items to their online shopping cart, but exit without completing the purchase. Here is a detailed &lt;a href="https://cxl.com/research-study/trust-seals/"&gt;report&lt;/a&gt; on how trust seals can increasing your purchase/conversion rates. There are different types of trust badges like payment methods accepted, free shipping, money-back guarantee etc., to ensure the trust of your customer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tvWBS29x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2ASXHfJHo6j-ssozU5" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tvWBS29x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/0%2ASXHfJHo6j-ssozU5" alt="e-commerce trust badges"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Looking to create your own badge? I found this great&lt;/strong&gt; &lt;a href="https://www.accredible.com/badge-designer/"&gt;&lt;strong&gt;website&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;which allows you to design, customize, and get high-quality badges for free.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Wrapping up:
&lt;/h3&gt;

&lt;p&gt;So this was my quick round-up on top B2B customer reviews platforms that you could consider signing-up and earning a trust badge. If you found this article interesting, consider sharing it with your business contacts and help them grow their business, give a 👏 and leave a comment below if you feel something was missed here. I would be more than happy to hear from you 😄.&lt;/p&gt;

&lt;p&gt;Checkout my other stories and know more about me on 👉 &lt;a href="https://chandan.dev"&gt;chandan.dev&lt;/a&gt;. 👈&lt;/p&gt;

</description>
      <category>b2b</category>
      <category>marketingstrategies</category>
      <category>b2bmarketing</category>
      <category>marketing</category>
    </item>
    <item>
      <title>Recoil vs Redux | The Ultimate React State Management Face-Off</title>
      <dc:creator>Chandu</dc:creator>
      <pubDate>Sat, 06 Jun 2020 05:37:27 +0000</pubDate>
      <link>https://dev.to/chandan/recoil-vs-redux-the-ultimate-react-state-management-face-off-35b</link>
      <guid>https://dev.to/chandan/recoil-vs-redux-the-ultimate-react-state-management-face-off-35b</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Asbwga5yfuX3O3CB2I-D-QA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Asbwga5yfuX3O3CB2I-D-QA.jpeg" alt="Cover picture of redux vs recoil state management libraries"&gt;&lt;/a&gt;Redux vs Recoil&lt;/p&gt;

&lt;p&gt;React with its component-based approach has made the life of developers easy by managing separate state and logic for each component and the ability to re-use them when required. But what if you wanted to use a shared state between multiple components or maybe fetch data from an API once and make it available to all the components in your app? That’s when global state management libraries like Redux, MobX, etc., come into play.&lt;/p&gt;

&lt;h4&gt;
  
  
  The downfall of Redux:
&lt;/h4&gt;

&lt;p&gt;With the release of React 16.3, the react community got to experience the new Context API which worked similar to Redux and allowed to manage state in multiple components using Context Object, Provider, and Consumer. However, the context API also came with a catch! Sebastian Markbage from the React team has mentioned that the new Context API was not built and optimized for high-frequency updates but rather for low-frequency updates like theme and user auth management inside your app. You can check out his comment &lt;a href="https://github.com/facebook/react/issues/14110#issuecomment-448074060" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Context API also had some limitations with code splitting and the ability to store indefinite values instead of a single value.&lt;/p&gt;

&lt;h4&gt;
  
  
  So, what’s next?
&lt;/h4&gt;

&lt;p&gt;Facebook recently launched &lt;a href="https://github.com/facebookexperimental/Recoil" rel="noopener noreferrer"&gt;Recoil&lt;/a&gt;, which is a brand new experimental JavaScript state management library that addresses many of the problems larger applications face when using the existing Context API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F784%2F1%2Akmm4E29iST5X569ItIEaKQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F784%2F1%2Akmm4E29iST5X569ItIEaKQ.png" alt="Image of React Recoil fan-made logo chandan.dev (Unofficial)"&gt;&lt;/a&gt;Recoil (Fan made logo — Chandan.dev)&lt;/p&gt;

&lt;h4&gt;
  
  
  The Basics of Recoil:
&lt;/h4&gt;

&lt;p&gt;Recoil mainly comprises of two things —  &lt;strong&gt;Atoms&lt;/strong&gt; and &lt;strong&gt;Selectors&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Atoms:
&lt;/h4&gt;

&lt;p&gt;Atoms are units of state. They’re updateable and subscribable: when an atom is updated, each subscribed component is re-rendered with the new value. They can be created at runtime, too. Atoms can be used in place of React local component state. If the same atom is used from multiple components, all those components share their state.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In simpler terms, Atoms are units of state that components can subscribe to.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Selectors:
&lt;/h4&gt;

&lt;p&gt;A &lt;strong&gt;selector&lt;/strong&gt; is a pure function that accepts atoms or other selectors as input. When these upstream atoms or selectors are updated, the selector function will be re-evaluated. Components can subscribe to selectors just like atoms, and will then be re-rendered when the selectors change. Selectors can also be used to calculate derived data that is based on state.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In simpler terms, Selectors transform the atom state either synchronously or asynchronously.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You should probably check out this video from the recent React Europe live stream to get a better understanding of recoil.&lt;/p&gt;

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

&lt;h4&gt;
  
  
  The face-off: Recoil vs Redux
&lt;/h4&gt;

&lt;p&gt;Let’s start by creating a demo application with &lt;em&gt;create-react-app&lt;/em&gt; which increments the count on the click of a button.&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A7n97roaECxGeb1rx35eKaw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A7n97roaECxGeb1rx35eKaw.png" alt="Demo application for recoil vs redux"&gt;&lt;/a&gt;Demo app for recoil vs redux&lt;/p&gt;

&lt;p&gt;Our application is going to consist of &lt;em&gt;MainComponent.js&lt;/em&gt; which receives the &lt;em&gt;count&lt;/em&gt; and &lt;em&gt;handleFireClick&lt;/em&gt; function as props.&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A4eXA_Hrg2OxaENEzQDlQdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A4eXA_Hrg2OxaENEzQDlQdg.png" alt="react recoil vs redux — main component"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Configuring the store:
&lt;/h4&gt;

&lt;p&gt;In redux, we start off by creating a basic store that acts like a global state for our application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1008%2F1%2A-zM6masUEzo1AAEBb6md8g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1008%2F1%2A-zM6masUEzo1AAEBb6md8g.png" alt="react recoil vs redux — creating the store"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In recoil, there is no need to create a separate store. Wow! that’s awesome 🤩.&lt;/p&gt;

&lt;h4&gt;
  
  
  Creating a shared state:
&lt;/h4&gt;

&lt;p&gt;In redux, we create the desired application state using reducers. Let’s create a simple &lt;em&gt;counterReducer&lt;/em&gt; which increments the count by 1.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AJ6Udf_p22tt3Na97RafTlA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AJ6Udf_p22tt3Na97RafTlA.png" alt="react recoil vs redux — creating the reducer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In recoil, creating a shared state is a straight forward approach using atoms. Each atom can be considered as a single shared piece of state. Now, let’s create an atom for holding our counter state.&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%2Fcdn-images-1.medium.com%2Fmax%2F874%2F1%2A9HtEcB62dIHwFNivF7ks7A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F874%2F1%2A9HtEcB62dIHwFNivF7ks7A.png" alt="react recoil vs redux — creating the atoms"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Firing the actions:
&lt;/h4&gt;

&lt;p&gt;In redux, actions are fired using the dispatch method provided by redux. Let’s create a file named &lt;em&gt;actions.js&lt;/em&gt; which holds the action for incrementing the count.&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Ayg3MpuBZIKbAh0oaSHJkiA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2Ayg3MpuBZIKbAh0oaSHJkiA.png" alt="react recoil vs redux — creating the actions"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In recoil, we fire off actions and modify the existing shared atom state using selectors.&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AS4Y0zo5JIS313bLxN8uFtg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AS4Y0zo5JIS313bLxN8uFtg.png" alt="react recoil vs redux — creating the selectors"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Connect ’em all:
&lt;/h4&gt;

&lt;p&gt;Finally, it’s time to connect the shared state with our &lt;em&gt;MainComponent.js&lt;/em&gt; component and to differentiate Redux from Recoil, I’ll be creating two new wrapper components called &lt;em&gt;ReduxExample.js&lt;/em&gt; and &lt;em&gt;RecoilExample.js&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In &lt;em&gt;ReduxExample.js,&lt;/em&gt; we use &lt;strong&gt;&lt;em&gt;useSelector&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;useDispatch&lt;/em&gt;&lt;/strong&gt; hooks provided by react-redux to get value from store and fire actions to update it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AZ8Xagyge8yKx8n9DuAWe7g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AZ8Xagyge8yKx8n9DuAWe7g.png" alt="Redux with react hooks"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus&lt;/strong&gt; : In &lt;em&gt;ReduxExample.js&lt;/em&gt; we can also create a class component and wrap the component using connect HOC by redux and pass the shared state, actions as props using &lt;strong&gt;&lt;em&gt;mapStateToProps&lt;/em&gt;&lt;/strong&gt; , and &lt;strong&gt;&lt;em&gt;mapDispatchToProps&lt;/em&gt;&lt;/strong&gt; respectively.&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A-bbDA8SekO-vfPQMGT5Khw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A-bbDA8SekO-vfPQMGT5Khw.png" alt="react recoil vs redux — redux example component"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In &lt;em&gt;RecoilExample.js&lt;/em&gt; we can directly use the shared atom state value with &lt;strong&gt;&lt;em&gt;useRecoilValue&lt;/em&gt;&lt;/strong&gt; and update our state, as simple as doing a setState but with &lt;strong&gt;&lt;em&gt;useRecoilState&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AbePw3Xd3tceo4tAu0V5oqg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2AbePw3Xd3tceo4tAu0V5oqg.png" alt="react recoil vs redux — recoil example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; : Recoil is based on react hooks and will only work for functional components.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Final Wrap:
&lt;/h4&gt;

&lt;p&gt;There is just one more step for your app to start working and that’s by wrapping your Example components with HOC components provided by Redux and Recoil.&lt;/p&gt;

&lt;p&gt;For the Redux example, we use the Provider from react-redux and pass our &lt;em&gt;ReduxExample.js&lt;/em&gt; component as children. Make sure to also supply the store you created in the first step.&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A8KVjC0eTqT4SfHWXT6H9MA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2A8KVjC0eTqT4SfHWXT6H9MA.png" alt="react recoil vs redux — redux app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Similarly, for Recoil, we wrap the &lt;em&gt;RecoilExample.js&lt;/em&gt; component using the RecoilRoot component provided by recoil.&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%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2ApEPgkJO7zbjEonbiL9U0Rg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F1024%2F1%2ApEPgkJO7zbjEonbiL9U0Rg.png" alt="react recoil vs redux — recoil app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Let’s Go!
&lt;/h4&gt;

&lt;p&gt;At this point, we have successfully created the shared state and actions to update it using both redux and recoil. Simply run npm run start and check if your code is working.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F600%2F1%2AeOlBZS9tJ3RzBVn3YK_krw.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%2Fcdn-images-1.medium.com%2Fmax%2F600%2F1%2AeOlBZS9tJ3RzBVn3YK_krw.gif" alt="react recoil vs redux — final working of the demo app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  The main question — Will Recoil replace Redux?
&lt;/h4&gt;

&lt;p&gt;That’s a tough one to answer today (at the time of writing this post) as it is still in the experimental phase but the new library looks promising and there is a high probability that developers will switch to Recoil from Redux shortly.&lt;/p&gt;

&lt;p&gt;Why? Recoil lets you create a data-flow graph that flows from atoms (shared state) through selectors (pure functions) and down into your React components without having to deal with store creations and re-render the entire App component tree while the state updates.&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion:
&lt;/h4&gt;

&lt;p&gt;So, this was a quick comparison between recoil and redux for a simple increment counter app. You can check the live version of the app &lt;a href="https://recoil-vs-redux.chandan.dev/" rel="noopener noreferrer"&gt;&lt;strong&gt;here (Redux-vs-Recoil)&lt;/strong&gt;&lt;/a&gt; and source code on &lt;a href="https://github.com/chandan-reddy-k/recoil-vs-redux" rel="noopener noreferrer"&gt;&lt;strong&gt;Github&lt;/strong&gt;&lt;/a&gt;. It’s just a matter of time Recoil becomes the new standard for managing shared states in your react app and is ready to be used in production applications. Until then give it a shot and follow the community to keep yourself updated with the new releases. If you found this post helpful in understanding the basics of redux-vs-recoil give a 👏 and leave a comment on — What features would you love to see in Recoil? I’d love to hear any thoughts on this topic 😋.&lt;/p&gt;

</description>
      <category>react</category>
      <category>recoiljs</category>
      <category>redux</category>
      <category>statemanagement</category>
    </item>
    <item>
      <title>How can a Next.js application grow your business online?</title>
      <dc:creator>Chandu</dc:creator>
      <pubDate>Mon, 27 Apr 2020 03:31:55 +0000</pubDate>
      <link>https://dev.to/chandan/how-can-a-next-js-application-grow-your-business-online-516</link>
      <guid>https://dev.to/chandan/how-can-a-next-js-application-grow-your-business-online-516</guid>
      <description>&lt;p&gt;Single Page Applications like React, Angular, and many frontend frameworks render the page content dynamically with JavaScript and Search engine bots - mainly Googlebot will have a hard time crawling the content of our pages resulting in lower SEO performances. This is where Next js comes to the rescue. It has all the core features of React and comes with Server-side rendering (SSR) and Static Site Generation (SSG) support for excellent SEO to increase your website visibility on Google.&lt;/p&gt;

&lt;p&gt;This means the page can be rendered on a webserver and returned to the browser as easily readable HTML. This kind of webpage is treated as "icing on the cake" by GoogleBot because it doesn't have to use resources for rendering the page using javascript. So, happier the GoogleBot is, the higher your web page will rank in Google searches.&lt;/p&gt;

&lt;p&gt;Additionally Next js has a comprehensive list of features that include hot code reloading and splitting, automatic routing, prefetching, typescript support but one feature you should be most excited about is the support for Headless CMS.&lt;/p&gt;

&lt;p&gt;Headless CMS is a backend Content Management System that does not worry about how and where your content gets displayed rather a headless CMS focuses on only two things: storing your structured content and delivering it. So, do you need a developer for &lt;a href="https://chandan.dev/best-next-js-developer-for-designing-and-developing-your-nextjs-website"&gt;Next js development&lt;/a&gt; and every time to edit and update posts? Absolutely No, you just need an awesome Next js developer like me to set up and integrate your preferred Headless CMS for the first time. Post setting up you can simply log in to CMS provider's dashboard and publish as many blog posts and incredible content you want on the website.&lt;/p&gt;

&lt;p&gt;This was just a quick round-up on Next.js. If you interested to know more about my experience with Next.js and web development in general and more detailed tech articles refer to the blog on my &lt;a href="https://chandan.dev"&gt;website&lt;/a&gt; or check out my medium profile &lt;a href="https://medium.com/@chandan.reddy"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>now</category>
      <category>cms</category>
      <category>development</category>
    </item>
    <item>
      <title>“Zeit now” is now, Vercel. What does this mean to existing websites?</title>
      <dc:creator>Chandu</dc:creator>
      <pubDate>Tue, 21 Apr 2020 18:37:11 +0000</pubDate>
      <link>https://dev.to/chandan/zeit-now-is-now-vercel-what-does-this-mean-to-existing-websites-59c2</link>
      <guid>https://dev.to/chandan/zeit-now-is-now-vercel-what-does-this-mean-to-existing-websites-59c2</guid>
      <description>&lt;p&gt;When the entire world is fighting against the pandemic, spreading negative vibes everywhere, there is one reason for web developers to be excited about and that’s an email from &lt;a href="https://vercel.com/about/rauchg"&gt;Guillermo Rauch&lt;/a&gt;, CEO of Zeit. I mean the CEO of Vercel. Confused? This is what the email reads:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--unKW_9JW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/563/1%2A3FUZWkpQhpgEYe1eS6wOMQ%402x.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--unKW_9JW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/563/1%2A3FUZWkpQhpgEYe1eS6wOMQ%402x.jpeg" alt="Zeit is now rebranded to Vercel"&gt;&lt;/a&gt;Zeit is now Vercel&lt;/p&gt;

&lt;h4&gt;
  
  
  Email from Vercel’s CEO (Formerly Zeit):
&lt;/h4&gt;

&lt;p&gt;Hi there!&lt;/p&gt;

&lt;p&gt;I hope this email finds you well. I bring special news today.&lt;/p&gt;

&lt;p&gt;ZEIT has rebranded to Vercel. In addition, we have secured a $21M Series A to accelerate the development of Next.js and our platform.&lt;/p&gt;

&lt;p&gt;Our &lt;a href="https://vercel.com/blog/zeit-is-now-vercel"&gt;latest blog post&lt;/a&gt; details our renewed focus, rebrand, and fundraise. Rest assured – none of your existing workflows, pricing plans, or projects are going to be affected in any way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vercel.com/blog/zeit-is-now-vercel"&gt;Read the Announcement →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today, companies like Airbnb, The Washington Post, and Twilio trust the Vercel platform to develop, preview, and ship their ambitious projects. And Next.js powers 35,000+ production websites.&lt;/p&gt;

&lt;p&gt;We count ourselves lucky for the tremendous support we receive from our community – I want you to know that we’re very, very grateful for it. This business is our passion, and we will continue delivering the exceptional developer experience we are known for.&lt;/p&gt;

&lt;p&gt;Looking forward to your next project!&lt;/p&gt;

&lt;p&gt;Guillermo Rauch,&lt;/p&gt;

&lt;p&gt;CEO – Vercel Inc.&lt;/p&gt;

&lt;h4&gt;
  
  
  So what this means to us? Should we update anything ?
&lt;/h4&gt;

&lt;p&gt;So after trying to visit &lt;strong&gt;&lt;em&gt;now.sh&lt;/em&gt;&lt;/strong&gt; it redirects to &lt;strong&gt;&lt;em&gt;Vercel.com.&lt;/em&gt;&lt;/strong&gt; So &lt;strong&gt;&lt;em&gt;,&lt;/em&gt;&lt;/strong&gt; the obvious questions that might come to your mind are, Should I update my name servers or create a new account in Vercel? What happens to my subscriptions? Does my hosted website perform a 301 redirect? Etc.,&lt;/p&gt;

&lt;p&gt;The simple answer is, &lt;strong&gt;No! you don’t have to change anything, just sit back and relax.&lt;/strong&gt; It’s simply a rebranding from &lt;strong&gt;ZEIT&lt;/strong&gt; to  &lt;strong&gt;VERCEL.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can still continue to perform all of your previous actions and deployments without worrying about this change.&lt;/p&gt;

&lt;h4&gt;
  
  
  What is Vercel?
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--x069V3ap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/469/1%2ARv6kW7EnWmShq7DKEb9-_A%402x.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x069V3ap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/469/1%2ARv6kW7EnWmShq7DKEb9-_A%402x.jpeg" alt="Vercel new logo (Formerly Zeit)"&gt;&lt;/a&gt;New Logo of Vercel&lt;/p&gt;

&lt;p&gt;According to their blog post : Vercel strongly connects to the words &lt;strong&gt;&lt;em&gt;versatile&lt;/em&gt;&lt;/strong&gt; , &lt;strong&gt;&lt;em&gt;accelerate&lt;/em&gt;&lt;/strong&gt; , and  &lt;strong&gt;&lt;em&gt;excel&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  So, what’s great about this rebranding?
&lt;/h4&gt;

&lt;p&gt;Raising $21M in series A funding will open opportunities to explore and further improve one of our beloved frameworks &lt;strong&gt;Next.js.&lt;/strong&gt; Main highlights from their blog are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;to provide the ultimate workflow for developing, previewing, and shipping Jamstack sites.&lt;/li&gt;
&lt;li&gt;enable teams to &lt;strong&gt;develop&lt;/strong&gt; , &lt;strong&gt;preview&lt;/strong&gt; , and &lt;strong&gt;ship&lt;/strong&gt; their apps faster, and with confidence.&lt;/li&gt;
&lt;li&gt;the same passionate ZEIT team, with the same attention to detail.&lt;/li&gt;
&lt;li&gt;continue investing in the open-source projects like Next.js.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Investors in Series A funding:
&lt;/h4&gt;

&lt;p&gt;Experts who led early design at Facebook and Dropbox, created frameworks like React, and are running companies like GitHub, Sentry, and Auth0.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oMu9owDl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AW15s2Qes68FkcgH9V6fG1g%402x.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oMu9owDl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AW15s2Qes68FkcgH9V6fG1g%402x.jpeg" alt="Investors of Vercel, formerly Zeit"&gt;&lt;/a&gt;Top investors in Vercel&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion:
&lt;/h4&gt;

&lt;p&gt;With awesome frameworks like Next.js and deployment solutions to JAMStack, Vercel is ready to take the front-end experience for 11 million JavaScript developers to the next level. So this was the quick round-up on what’s the future of &lt;a href="https://chandan.dev/best-next-js-developer-for-designing-and-developing-your-nextjs-website"&gt;Next Js Development&lt;/a&gt; with Vercel is going to look like. Do checkout my &lt;a href="https://chandan.dev"&gt;&lt;strong&gt;awesome website&lt;/strong&gt;&lt;/a&gt; I built using Next.js and Vercel. Don’t forget to leave a comment on — What improvements would you love to see in Next.js and Vercel? I’d love to hear any thoughts on this topic 😋.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👇 Read my other stories on Next.js below.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://medium.com/commutatus/how-to-deploy-next-js-app-on-aws-elastic-beanstalk-via-travis-333f66fe3102?source=friends_link&amp;amp;sk=7bcc7e3a06f2801d37f2f23f5adec6f2"&gt;How to deploy Next.js app on AWS Elastic Beanstalk via Travis?&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4SWxTmTA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AA-wLHfPxDWgup4JG.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4SWxTmTA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AA-wLHfPxDWgup4JG.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://medium.com/commutatus/seo-in-single-page-applications-csr-vs-ssr-e342d7cc69b?source=friends_link&amp;amp;sk=0488d7c62bf29a1f83ad279cdf8aabda"&gt;Are Single Page Applications still relevant in 2020?&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jqBweB1I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1000/0%2AktsgEHnATYFyLSmS.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jqBweB1I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1000/0%2AktsgEHnATYFyLSmS.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://medium.com/commutatus/how-we-improved-the-performance-of-an-e-commerce-site-using-next-gen-image-formats-8bcff1bf5b19?source=friends_link&amp;amp;sk=41d096ffc5b29899699aedf9ba66aa10"&gt;How did we improve the performance of an E-commerce site using Next-Gen image formats?&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CeLpS-6P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AW6kVmp7KUR9v040p.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CeLpS-6P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2AW6kVmp7KUR9v040p.jpeg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>zeit</category>
      <category>nextjs</category>
      <category>vercel</category>
      <category>now</category>
    </item>
    <item>
      <title>How we improved the performance of an E-commerce site using Next-Gen image formats?</title>
      <dc:creator>Chandu</dc:creator>
      <pubDate>Fri, 03 Apr 2020 11:47:28 +0000</pubDate>
      <link>https://dev.to/chandan/how-we-improved-the-performance-of-an-e-commerce-site-using-next-gen-image-formats-2aj2</link>
      <guid>https://dev.to/chandan/how-we-improved-the-performance-of-an-e-commerce-site-using-next-gen-image-formats-2aj2</guid>
      <description>&lt;h3&gt;
  
  
  How did we improve the performance of an E-commerce site using Next-Gen image formats?
&lt;/h3&gt;

&lt;p&gt;E-Commerce is a growing industry that offers convenience to shop online. According to research, visual content is the best way to give users the same experience online as they get it in-store. However, the better the visual content, the larger the page size is going to be and this, in turn, affects the website’s load time. This decrease in website performance could result in losing out on a lot of potential shoppers. So how can we ensure high-resolution image delivery without hurting the performance of the website? Read on to know more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cXTqBYBA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2As3TjvmSpKaWrXtVlKrhY1g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cXTqBYBA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2As3TjvmSpKaWrXtVlKrhY1g.png" alt="How we boosted Performance of gehna website by using webp image format"&gt;&lt;/a&gt;Improving website performance using WebP image format&lt;/p&gt;

&lt;h3&gt;
  
  
  How to serve images without compromising the site performance?
&lt;/h3&gt;

&lt;p&gt;With the advancement in web technologies, we now have a few &lt;a href="https://developers.google.com/web/tools/lighthouse/audits/webp"&gt;Next-Gen image formats&lt;/a&gt; that have better compression and quality characteristics compared to their older JPEG and PNG counterparts. Serving your images in these formats will load websites faster and consume less bandwidth. Here is the list of next-gen image formats currently available:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebP&lt;/li&gt;
&lt;li&gt;JPEG 2000&lt;/li&gt;
&lt;li&gt;JPEG XR&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why did we choose WebP?
&lt;/h3&gt;

&lt;p&gt;WebP is a new format that was developed by Google in 2010 to provide improved lossless and lossy compression for images. A major benefit of using WebP images is their reduced size and according to Google on average WebP images are 30% smaller in size compared to PNGs and JPEGs. If you look at the total payload of web pages, the images on most sites account for over half of that payload. So by using WebP images with up to 30% size reduction in images, you will see a noticeable impact on your site’s performance metrics.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V4_VFmiH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AzV0QJod0ZW932c95h15M5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V4_VFmiH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AzV0QJod0ZW932c95h15M5w.png" alt="JPG vs WebP size comparision"&gt;&lt;/a&gt;JPG vs WebP&lt;/p&gt;

&lt;h3&gt;
  
  
  Restraint we faced while implementing WebP
&lt;/h3&gt;

&lt;p&gt;One of the major facts you need to be aware of WebP images is cross-browser support. Although about 79% of the global users surf using a browser that supports WebP, we still needed to serve JPG images to iOS and Mac users with Safari browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qDmay1Sq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A0E5Sfc7BnGOggYnby2dizA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qDmay1Sq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A0E5Sfc7BnGOggYnby2dizA.png" alt="Webp image format support by browsers"&gt;&lt;/a&gt;WebP cross-browser support.&lt;/p&gt;

&lt;p&gt;Now that you see the problem just as we did, you do not need to brainstorm ideas to find the apt solution. Here are two techniques I have discovered to overcome the problem -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make changes on the user-facing platform by using a  tag to serve multiple versions of the same images.&lt;/li&gt;
&lt;li&gt;Use/Develop a service that optimizes and serves WebP images from a CDN cache, on-the-fly by detecting the user’s browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would recommend using the second option as there no changes required on the application. Now, if you are interested in learning more about the service (AWS Lambda Function and CloudFront to serve WebP images) we developed, check our &lt;a href="https://awesome.commutatus.com/domains/engineering/efficient/cloudfront-image-conversion.html"&gt;technical guide here&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why did we do it this way?
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--z7_jHEhe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2ADCgaTGffRYS2tpZg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z7_jHEhe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2ADCgaTGffRYS2tpZg" alt="Webp our solution to performance"&gt;&lt;/a&gt;Image optimization — our way.&lt;/p&gt;

&lt;p&gt;There are a lot of services that offer image optimization on the fly but important things we had to keep in mind are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt; : Most of the image optimization services out there require you to store the images in their databases and serve it from there. Since we already had over 20,000 high-resolution images in our AWS S3 bucket, we didn’t want to take the hassle of migrating it elsewhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modifications&lt;/strong&gt; : We wanted to implement a solution that had the least alterations to our frontend and backend systems which means the existing code in both UI and API will continue to work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recurrent Costs&lt;/strong&gt; : With hundreds of visitors on the site every day, the price to pay for the bandwidth consumed from any optimization service is significantly higher. So we used our own function on AWS lambda@Edge and S3 to optimize the images at almost no additional costs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Processing:&lt;/strong&gt; Converting the whole library of images into WebP format is again an arduous task and could take a lot of time. So, we only convert images into WebP on their first request. As an added bonus we also process and store different dimensions of the images in the cache to achieve instant delivery from edge locations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modularity&lt;/strong&gt; : Our solution can be easily deployed to any of our other platforms without the need for remodeling.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Our results:
&lt;/h3&gt;

&lt;p&gt;With, WebP efficiently compressing the images and preserving the quality and our edge functions caching the images we didn’t have to tradeoff between image quality or the number of images to serve to achieve faster load speed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d9u4d0zU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Aerbper8cYxtjizadpIRkcQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d9u4d0zU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Aerbper8cYxtjizadpIRkcQ.jpeg" alt="images size in homepage of gehna website after using webp image format"&gt;&lt;/a&gt;Image formats size comparison.&lt;/p&gt;

&lt;p&gt;Google has indicated that site speed is one of the signals used by its algorithm to&lt;a href="https://dev.to/chandan/how-friendly-are-single-page-applications-to-seo-51d9-temp-slug-2597941"&gt;rank pages higher&lt;/a&gt;. With the above techniques and improved performance, we were also able to obtain higher scores in page audits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JkeFzHdf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ahk_7uIvF1m9hCQ5h8sBVHA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JkeFzHdf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ahk_7uIvF1m9hCQ5h8sBVHA.png" alt="Performance boost in google lighthouse audit of gehna website after using webp image format"&gt;&lt;/a&gt;Google Lighthouse — audit scores.&lt;/p&gt;

&lt;p&gt;By serving the images from AWS Lambda@Edge, we were able to load &lt;a href="https://www.gehnaindia.com"&gt;Gehna’s&lt;/a&gt; homepage in under 5 seconds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f7F6dZZI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/972/1%2AzDAIdagqSgyFmOteajefaA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f7F6dZZI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/972/1%2AzDAIdagqSgyFmOteajefaA.png" alt="Decrease load time of website after using webp"&gt;&lt;/a&gt;Decreased load time of web page.&lt;/p&gt;

&lt;p&gt;The below graph shows the improvement in page speed provided by GTmetrix.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--40hqVCJR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/991/1%2APt7xSvIR7xlYZBvUJzZHvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--40hqVCJR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/991/1%2APt7xSvIR7xlYZBvUJzZHvw.png" alt="Performance boost website after using webp"&gt;&lt;/a&gt;GTmetrix page speed after WebP images.&lt;/p&gt;

&lt;h4&gt;
  
  
  Wrapping up:
&lt;/h4&gt;

&lt;p&gt;Next-gen image formats like WebP offer an incredible saving in file size with relatively little to zero compromises in image quality and when coupled with AWS Lambda@Edge, it provides great value in boosting the performance of a website. WebP definitely seems to be a promising image format for the web with anticipation of Apple’s Safari supporting WebP images in the near future.&lt;/p&gt;

&lt;p&gt;Also, do check out the awesome E-commerce website &lt;a href="https://www.gehnaindia.com"&gt;&lt;strong&gt;Gehna&lt;/strong&gt;&lt;/a&gt; we built at &lt;a href="https://www.commutatus.com"&gt;&lt;strong&gt;Commutatus&lt;/strong&gt;&lt;/a&gt; using Next.JS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v3Hm8LVc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AgF4YbRwzaZz2E0ysA1N8tg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v3Hm8LVc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AgF4YbRwzaZz2E0ysA1N8tg.jpeg" alt="Gehna website built at commutatus"&gt;&lt;/a&gt;Gehna (E-commerce jewellery platform) built with ❤️ at Commutatus using Next.js&lt;/p&gt;

&lt;p&gt;If you find this article useful in improving the performance of your web site, give an 👏 and leave a comment on — What other techniques can make your page load faster? I’d love to hear any thoughts on this topic 😋&lt;/p&gt;




</description>
      <category>imagecompression</category>
      <category>webp</category>
      <category>websitedevelopment</category>
      <category>websiteperformance</category>
    </item>
    <item>
      <title>Dashboard to show flattening of the curve</title>
      <dc:creator>Chandu</dc:creator>
      <pubDate>Mon, 23 Mar 2020 09:11:30 +0000</pubDate>
      <link>https://dev.to/chandan/dashboard-to-show-flattening-of-the-curve-2l9i</link>
      <guid>https://dev.to/chandan/dashboard-to-show-flattening-of-the-curve-2l9i</guid>
      <description>&lt;p&gt;COVID-19 / Coronavirus has led to a pandemic that is threatening every country today. The promising strategy to limit the damage caused by this pandemic is to flatten the curve.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l-JurQcl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AsSrpZxpyNNObHknsSuvGXw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l-JurQcl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/800/1%2AsSrpZxpyNNObHknsSuvGXw.gif" alt="Flattening the curve for covid-19"&gt;&lt;/a&gt;Source: Wikipedia&lt;/p&gt;

&lt;h4&gt;
  
  
  What is an epidemic curve?
&lt;/h4&gt;

&lt;p&gt;During any pandemic, healthcare resources like hospitals, ICU beds, and healthcare staff can be overwhelmed by the more number of patients, beyond the baseline number of patients who are already being cared for by the healthcare system. An epidemic curve is drawn to visualize the progress of a disease outbreak over time.&lt;/p&gt;

&lt;p&gt;This curve gives us a brief regarding the number of new outbreak cases by date of onset of the disease and hence the overall shape of the curve can reveal the type of outbreak we’re dealing with.&lt;/p&gt;

&lt;h4&gt;
  
  
  Healthcare capacity line:
&lt;/h4&gt;

&lt;p&gt;The horizontal line represents the capacity of the country’s healthcare system. This capacity can be defined as the number of beds, staffing, and other measures available for patient care. Today, due to COVID-19 most of the countries are already operating close to the capacity line and the curve posses a threat of crossing this line as the virus spreads very rapidly.&lt;/p&gt;

&lt;h4&gt;
  
  
  What happens when the line is crossed?
&lt;/h4&gt;

&lt;p&gt;When the epidemic curve crosses the healthcare capacity line, the healthcare system can no longer meet the needs of COVID-19 patients and the other types of patients. At this point, people may not get the best care and the mortality rate starts to rise rapidly.&lt;/p&gt;

&lt;h4&gt;
  
  
  What is flattening the curve?
&lt;/h4&gt;

&lt;p&gt;A large number of lives can be saved by just ensuring that people get sick at a slower rate. This is termed as flattening the epidemic curve. A flattened curve indicates that the same number of people ultimately get infected with coronavirus but spread over a longer period which leads to a less stressed health care system.&lt;/p&gt;

&lt;h4&gt;
  
  
  When does flattening the curve happen?
&lt;/h4&gt;

&lt;p&gt;The most important key factor to flatten the curve is social distancing. The objective of social distancing or self-isolation is to reduce the probability of close contact between persons carrying an infection, and others who are not infected, thus minimizing the virus transmission. This is the underlying reason why governments are closing schools, non-critical businesses, social/sports events and other places where a ton people gather.&lt;/p&gt;

&lt;h4&gt;
  
  
  Can social distancing alone flatten the curve?
&lt;/h4&gt;

&lt;p&gt;By limiting interactions between individuals, we can limit the spread of the disease but that doesn’t mean it is the only effective way to flatten the curve. There are several other factors that you can do to aid flatten the curve such as practicing good hygiene by washing your hands, using sanitizers, cleaning frequently touched surfaces and self-isolating in confirmed and suspected cases.&lt;/p&gt;

&lt;h4&gt;
  
  
  Where can I see the curves for each country?
&lt;/h4&gt;

&lt;p&gt;We at &lt;a href="https://www.commutatus.com"&gt;Commutatus&lt;/a&gt;, developed a dashboard to show the flattening of curve by each country. Feel free to check it out &lt;a href="https://flattening-the-curve.commutatus.com/"&gt;here&lt;/a&gt; : &lt;a href="https://flattening-the-curve.commutatus.com/"&gt;&lt;strong&gt;https://flattening-the-curve.commutatus.com/&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XIqqZUtW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AoFGzSqDbK8h0FHhnMKke4Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XIqqZUtW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AoFGzSqDbK8h0FHhnMKke4Q.png" alt="Dashboard designed by commutatus to show flattening the curve of each country"&gt;&lt;/a&gt;Dashboard to show flattening curve of each country&lt;/p&gt;

&lt;h4&gt;
  
  
  How can we help in flattening the curve?
&lt;/h4&gt;

&lt;p&gt;As the severity of COVID-19 rises, it’s clear that our best option is to flatten the epidemic curve. So here is the list of things every individual is recommended to follow :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wash your hands as frequently as you can.&lt;/li&gt;
&lt;li&gt;Practice efficient social distancing.&lt;/li&gt;
&lt;li&gt;Stay home.&lt;/li&gt;
&lt;li&gt;Proper usage of sanitizers.&lt;/li&gt;
&lt;li&gt;Don’t go for hospitals unless necessary.&lt;/li&gt;
&lt;li&gt;Don’t overbuy essential medical supplies like N95 masks which are required by healthcare providers while treating patients.&lt;/li&gt;
&lt;li&gt;Most importantly, &lt;strong&gt;don’t panic!&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Let’s all unite against the COVID-19 pandemic and fight ourselves out of the difficult times.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zzpnROIj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A3Ad0Xg3XtYT3-OayfK0hrw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zzpnROIj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A3Ad0Xg3XtYT3-OayfK0hrw.jpeg" alt="WHO recommendations to help flatten the curve for COVID-19 Coronavirus"&gt;&lt;/a&gt;Source: WHO&lt;/p&gt;

</description>
      <category>covid19</category>
      <category>coronavirus</category>
      <category>pandemic</category>
      <category>corona</category>
    </item>
    <item>
      <title>How to deploy Next.js app on AWS Elastic Beanstalk via Travis?</title>
      <dc:creator>Chandu</dc:creator>
      <pubDate>Sat, 19 Oct 2019 14:27:22 +0000</pubDate>
      <link>https://dev.to/chandan/how-to-deploy-next-js-app-on-aws-elastic-beanstalk-via-travis-12il</link>
      <guid>https://dev.to/chandan/how-to-deploy-next-js-app-on-aws-elastic-beanstalk-via-travis-12il</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dr824Cbz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A9mxGLfXw4oMYnfUkty0EBQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dr824Cbz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A9mxGLfXw4oMYnfUkty0EBQ.jpeg" alt="Tutorial on how to deploy Next.js app on AWS Elastic Beanstalk via Travis"&gt;&lt;/a&gt;How to deploy Next.js app on AWS Elastic Beanstalk via Travis?&lt;/p&gt;

&lt;p&gt;Single-page JavaScript applications can be pretty challenging these days due to client-side routing, page layout, APIs, server-side rendering and mainly SEO. This is where Next.js helps you build server-side rendered, SEO friendly apps with high customisability.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why deploy to AWS?
&lt;/h4&gt;

&lt;p&gt;Next.js was built by Zeit back in 2016 and has quickly gained traction to the point of becoming one of the most popular tools of its kind. The same team built &lt;a href="https://zeit.co"&gt;Zeit Now&lt;/a&gt; — the easiest way to deploy websites and host your web projects with zero configuration. Unfortunately, it doesn’t give us full control of AWS instances and lambda functions where our apps are hosted. Since most companies like to host apps on their own AWS servers for privacy concerns, let’s see how we can deploy a Next.js application on AWS.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you are building a &lt;strong&gt;serverless&lt;/strong&gt; Next.js app, do checkout &lt;a href="https://github.com/danielcondemarin/serverless-next.js/tree/master/packages/serverless-nextjs-component"&gt;Serverless Next.js Component&lt;/a&gt; by &lt;a href="https://medium.com/u/d6927da06a80"&gt;Daniel Conde&lt;/a&gt; which allows you to deploy Next.js apps to your own AWS Lambda@Edge functions in every CloudFront edge location across the globe with almost no configuration. But if you are using Express server in your app for other functionality, you might want to host it on AWS Elastic beanstalk.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Steps to host your Next.js app on AWS Elastic beanstalk via Travis:
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt; : Make sure your app has a server for example Express and next.config.js &lt;strong&gt;doesn’t&lt;/strong&gt; have the target set to serverless.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FWq7m4I---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ara6jJ1JZ8YhnIgoqPGJi0A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FWq7m4I---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ara6jJ1JZ8YhnIgoqPGJi0A.png" alt=""&gt;&lt;/a&gt;Next.js app on express for AWS hosting&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt; : Edit package.json to execute your scripts for development, staging and production environments.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {

        "dev": "NODE\_ENV=development node ./server.js",
        "build": "next build",
        "start": "next start",

        "deploy-staging": "NODE\_ENV=staging next build &amp;amp;&amp;amp; NODE\_ENV=staging node ./server.js",

        "deploy-production": "NODE\_ENV=production next build &amp;amp;&amp;amp; NODE\_ENV=production node ./server.js"

},
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt; : Time for AWS! Go to your AWS dashboard and click on Elastic Beanstalk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HnTsQWny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Aau9HrwmAuhyJL7FKvOyqlQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HnTsQWny--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Aau9HrwmAuhyJL7FKvOyqlQ.png" alt=""&gt;&lt;/a&gt;AWS Elastic beanstalk for Next.js&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4&lt;/strong&gt; : Click on Create New Application and enter a name for your application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--skmdooE2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AF1QwgHfQJ2NaLvRVob0Fxg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--skmdooE2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AF1QwgHfQJ2NaLvRVob0Fxg.png" alt=""&gt;&lt;/a&gt;Create an application on AWS Elastic Beanstalk for Next.js&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5&lt;/strong&gt; : Once you have created the application, under Actions dropdown, click on Create environment&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WUbOv0Lo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/828/1%2A8tQQh0xJsWuTeZPhDsYPyw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WUbOv0Lo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/828/1%2A8tQQh0xJsWuTeZPhDsYPyw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6&lt;/strong&gt; : Choose Web server environment and click select.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jSlh52vM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A33CQck9_Q4I0zPxvZqjlCA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jSlh52vM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A33CQck9_Q4I0zPxvZqjlCA.png" alt=""&gt;&lt;/a&gt;Elastic beanstalk web server environment for Next.js app&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7&lt;/strong&gt; : Now, enter the environment name for example next-app-staging or next-app-production and choose a domain. Make sure to select Node.js under Platform settings and click on Configure more options at the bottom.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qAPqInmy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AFsEa6mexoMdCUYwBJLcloQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qAPqInmy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AFsEa6mexoMdCUYwBJLcloQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 8&lt;/strong&gt; : Click on modify of the &lt;strong&gt;Software&lt;/strong&gt; tab and type npm run deploy-staging or npm run deploy-production in the &lt;strong&gt;Node command&lt;/strong&gt; field based on your environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--msELIXAV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AlCa3_KBxQZlKsITea3wJgA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--msELIXAV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AlCa3_KBxQZlKsITea3wJgA.png" alt=""&gt;&lt;/a&gt;Deploy Next.js on AWS&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 9&lt;/strong&gt; : Click on Create Environment and wait for a few minutes to let AWS set up everything for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; : Don’t worry if your application Health status shows &lt;strong&gt;Severe&lt;/strong&gt; because we still didn’t upload our app to run the node command. At this point, if you want to upload the app manually, you can do so by simply zipping the entire project folder without next build folder. But, come on just one more step to automate the whole deployment process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 10&lt;/strong&gt; : Now let’s integrate Travis for CI. You can check out several online tutorials on how to set up Travis with your GitHub repository. Create a travis.yml file in the root directory and configure it as follows:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; : The above configuration lets you deploy to different environments staging and production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 11&lt;/strong&gt; : Login to your Travis dashboard and click on your project repository. Go to more options &amp;gt; settings &amp;gt; Environment variables and add your AWS access keys and S3 bucket.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1lDUYg_l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AUO6e1busMVPsUWQJKVJL6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1lDUYg_l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AUO6e1busMVPsUWQJKVJL6w.png" alt=""&gt;&lt;/a&gt;Travis for next.js app deployment on aws&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; : You can copy the S3 bucket name after &lt;strong&gt;Step: 9 is&lt;/strong&gt; completed by going to AWS Console &amp;gt; Services &amp;gt; S3. We just need to copy the bucket name and not the path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 12&lt;/strong&gt; : That’s it! Just push your code to Github, sit back and relax. Travis will automatically trigger a build and deploy the latest version of your Next.js app on AWS Elastic Beanstalk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus tip&lt;/strong&gt; : To avoid any downtime of 5–10 min during the deployment process, create multiple EC2 instances/load balancers and enable rolling updates.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Additional Information: (Alternative build process)&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The above steps will build and run your Next.js application on AWS Elastic Beanstalk and Travis is just used to push your code from GitHub to AWS. But if you want to build your app on Travis and then run it on AWS, here are the configuration changes you will have to make:&lt;/p&gt;

&lt;p&gt;In package.json,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {

"dev": "NODE\_ENV=development node ./server.js",

"build": "next build",

"start": "next start",

"build-staging": "NODE\_ENV=staging next build",

"deploy-staging": "NODE\_ENV=staging node ./server.js",

"build-production": "NODE\_ENV=production next build",

"deploy-production": "NODE\_ENV=production node ./server.js"

},
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;In travis.yml, add the following lines before deploy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;before\_script:
 - npm install

script:
 - npm run build-${NODE\_ENV}

before\_deploy:
 - cd $TRAVIS\_BUILD\_DIR
 - sed -i '/.next/d' .gitignore
 - git add . &amp;amp;&amp;amp; git commit -m "latest build"
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The above code will install &lt;strong&gt;npm&lt;/strong&gt; on travis virtual machine and build your application. You can add an NODE_ENVenvironment variable in travis available only to a specific branch. For example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VAtNh6jp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A6khs54jhK7UpLm3XluFTWQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VAtNh6jp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A6khs54jhK7UpLm3XluFTWQ.png" alt=""&gt;&lt;/a&gt;Env variable to branch in travis&lt;/p&gt;

&lt;p&gt;This will ensure the right build (staging/production) is made on travis. Finally, the before_deploy: will go to your build directory, remove .next from .gitignore and commit the changes temporarily on travis.&lt;/p&gt;

&lt;p&gt;Now that your application is built on Travis, you just need to start your app server on AWS as mentioned in this tutorial.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Phew! Feeling tired ? Clone my &lt;a href="https://github.com/chandan-reddy-k/nextjs-aws-elastic-beanstalk"&gt;Github repo&lt;/a&gt;. 😉&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wwbrmi-W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AOvcEv8uJ7iI-nSi9Ej6s1g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wwbrmi-W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AOvcEv8uJ7iI-nSi9Ej6s1g.jpeg" alt=""&gt;&lt;/a&gt;&lt;a href="https://www.gehnaindia.com"&gt;Gehna (E-commerce jewellery platform) built with ❤️ at Commutatus using NEXT.j&lt;/a&gt;s&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion:
&lt;/h4&gt;

&lt;p&gt;If you find this article useful as a guide to deploying your Next.js app running on the express server to AWS Elastic Beanstalk via Travis CI, give an 👏 and leave your queries in the comment section below? I’d love to answer them 😋. Also, do check out the awesome E-commerce website &lt;a href="https://www.gehnaindia.com"&gt;Gehna&lt;/a&gt; that we built at Commutatus using Next.js running on AWS Elastic beanstalk.&lt;/p&gt;




</description>
      <category>nextjs</category>
      <category>deployment</category>
      <category>elasticbeanstalk</category>
      <category>aws</category>
    </item>
    <item>
      <title>How to configure a reverse proxy in AWS?</title>
      <dc:creator>Chandu</dc:creator>
      <pubDate>Sat, 19 Oct 2019 09:42:55 +0000</pubDate>
      <link>https://dev.to/chandan/how-to-configure-a-reverse-proxy-in-aws-29b8</link>
      <guid>https://dev.to/chandan/how-to-configure-a-reverse-proxy-in-aws-29b8</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qcXtEy_H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ARtN9xkQOPrkDDwitDp7oCA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qcXtEy_H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ARtN9xkQOPrkDDwitDp7oCA.jpeg" alt=""&gt;&lt;/a&gt;Setting up reverse proxy in aws.&lt;/p&gt;

&lt;p&gt;Ever tried setting up multiple web applications under the same domain? Where users can access applications running on the same server with different path names? For instance, you hosted a react app at &lt;a href="http://www.example.com"&gt;www.example.com&lt;/a&gt; and desire to have a Wordpress blog at &lt;a href="http://www.example.com/blog"&gt;www.example.com/blog&lt;/a&gt;. This is where the concept of reverse proxy kicks in and helps you accomplish what you are looking for.&lt;/p&gt;

&lt;h4&gt;
  
  
  What’s a proxy and the difference between the forward &amp;amp; reverse proxy?
&lt;/h4&gt;

&lt;p&gt;A simple definition for “proxy” means that data is passing through a third party, before reaching to the actual location. Forward or regular proxies are servers that encapsulate the original identity of the requestor i.e., users stay anonymous to the host server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uCeOfLb0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/810/1%2A113GbW_Ec_A50YDoa4HyQA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uCeOfLb0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/810/1%2A113GbW_Ec_A50YDoa4HyQA.jpeg" alt=""&gt;&lt;/a&gt;&lt;a href="https://www.imperva.com/learn/performance/reverse-proxy/"&gt;Forward Proxy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reverse proxy as the name suggests does the opposite of what a forward proxy can do. It takes requests from the user and forwards them to the host web servers acting as a load balancer. We can leverage this behaviour to serve different apps under the same hood.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6LsIg4LD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/810/1%2Agjlo1NiNk_uWiLGb8GD8Aw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6LsIg4LD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/810/1%2Agjlo1NiNk_uWiLGb8GD8Aw.jpeg" alt=""&gt;&lt;/a&gt;&lt;a href="https://www.imperva.com/learn/performance/reverse-proxy/"&gt;Reverse Proxy&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To summarise, the forward proxy hides the clients whereas a reverse proxy hides the servers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Enough of theory, let's get to work!
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oJR1skj0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2ArOhDYJWnVwJpb-K_" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oJR1skj0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/0%2ArOhDYJWnVwJpb-K_" alt=""&gt;&lt;/a&gt;Photo by &lt;a href="https://unsplash.com/@aligns?utm_source=medium&amp;amp;utm_medium=referral"&gt;Jordan Harrison&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  How to configure a reverse proxy in AWS?
&lt;/h4&gt;

&lt;p&gt;Before we move onto configuration, make sure your web application is deployed to &lt;strong&gt;AWS elastic beanstalk&lt;/strong&gt;. If it’s not, check out this article ( &lt;a href="https://medium.com/commutatus/deploy-angular-application-on-aws-elastic-beanstalk-part-1-2-cf6419728c25"&gt;Easy steps to deploy a node application on AWS&lt;/a&gt; ).&lt;/p&gt;

&lt;h4&gt;
  
  
  Step: 1
&lt;/h4&gt;

&lt;p&gt;Go to your EC2 instances from the AWS console.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HecR0vse--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AXL6EXNuZI7ZmyuQROe3X1w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HecR0vse--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AXL6EXNuZI7ZmyuQROe3X1w.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step: 2
&lt;/h4&gt;

&lt;p&gt;Scroll to the bottom and click on &lt;strong&gt;Load balancers&lt;/strong&gt; to check if your instances are in an active state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7qZzte8E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AugGGkBNtaDj9okDT3GLI6Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7qZzte8E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AugGGkBNtaDj9okDT3GLI6Q.png" alt=""&gt;&lt;/a&gt;Choose Load Balancers in EC2&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AeRdri4e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A12b1Mx63DivnR25vBrFdcg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AeRdri4e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A12b1Mx63DivnR25vBrFdcg.png" alt=""&gt;&lt;/a&gt;Load balancers in Active State&lt;/p&gt;

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

&lt;p&gt;Create a Target Group for your instance&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---GCwBOOx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AHMbT5Fd5Q6UA_BcydcIn8g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---GCwBOOx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AHMbT5Fd5Q6UA_BcydcIn8g.png" alt=""&gt;&lt;/a&gt;Create a Target Group&lt;/p&gt;

&lt;h4&gt;
  
  
  Step: 4
&lt;/h4&gt;

&lt;p&gt;Name your target group and click ‘ &lt;strong&gt;Create&lt;/strong&gt; ’. Default settings are fine here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KkKAVOFR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AZs-uLlCGd_5iXqNKV8rfRg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KkKAVOFR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AZs-uLlCGd_5iXqNKV8rfRg.png" alt=""&gt;&lt;/a&gt;Naming your target group&lt;/p&gt;

&lt;h4&gt;
  
  
  Step: 5
&lt;/h4&gt;

&lt;p&gt;Select the target group you just created and click ‘ &lt;strong&gt;Edit&lt;/strong&gt; ’.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cBxhGMWS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ad-u-0uWgB3FM_EgPT2LvYA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cBxhGMWS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ad-u-0uWgB3FM_EgPT2LvYA.png" alt=""&gt;&lt;/a&gt;Editing the target group&lt;/p&gt;

&lt;h4&gt;
  
  
  Step: 6
&lt;/h4&gt;

&lt;p&gt;Select a running instance you want to register with your target group (in this case, it's a WordPress blog) and click &lt;strong&gt;‘Add to registered&lt;/strong&gt; ’.&lt;/p&gt;

&lt;p&gt;After it shows up in the Registered targets, click on ‘ &lt;strong&gt;Save&lt;/strong&gt; ’&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zeYaCpsC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ACvym9Wm7ARq93NmZSoOAMQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zeYaCpsC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2ACvym9Wm7ARq93NmZSoOAMQ.png" alt=""&gt;&lt;/a&gt;Registering our instance with the target group&lt;/p&gt;

&lt;h4&gt;
  
  
  Step: 7
&lt;/h4&gt;

&lt;p&gt;Now, go back to your load balancers and select the one you want to proxy. Click on Listeners tab and click on “ &lt;strong&gt;View/edit rules&lt;/strong&gt; ” of the HTTPS: 443 listener you configured while &lt;a href="https://medium.com/commutatus/configure-ssl-in-elastic-beanstalk-application-part-2-2-f1c20e3f562f"&gt;setting up SSL&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IsL5lJRd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AEX7LS0qmOTLELQsQehgRjQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IsL5lJRd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AEX7LS0qmOTLELQsQehgRjQ.png" alt=""&gt;&lt;/a&gt;Editing listeners for reverse proxy&lt;/p&gt;

&lt;h4&gt;
  
  
  Step: 8
&lt;/h4&gt;

&lt;p&gt;Tap on the + icon and click “ &lt;strong&gt;Insert Rule&lt;/strong&gt; ”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FT_lq4br--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AFkC1TXIYAW1_iFnJEQIMrw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FT_lq4br--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AFkC1TXIYAW1_iFnJEQIMrw.png" alt=""&gt;&lt;/a&gt;adding forwarding rules&lt;/p&gt;

&lt;h4&gt;
  
  
  Step: 9
&lt;/h4&gt;

&lt;p&gt;Add the following 2 rules to proxy the blog server every time a user hits the blog path:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;IF Path is /blog THEN Forward to example-blog&lt;/p&gt;

&lt;p&gt;IF Path is /blog/* THEN Forward to example-blog&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iiMpVfdG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A9U_GgFRsiB_WJdm5-fpCQg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iiMpVfdG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A9U_GgFRsiB_WJdm5-fpCQg.png" alt=""&gt;&lt;/a&gt;rules to reverse proxy blog&lt;/p&gt;

&lt;h4&gt;
  
  
  Step: 10
&lt;/h4&gt;

&lt;p&gt;Let’s see this in action!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--L22DCi6N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/600/1%2Al71wEiuvxGyFbHS00J8YUw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--L22DCi6N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/600/1%2Al71wEiuvxGyFbHS00J8YUw.gif" alt=""&gt;&lt;/a&gt;Reverse proxying /blog path&lt;/p&gt;

&lt;p&gt;Give an 👏 if this article was helpful and leave your queries in the comments section below.&lt;/p&gt;




</description>
      <category>angular</category>
      <category>multiple</category>
      <category>reverseproxy</category>
      <category>react</category>
    </item>
    <item>
      <title>My experience of the arbor program by Commutatus</title>
      <dc:creator>Chandu</dc:creator>
      <pubDate>Thu, 15 Aug 2019 18:21:01 +0000</pubDate>
      <link>https://dev.to/chandan/my-experience-of-the-arbor-program-by-commutatus-191h</link>
      <guid>https://dev.to/chandan/my-experience-of-the-arbor-program-by-commutatus-191h</guid>
      <description>&lt;h3&gt;
  
  
  My experience of The Arbor Program by Commutatus
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KJw5Udvp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AL37Rp_EXE4PSvlwDkelbZA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KJw5Udvp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AL37Rp_EXE4PSvlwDkelbZA.jpeg" alt=""&gt;&lt;/a&gt;My experience of the arbor program by Commutatus over the past year.&lt;/p&gt;

&lt;h4&gt;
  
  
  Quick intro:
&lt;/h4&gt;

&lt;p&gt;Hey ! 👋 I am Chandan, a 2019 computer science graduate from SRM University in Chennai. I am here to talk about my experience working in Commutatus.&lt;/p&gt;

&lt;p&gt;One of the key experiences everyone recommends during your college time is to do an internship. I wanted to intern in a company that would give me an idea of what it was like to actually be a developer. By the time the college placements started, I was looking for a company that could give me such an experience. Commutatus was one of those companies. The Arbor Program (TAP) was an initiative by Commutatus to nurture young talent and train them in technical development skills while they were still in college, so that they would be ready to tackle real-world problems head-on by the time they graduated. The program was also backed with an attractive offer letter by the company while I was still studying. This excited me as I was looking to explore a career path and develop new skills that would give me an edge in the job market.&lt;/p&gt;

&lt;h4&gt;
  
  
  Hiring-process :
&lt;/h4&gt;

&lt;p&gt;The selection procedure was quite simple. Starting off with a pre-screening round comprising of an online test and an easy assignment. This was followed by a case study round to where they gave us a problem that the company had faced in one of their partner’s products and asked asked us to solve it to evaluate our problem-solving skills. The final round was a relaxed, face-to-face interview with a few experienced developers and the CEO of &lt;a href="https://www.commutatus.com"&gt;Commutatus&lt;/a&gt;. I felt this was a perfect example of how interviews should actually happen. The whole thing felt like a conversation rather than an interview.&lt;/p&gt;

&lt;h4&gt;
  
  
  Beginning of awesomeness :
&lt;/h4&gt;

&lt;p&gt;I was thrilled on receiving company’s offer letter, confirming my selection the day following my interview. Upon arriving at the Commutatus office on the first day of my internship I was filled with mixed emotions, anxiety and excitement. I was accompanied by five other students. This being my first position in an office atmosphere, I didn’t know exactly what to expect. However, the environment at Commutatus was quite relaxed. We had an onboarding to understand the core principles of the company it’s vision. During my initial phase, I was given small weekly tasks that would aid in building up my web development skills.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tBIfHO21--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AlUcKueLB5Dxa8LNUhPA_gA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tBIfHO21--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AlUcKueLB5Dxa8LNUhPA_gA.png" alt=""&gt;&lt;/a&gt;Students selected for TAP 1.0 (I am the one on extreme right 😎)&lt;/p&gt;

&lt;h4&gt;
  
  
  The journey so far :
&lt;/h4&gt;

&lt;p&gt;My internship at Commuatus has taught me more than I could have imagined. It all started from simple HTML/CSS websites to large scale, advanced single-page applications. Your role (frontend/backend/full-stack developer) in the company is decided based on your interests and performance in the weekly tasks assigned to you. As I was keen to learn Javascript and showed interest in building a wonderful user experience, I was given tasks related to the role of frontend dev. Soon after I completed my training in core concepts and advanced javascript, I was introduced to the team I’ll be working with. At this point, I was extremely happy getting inducted into the React team. ( For those who don’t know what’s React, it’s a modern javascript library used to build web applications like Facebook, Instagram, Netflix, Codecademy, etc.,).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c01w37VQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A50vP0siKMQ_sJoJ8yuHEew.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c01w37VQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A50vP0siKMQ_sJoJ8yuHEew.jpeg" alt=""&gt;&lt;/a&gt;Meet my React team at Commutatus ❤️&lt;/p&gt;

&lt;h4&gt;
  
  
  What I learned during TAP?
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bJ5qAa0H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AR_rv_nlpKw39Yut0EIxG-g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bJ5qAa0H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AR_rv_nlpKw39Yut0EIxG-g.jpeg" alt=""&gt;&lt;/a&gt;Skills I acquired during the arbor program in Commutatus&lt;/p&gt;

&lt;h4&gt;
  
  
  Amazing projects I have worked on :
&lt;/h4&gt;

&lt;p&gt;The biggest benefit of TAP is that it offers a space for students and graduates to gain work experience by working on live projects. In the past year, I have worked on numerous projects :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nMYWXmQy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AQVjEFLXPEWVE0EYCuv6RLw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nMYWXmQy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AQVjEFLXPEWVE0EYCuv6RLw.jpeg" alt=""&gt;&lt;/a&gt;Partners of Commutatus&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://aiesec.org/"&gt;&lt;strong&gt;AIESEC&lt;/strong&gt;&lt;/a&gt;: Yes, that’s right! Commutatus manages all global scale development for AIESEC’s platforms which facilitate leadership development and cross cultural experiences in over 120 countries. I am part of the development team that built the management portal — EXPA, to manage and analyze global operations from CRM tools to complex analytic functions.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://bit.ly/educatly-website"&gt;&lt;strong&gt;Educatly&lt;/strong&gt;&lt;/a&gt;: A student platform to explore over 1,50,000 study-abroad opportunities worldwide. Educatly was my first project as a React developer that gave me an exceptional learning experience and an opportunity to apply the skills I acquired during TAP. I also wrote my first ever &lt;a href="https://dev.to/chandan/heuristic-fragment-matcher-warning-how-to-fix-it-1li8-temp-slug-3710631"&gt;tech blog&lt;/a&gt; on medium, addressing a problem I faced during development and it has over 2000 views till date 🤩.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gehna&lt;/strong&gt; : An e-commerce platform for custom handmade jewellery, built on NEXT.JS (first of it’s kind at Commutatus). This project has taught me a ton of new skills as I got an opportunity to build it from scratch and integrate core dependencies, all by myself in just 3 months. I am one of the key developers of this platform and I built the whole user interface (or maybe 90% of it 😛).&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Perks of working in Commutatus :
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Be a Polymath&lt;/strong&gt; : &lt;em&gt;You are free to wear any hat in the company. (Wait! not this 🎩) I mean you have opportunities to explore any domain you like and diversify your skills. It’s been less than a year at Commutatus and I got a chance to recruit for TAP 2019. How cool is that ? I just graduated in May and three months later, I am revisiting my college as a recruiter.&lt;/em&gt; &lt;strong&gt;Yup! Let’s meet in the interview.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No hierarchy&lt;/strong&gt; 😎 – &lt;em&gt;we don’t address anyone as ‘&lt;/em&gt; &lt;strong&gt;&lt;em&gt;sir&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;’ instead we use the ‘&lt;/em&gt; &lt;strong&gt;&lt;em&gt;bro&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;’ code.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible work hours ⏰ &lt;/strong&gt; &lt;em&gt;— although there isn’t a fixed time we usually work from 11 am to 6 pm and you also have an option to work from home.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Employee fitness and health 💪&lt;/strong&gt; &lt;em&gt;— the company provides medical insurance to all its employees and also focuses on doing fitness activities/challenges. We also play football/cricket every Thursday.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Special days 🎉-&lt;/strong&gt; We celebrate &amp;amp; do employee engagement activities on occasions like World Tug-of-war day / World Pizza day etc.,&lt;/li&gt;
&lt;li&gt;*&lt;em&gt;Free lunch *&lt;/em&gt;!! 🥗 🍴&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d9vSSKDs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Al0odbIkBoS0eNUyzzXJpVQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d9vSSKDs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Al0odbIkBoS0eNUyzzXJpVQ.jpeg" alt=""&gt;&lt;/a&gt;Celebrating world Pizza day at Commutatus&lt;/p&gt;

&lt;h4&gt;
  
  
  Oh, wait!
&lt;/h4&gt;

&lt;p&gt;I almost forgot to mention this. We also have &lt;strong&gt;Tiger&lt;/strong&gt; in the office.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://bit.ly/tiger-the-office-cat"&gt;Fun-fact: Our Tiger got featured in Times of India.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q8pRyA4P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AfpU71x6LdZDYuhDGs9fjFQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q8pRyA4P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AfpU71x6LdZDYuhDGs9fjFQ.jpeg" alt=""&gt;&lt;/a&gt;Our beloved office cat 🐱- Tiger&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion :
&lt;/h4&gt;

&lt;p&gt;As mentioned earlier, this internship (&lt;a href="https://arbor.commutatus.com/"&gt;The Arbor Program&lt;/a&gt;) has improved my skills a ton, both off the paper and on paper. It not only served as a positive learning experience but a resume builder as well. It’s just been 3 months since I officially graduated out of college and now I am a full-fledged React developer. I thank my team leader, CEO and all other people who assisted me in building a strong portfolio &amp;amp; develop my technical skills. Finally, I am proud to be part of the Commutatus family.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bri2xm1r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2APx-QrbnDn_p_gxJXxQBCgQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bri2xm1r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2APx-QrbnDn_p_gxJXxQBCgQ.jpeg" alt=""&gt;&lt;/a&gt;Team Commutatus at annual conference (ComCon)&lt;/p&gt;




</description>
      <category>webdev</category>
      <category>experience</category>
      <category>tap</category>
      <category>commutatus</category>
    </item>
    <item>
      <title>How friendly are Single Page Applications to SEO?</title>
      <dc:creator>Chandu</dc:creator>
      <pubDate>Thu, 08 Aug 2019 07:08:52 +0000</pubDate>
      <link>https://dev.to/chandan/how-friendly-are-single-page-applications-to-seo-47h5</link>
      <guid>https://dev.to/chandan/how-friendly-are-single-page-applications-to-seo-47h5</guid>
      <description>&lt;h3&gt;
  
  
  Are Single Page Applications still relevant in 2020?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vzhf7Z-U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1000/1%2AK0flpUHuNKMJEJ99q9K5rA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vzhf7Z-U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1000/1%2AK0flpUHuNKMJEJ99q9K5rA.jpeg" alt=""&gt;&lt;/a&gt;SEO on Single Page Applications&lt;/p&gt;

&lt;p&gt;Let’s start with the most popular JavaScript framework out there, REACT!&lt;br&gt;&lt;br&gt;
Single page applications built using React provide seamless user experience and incredible performance but come with a catch. Out of the box, SPAs are not SEO friendly which is a must when it comes to online presence. Search engine crawlers see a blank page because the website renders on the client side. The solution is to render the web page on the server. Knowing the pros and cons of client-side rendering versus server-side rendering can help you build the best application to suit your needs.&lt;/p&gt;
&lt;h4&gt;
  
  
  Let’s get to the past :
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Sqq2eOcD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1000/1%2A_EqHpn0XBowPv7HeVKw2Wg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Sqq2eOcD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1000/1%2A_EqHpn0XBowPv7HeVKw2Wg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Travelling back to the history of web development, browsers would just send a request to server asking to load the page and the server would comply by sending back one or more simple files like a HTML/ CSS. When the browser receives them, they’re ready to be rendered and hence they’ll almost instantly appear on the screen. We named these simple pre-built websites static since they are hosted on file server which simply send files as they neither require any processing beforehand nor special hardware.&lt;/p&gt;
&lt;h4&gt;
  
  
  The modern web:
&lt;/h4&gt;

&lt;p&gt;Today, if we want to build what’s known as a web application which is what people are talking about when they say web 2.0, we need something more dynamic with the advent of JavaScript frameworks like react and angular. Client-side rendered single page applications saw a huge spike in popularity year on year.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rm7G1_Er--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ay8YB7HLbKTYm5P45dWTvng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rm7G1_Er--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Ay8YB7HLbKTYm5P45dWTvng.png" alt=""&gt;&lt;/a&gt;Single page applications growth over the years.&lt;/p&gt;
&lt;h4&gt;
  
  
  Overview of client-side rendered (CSR) — SPA’s :
&lt;/h4&gt;

&lt;p&gt;In client-side rendering all codes like HTML, CSS , JavaScript and even images like SVG’s are sent in a single bundle. This bundling is done in advance with the help of a module bundler like webpack that resolves all external dependencies like libraries / imports and combines all the code into one single file which is then sent on the initial page load from server to client. In the case of react, the application is built initially and managed by something called the virtual DOM which monitors for changes and updates the page with JavaScript when necessary.&lt;/p&gt;
&lt;h4&gt;
  
  
  Now, is it possible to have multiple pages on a single page application ?
&lt;/h4&gt;

&lt;p&gt;Yes. Routing between pages in a SPA is simulated with something called client-side routing using tools like react router. You can see the views and updated browser endpoints in the URL bar but the requests never reach the server. The big advantage of client-side rendering is that there is only one request to your server for loading the web page and thereby reducing the load on your server. Page to page navigation through client-side routing is very fast as everything is pre-loaded on initial page load. React comes client-side rendered out of the box with most of the documentation written for CSR. Finally the most popular react starter framework create react app is also client-side rendered by default.&lt;/p&gt;
&lt;h4&gt;
  
  
  How can CSR hurt your website ?
&lt;/h4&gt;

&lt;p&gt;Consider a web app with many pages and a lot of JavaScript on each one of those pages. Loading the initial bundle, if it’s large can take a significant amount of time and make your site slow. It’s not surprising that with all the dependencies in your project, the bundle can reach upto two megabytes or more overtime.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U3Yr9VAH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/365/1%2AUQt-aeBazttECQmcIpFntA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U3Yr9VAH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/365/1%2AUQt-aeBazttECQmcIpFntA.png" alt=""&gt;&lt;/a&gt;Website speed for SEO&lt;/p&gt;
&lt;h4&gt;
  
  
  The solution :
&lt;/h4&gt;

&lt;p&gt;Before you breakup with SPA’s , we can optimize our performance of single page apps by using server-side rendering with modern JavaScript frameworks. This form of server-side rendering loads each page in stages, reducing the time to first pixel by using a method called hydration. Under the hood it’s like a combination of the old-school static sites and client-side rendering where JavaScript will illustrate the DOM.&lt;/p&gt;
&lt;h4&gt;
  
  
  How does server-side rendering (SSR) work ?
&lt;/h4&gt;

&lt;p&gt;The modern server-side rendering works in four different stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The client requests for a web page and plain markup files generated on the server are sent to the browser.&lt;/li&gt;
&lt;li&gt;The browser then renders the markup without having any dynamic features like event listeners loaded.&lt;/li&gt;
&lt;li&gt;The server sends JavaScript which might be a large bundle or a code split smaller bundle to the browser.&lt;/li&gt;
&lt;li&gt;The page is finally hydrated in the browser with JavaScript making the DOM dynamic and responsive to user actions and data inputs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RN-R-nDf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/1%2AE5pmLXazZXe8_lJUgsuSAg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RN-R-nDf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/600/1%2AE5pmLXazZXe8_lJUgsuSAg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In simple terms, SSR works by generating the mark-up in advance to reduce the time to first pixel as the user will see the fully rendered page. However it won’t be fully loaded until the actual javascript bundle downloads from the server. This whole process makes the perceived load time of the page much faster.&lt;/p&gt;
&lt;h4&gt;
  
  
  SEO in CSR vs SSR :
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V9yWoRB_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1000/1%2A4wrCw15cxd-bwWYbD1_8wg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V9yWoRB_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1000/1%2A4wrCw15cxd-bwWYbD1_8wg.jpeg" alt=""&gt;&lt;/a&gt;Search Engine Optimisation for CSR and SSR&lt;/p&gt;

&lt;p&gt;The key advantage of server-side rendering is it’s implication for search engine optimisation or SEO. The Google web crawler or bot that ranks websites on Google search has notoriously had problems crawling client-side rendered applications which rely on JavaScript to generate their markup. With the server-side rendering you don’t have this problem as the markup page guarantees that you’re gonna have good SEO every time.&lt;/p&gt;
&lt;h4&gt;
  
  
  Ready for building a SSR app?
&lt;/h4&gt;

&lt;p&gt;Before you start with the project, it’s better to know the downsides SSR has. The main one being server requests. At least one new server request happens for every page loaded. So 20 page loads will result in 20 separate requests although each one will be smaller. The good news about this is javascript shared between the pages will be reused and then page specific JavaScript will be sent in a separate bundle only when you load that page. This is commonly referred to as code splitting or lazy loading i.e., just the code you need for the current view.&lt;/p&gt;
&lt;h4&gt;
  
  
  Conclusion:
&lt;/h4&gt;

&lt;p&gt;There are many ways to implement it from scratch with your existing react app but doing so is very time consuming and difficult to maintain. So, I suggest you to go with a lightweight framework called NEXT.JS for building server-rendered React applications because it offers tons of features you don’t get with create react app. Not only do you get server-side rendering without configuration but you also get lazy loading of modules, built in code splitting and a lot of different things that will boost the performance of your app. If you want to learn more about how to incorporate NEXT.JS in your projects please visit the official documentation &lt;a href="https://nextjs.org/docs"&gt;here&lt;/a&gt;. Also do checkout the awesome E-commerce website Gehna that we built at Commutatus using NEXT.JS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wwbrmi-W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AOvcEv8uJ7iI-nSi9Ej6s1g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wwbrmi-W--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AOvcEv8uJ7iI-nSi9Ej6s1g.jpeg" alt=""&gt;&lt;/a&gt;Gehna (E-commerce jewellery platform) built with ❤️ at Commutatus using NEXT.js&lt;/p&gt;
&lt;h4&gt;
  
  
  Bonus tips:
&lt;/h4&gt;

&lt;p&gt;You can go a step further and improve your application’s google search rankings by following the best practices for SEO.&lt;/p&gt;
&lt;h4&gt;
  
  
  Structure the U-R-L
&lt;/h4&gt;

&lt;p&gt;A semantic well defined URL improves the user experience and visibility on google search. This will boost your SEO as the keyword present in your title, description and URL of the page helps google determine relevance of the content for the term searched. For example having the keyword or name of the product in your url :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://www.gehnaindia.com/product/ritzy-diamond-and-18k-gold-dangler-earrings
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;instead of having the product number or id in url as follows :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://www.gehnaindia.com/product/82436
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Tag your pages
&lt;/h4&gt;

&lt;p&gt;Meta tags are invisible but make it easier for search engines to determine what your content is about and how relevant it is with the search term, thereby improving your SEO. Next JS provides you ‘next/head ‘ which can be used to set the meta title and meta description for the page. Example snippet would be :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Head from 'next/head';

&amp;lt;Head&amp;gt;
 &amp;lt;title key="title"&amp;gt;{props.title}&amp;lt;/title&amp;gt; 
 &amp;lt;meta key="description" 
  name="description" 
  content={props.description} 
 /&amp;gt;
&amp;lt;/Head&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;You also have an option to use &lt;a href="https://www.npmjs.com/package/next-seo"&gt;next-seo&lt;/a&gt; that simplifies managing your SEO in Next.js projects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Get it secured
&lt;/h4&gt;

&lt;p&gt;Loading a website over HTTP impacts SEO in a negative way. Google gives priority to secure content loaded over HTTPS while ranking pages for a keyword. So it’s important to make sure that your site content and assets load over HTTPS for better search rankings and visibility.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lDN3PnjG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/780/1%2AY28HbqqduSDQQ5Hh_IEMPQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lDN3PnjG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/780/1%2AY28HbqqduSDQQ5Hh_IEMPQ.jpeg" alt=""&gt;&lt;/a&gt;https for better SEO&lt;/p&gt;

&lt;h4&gt;
  
  
  A map for the bot
&lt;/h4&gt;

&lt;p&gt;Imagine yourself visiting a place without a map. You are very likely to get lost. It’s a similar story for web crawlers and bots that try to index the pages on your site. A simple directory or ‘sitemap’ that has the information regarding pages contained in the web application, makes it easier for the bots to understand the page hierarchy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G6ECqV-4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AOwEpJwMrPT-c-7m4IhLIIQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G6ECqV-4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AOwEpJwMrPT-c-7m4IhLIIQ.png" alt=""&gt;&lt;/a&gt;Sitemap helps the crawlers understand your website better&lt;/p&gt;

&lt;h4&gt;
  
  
  Don’t neglect images
&lt;/h4&gt;

&lt;p&gt;Images and graphics play a crucial role for user experience on your website. But search engines crawlers can’t interpret images and the only way to overcome this is by using the ‘alt’ tags. Specifying proper alt tags on images helps the crawler index it for relevant search terms. For example, having alt tags on product photos in e-commerce site improves the store’s SEO.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zIjQv2OJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1000/1%2AbL_WENenlWlDsfgfdo3BRQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zIjQv2OJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1000/1%2AbL_WENenlWlDsfgfdo3BRQ.jpeg" alt=""&gt;&lt;/a&gt;Image with proper alt tags example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;img src=”emerald-earrings.png” alt=”gold dangle earrings with emerald stones”&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If you find this article useful in improving SEO on single page applications , give an 👏 and leave a comment on - What improvements would you love to see in the upcoming frameworks for making them SEO friendly? I’d love to hear any thoughts on this topic 😋.&lt;/p&gt;




</description>
      <category>singlepageapplicat</category>
      <category>react</category>
      <category>seo</category>
      <category>serversiderenderin</category>
    </item>
    <item>
      <title>Heuristic Fragment matcher warning ! How to fix it?</title>
      <dc:creator>Chandu</dc:creator>
      <pubDate>Thu, 16 May 2019 17:08:03 +0000</pubDate>
      <link>https://dev.to/chandan/heuristic-fragment-matcher-warning-how-to-fix-it-ho3</link>
      <guid>https://dev.to/chandan/heuristic-fragment-matcher-warning-how-to-fix-it-ho3</guid>
      <description>&lt;h3&gt;
  
  
  Heuristic Fragment matcher warning! How to fix it?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y3yZcrjm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/625/1%2Af386BZdMi17Rw6rbNP4z-A%402x.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y3yZcrjm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/625/1%2Af386BZdMi17Rw6rbNP4z-A%402x.jpeg" alt=""&gt;&lt;/a&gt;How to fix the heuristic fragment matcher warning in GraphQL Apollo client&lt;/p&gt;

&lt;p&gt;Apollo client is widely used for managing data fetched via GraphQL and caching is one of the main features it offers. If you are using Unions or Fragments in GraphQL , by default the apollo client uses Heuristic Fragment matcher to map the fields(fragments).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oom4bGvA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Aur-O-Kb92fUMCG2uAO13Mw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oom4bGvA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Aur-O-Kb92fUMCG2uAO13Mw.png" alt=""&gt;&lt;/a&gt;heuristic fragment matching going on !&lt;/p&gt;

&lt;h4&gt;
  
  
  Why do you see it?
&lt;/h4&gt;

&lt;p&gt;Before you freak out why this warning occurs, understand the fact that Apollo Client doesn’t know our GraphQL schema and hence it cannot accurately map the fragments. So this will end with the following warning on your console:&lt;/p&gt;

&lt;p&gt;“You are using the simple (heuristic) fragment matcher, but your queries contain union or interface types. “&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ppg9MPtZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/632/1%2AQicoPrNut-1XmynPgBZSQQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ppg9MPtZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/632/1%2AQicoPrNut-1XmynPgBZSQQ.png" alt=""&gt;&lt;/a&gt;Error: You are using the simple (heuristic) fragment matcher, but your queries contain union or interface types.&lt;/p&gt;

&lt;h4&gt;
  
  
  Should you worry about this?
&lt;/h4&gt;

&lt;p&gt;Heuristic fragment matcher works fine in some cases but Apollo Client will not verify the server response i.e., it doesn’t stop you from manually writing an invalid data into the store using writeQuery or updateQuery. So, it’s not ideal to ignore the warnings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SIaSBm_Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/728/1%2Az8yuNGWA_iStOy-a3jSUAA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SIaSBm_Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/728/1%2Az8yuNGWA_iStOy-a3jSUAA.jpeg" alt=""&gt;&lt;/a&gt;Thano’s Snap&lt;/p&gt;

&lt;h4&gt;
  
  
  Thano’s Snap! Make the warning disappear:
&lt;/h4&gt;

&lt;p&gt;So, for this warning to go away, you can query the schema to get the required information about unions and interfaces. Thereafter, provide this knowledge to the InMemeoryCache of apollo client using the IntrospectionFragmentMatcher as described in the &lt;a href="https://www.apollographql.com/docs/react/advanced/fragments"&gt;docs&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step by step guide – using IntrospectionFragmentMatcher
&lt;/h4&gt;

&lt;p&gt;Let’s see how we can make apollo client accurately map the fragments (unions &amp;amp; interfaces) and validate them before writing it to the store.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create the schemaQuery file&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As the initial step, go to the project ‘ &lt;strong&gt;src&lt;/strong&gt; ’ folder and create a file named schemaQuery.js and add the following code:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;The above code, will query your schema and store it in fragmentTypes.json (This json file is created automatically, you don’t have to create it). However, you can change the creation path of the fragmentTypes.json file. Finally, remember to replace the api.example.com with your actual API server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Pass the fragmentTypes to InMemoryCache&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Go to the file where you initialise apollo client cache and type in the following code :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {IntrospectionFragmentMatcher} from 'apollo-cache-inmemory';

import introspectionQueryResultData from '../../../src/fragmentTypes.json';

const fragmentMatcher = new IntrospectionFragmentMatcher({

introspectionQueryResultData

});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;Note: The path for fragmentTypes.json file needs to be the same as step 1.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, pass the fragmentMatcher with schema data to Apollo’s InMemoryCache as follows:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cache: new InMemoryCache({fragmentMatcher})
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;After you have added all the above code, your file should look something like this :&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Build and fetch the Schema object into fragmentTypes.json&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Using node, in package.json set up a build script for querying the schema and writing it in fragmentTypes.json file. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt; "build-fragment” : “node src/schemaQuery.js”
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Run “ &lt;strong&gt;npm run build-fragment&lt;/strong&gt; ” and let the magic happen!&lt;/p&gt;

&lt;p&gt;The fragmentTypes.json file gets created and all your schema information related to unions and interfaces are stored as an object.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Optional step : Set the schemaQuery.js script to run at build time&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To introspect the server every time we build the project, it is recommended to run a parallel node thread for your “start” script in package.json as follows :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;“start”: “ npm-run-all -p start-server build-fragment”,

“start-server”: “node server.js”,

“build-fragment”: “node src/schemaQuery.js”
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now, running “ &lt;strong&gt;npm run start&lt;/strong&gt; ” will trigger both your node server and the schemaQuery script that we just added.&lt;/p&gt;

&lt;h4&gt;
  
  
  Watch the video below on How to Fix this Warning.
&lt;/h4&gt;

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

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;Hope you found this article helpful in getting rid of the heuristic fragment matcher warning. Checkout &lt;a href="http://bit.ly/educatly-website"&gt;Educatly&lt;/a&gt; (student platform to explore over 1,50,000 study-abroad opportunities worldwide), where we used the IntrospectionFragmentMatcher to deal with heuristic fragment warnings caused by caching unions and interfaces.&lt;/p&gt;




</description>
      <category>graphql</category>
      <category>apollographql</category>
      <category>apolloclient</category>
      <category>apolloengine</category>
    </item>
  </channel>
</rss>
