<?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: Gijo Varghese</title>
    <description>The latest articles on DEV Community by Gijo Varghese (@gijovarghese).</description>
    <link>https://dev.to/gijovarghese</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%2F116558%2F335420d1-5366-42d3-a1de-10c33b08dac3.png</url>
      <title>DEV Community: Gijo Varghese</title>
      <link>https://dev.to/gijovarghese</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gijovarghese"/>
    <language>en</language>
    <item>
      <title>How I made WordPress Faster with 1KB JavaScript</title>
      <dc:creator>Gijo Varghese</dc:creator>
      <pubDate>Thu, 28 Nov 2019 10:13:24 +0000</pubDate>
      <link>https://dev.to/gijovarghese/how-i-made-wordpress-faster-with-1kb-javascript-2ne9</link>
      <guid>https://dev.to/gijovarghese/how-i-made-wordpress-faster-with-1kb-javascript-2ne9</guid>
      <description>&lt;p&gt;Clickbait title right? 😉&lt;/p&gt;

&lt;p&gt;Released 4 months ago, the script is currently used by 4k WordPress sites.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/gijo-varghese" rel="noopener noreferrer"&gt;
        gijo-varghese
      &lt;/a&gt; / &lt;a href="https://github.com/gijo-varghese/flying-pages" rel="noopener noreferrer"&gt;
        flying-pages
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Load inner pages instantly, intelligently
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/gijo-varghese/flying-pagescover.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fgijo-varghese%2Fflying-pagescover.png"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Flying Pages&lt;/h1&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Flying Pages prefetch pages before the user click on links, making them load instantly&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick Links&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Demo: Open &lt;a href="https://wpspeedmatters.com" rel="nofollow noopener noreferrer"&gt;https://wpspeedmatters.com&lt;/a&gt; and click on any post&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wordpress.org/plugins/flying-pages/" rel="nofollow noopener noreferrer"&gt;WordPress Plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wpspeedmatters.com/quicklink-vs-instant-page-vs-flying-pages/" rel="nofollow noopener noreferrer"&gt;Quicklink vs Instant page vs Flying Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Join our &lt;a href="https://www.facebook.com/groups/wpspeedmatters/" rel="nofollow noopener noreferrer"&gt;Facebook Group&lt;/a&gt;, a community of WordPress speed enthusiasts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.buymeacoffee.com/gijovarghese" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4c31625833b2598a9acf63a0a82416a0621a93d5d4f5aa285eef92593e5ebc42/68747470733a2f2f626d632d63646e2e6e7963332e6469676974616c6f6365616e7370616365732e636f6d2f424d432d627574746f6e2d696d616765732f637573746f6d5f696d616765732f6f72616e67655f696d672e706e67" alt="Buy Me A Coffee"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Quickstart:&lt;/p&gt;

&lt;div class="highlight highlight-text-html-basic notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-kos"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;script&lt;/span&gt; &lt;span class="pl-c1"&gt;src&lt;/span&gt;="&lt;span class="pl-s"&gt;flying-pages.min.js&lt;/span&gt;"&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pl-kos"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="pl-ent"&gt;script&lt;/span&gt;&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;With options:&lt;/p&gt;

&lt;div class="highlight highlight-text-html-basic notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-kos"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;script&lt;/span&gt;&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="pl-smi"&gt;window&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;FPConfig&lt;/span&gt; &lt;span class="pl-c1"&gt;=&lt;/span&gt; &lt;span class="pl-kos"&gt;{&lt;/span&gt;
    &lt;span class="pl-c1"&gt;delay&lt;/span&gt;: &lt;span class="pl-c1"&gt;0&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
    &lt;span class="pl-c1"&gt;ignoreKeywords&lt;/span&gt;: &lt;span class="pl-kos"&gt;[&lt;/span&gt;&lt;span class="pl-kos"&gt;]&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
    &lt;span class="pl-c1"&gt;maxRPS&lt;/span&gt;: &lt;span class="pl-c1"&gt;3&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
    &lt;span class="pl-c1"&gt;hoverDelay&lt;/span&gt;: &lt;span class="pl-c1"&gt;50&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-kos"&gt;}&lt;/span&gt;&lt;span class="pl-kos"&gt;;&lt;/span&gt;
&lt;span class="pl-kos"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="pl-ent"&gt;script&lt;/span&gt;&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="pl-kos"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pl-ent"&gt;script&lt;/span&gt; &lt;span class="pl-c1"&gt;defer&lt;/span&gt; &lt;span class="pl-c1"&gt;src&lt;/span&gt;="&lt;span class="pl-s"&gt;flying-pages.min.js&lt;/span&gt;"&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pl-kos"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="pl-ent"&gt;script&lt;/span&gt;&lt;span class="pl-kos"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;delay&lt;/code&gt;: Start prefetching after a delay (in seconds). Will be started when the browser becomes idle, using &lt;code&gt;requestIdleCallback&lt;/code&gt;. Default to 0.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ignoreKeywords&lt;/code&gt;: An array of keywords to ignore from prefetching. Example &lt;code&gt;['/logout','/cart','about.html','sample.png','#']&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;maxRPS&lt;/code&gt;: Maximum requests per second the queue should process. Set to 0…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/gijo-varghese/flying-pages" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"flying-pages.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="nf"&gt;flyingPages&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;ignoreKeywords&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
      &lt;span class="na"&gt;maxRPS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;hoverDelay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  How it works?
&lt;/h1&gt;

&lt;p&gt;Flying Pages injects a tiny JavaScript code (1KB gzipped) that waits until the browser becomes idle, detect links in the viewport (also on mouse hover) and prefetch them so that browser doesn't have to wait while navigating through pages.&lt;/p&gt;

&lt;p&gt;The prefetching is done using the prefetch tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"prefetch"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"URL_TO_PAGE"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prefetch pages in the viewport&lt;/strong&gt; – Detect links within the viewport (current viewing area) using ‘Intersection Observer’ and tells the browser to prefetch them using ‘prefetch’&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prefetch pages on mouse hover&lt;/strong&gt; – On hovering links, if it’s not prefetched yet using above ‘viewport’, then Flying Pages will prefetch them instantly (similar to Instant.page).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Limits the number of prefetches per second&lt;/strong&gt; – If your page has too many links, prefetching all at the same time will cause the server to crash or slow down the website to visitors. Flying Pages limits the number of prefetches per second (3 req/sec by default) using an in-built queue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stops prefetching if the server is busy&lt;/strong&gt; – In case the server starts to respond slowly or return errors, prefetching will be stopped to reduce the server load.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Understands user’s connection and preferences&lt;/strong&gt; – Checks if the user is on a slow connection like 2G or has enabled data-saver. Flying Pages won’t prefetch anything in this case.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Faadngovy83ad4zim5l13.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Faadngovy83ad4zim5l13.gif" alt="Demo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  WordPress Plugin
&lt;/h1&gt;

&lt;p&gt;Prefetching links to logout, cart page etc can cause issues. So we need to exclude such links as well as few other options like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set maximum requests per second&lt;/li&gt;
&lt;li&gt;Delay to start prefetching&lt;/li&gt;
&lt;li&gt;Mouse hover delay&lt;/li&gt;
&lt;li&gt;Disable for logged in admins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;a href="https://wordpress.org/plugins/flying-pages/" rel="noopener noreferrer"&gt;Flying Pages WordPress plugin&lt;/a&gt; comes with a settings panel to configure all these:&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fm4zljtecqes1hrsu6wzw.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fm4zljtecqes1hrsu6wzw.png" alt="WordPress Plugin Settins"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Demo?
&lt;/h1&gt;

&lt;p&gt;Check out my blog &lt;a href="https://wpspeedmatters.com" rel="noopener noreferrer"&gt;WP Speed Matters&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>javascript</category>
      <category>performance</category>
      <category>webperf</category>
    </item>
    <item>
      <title>How my side project became my full-time Startup!</title>
      <dc:creator>Gijo Varghese</dc:creator>
      <pubDate>Wed, 13 Mar 2019 17:48:15 +0000</pubDate>
      <link>https://dev.to/gijovarghese/how-my-side-project-became-my-full-time-startup-934</link>
      <guid>https://dev.to/gijovarghese/how-my-side-project-became-my-full-time-startup-934</guid>
      <description>&lt;p&gt;This is the story of how a side project I created for an e-commerce website, that later became a full-time startup. &lt;/p&gt;

&lt;p&gt;I hope every developer's dream is to build a product themselves and live with it. Here is how I did it!&lt;/p&gt;

&lt;h2&gt;
  
  
  How it all started
&lt;/h2&gt;

&lt;p&gt;Back in 2017, I was working on a startup called &lt;a href="https://quotzap.netlify.com/" rel="noopener noreferrer"&gt;Quotzap&lt;/a&gt;. It's an RFQ (Request for Quote) platform where users can request the price for building materials&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fro1mn494z5hceq629hoc.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fro1mn494z5hceq629hoc.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To get more conversions we tried several chat widget like &lt;a href="https://crisp.chat/en/" rel="noopener noreferrer"&gt;Crisp&lt;/a&gt;, &lt;a href="https://intercom.com" rel="noopener noreferrer"&gt;Intercom&lt;/a&gt; etc. As expected users put their email address and asked a few doubts. Things went well. But...&lt;/p&gt;
&lt;h3&gt;
  
  
  We got a problem
&lt;/h3&gt;

&lt;p&gt;As soon as we get back online and reply to those conversations via email, we found that only 10-30% is opening their emails!&lt;/p&gt;
&lt;h3&gt;
  
  
  The hack!
&lt;/h3&gt;

&lt;p&gt;So I made a quick hack. I used the &lt;a href="https://developers.facebook.com/docs/plugins/page-plugin/" rel="noopener noreferrer"&gt;Facebook Page plugin&lt;/a&gt; (an iframe) where users can directly message to a page from website&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fylk8jr3duya7v5tmwlo4.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fylk8jr3duya7v5tmwlo4.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Directly embedding this on to the website didn't have many conversions, so I made a beautiful wrapper around it with the help of my designer. &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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fngatq7wr41yhk5ztm2vw.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fngatq7wr41yhk5ztm2vw.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Result?
&lt;/h3&gt;

&lt;p&gt;Since users don't need to type the email address and they're already logged into Facebook, they were more likely to ask questions. The replies we sent were directly delivered to their Facebook Messenger. Guess what? We got 90% open rates and 4-10x conversions!&lt;/p&gt;
&lt;h2&gt;
  
  
  The turning point!
&lt;/h2&gt;

&lt;p&gt;I thought why not others could benefit from it? So I made it available as a plugin so that others can embed it on their website. I offered a free version and a paid version with customization for $29.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Messengerify is born!&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fr2os45v3bcwjxrfxlwkv.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fr2os45v3bcwjxrfxlwkv.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That was my MVP (minimum viable product). After a few weeks, I launched it &lt;a href="https://producthunt.com" rel="noopener noreferrer"&gt;ProductHunt&lt;/a&gt; and the results were amazing. &lt;strong&gt;I got 500+ purchases that resulted in $5500.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Spend time on talking to customers, less code
&lt;/h2&gt;

&lt;p&gt;As developers, most of our focus will be adding new features. Instead, we should put more focus on talking to customers and get their feedback.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-929592267664265216-251" src="https://platform.twitter.com/embed/Tweet.html?id=929592267664265216"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-929592267664265216-251');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=929592267664265216&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;I followed these golden rules and I revamped my product to &lt;a href="https://mfy.im" rel="noopener noreferrer"&gt;MFY.im&lt;/a&gt; for creators.&lt;/p&gt;

&lt;h2&gt;
  
  
  The new MFY.im (previously Messengerify)
&lt;/h2&gt;

&lt;p&gt;Facebook didn't like the name "Messengerify" 😢. So I renamed it to &lt;strong&gt;MFY.im&lt;/strong&gt;. The initial version was just an MVP. After hiring a few engineers I revamped it focussing on creators (Bloggers, YouTubers, etc, the niche I picked)&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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fkgsncp1gmd09ag6htu80.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fkgsncp1gmd09ag6htu80.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built two widgets (Subscription box and corner widget) so that it's easy for visitors to subscribe to your blog/youtube. Later you can send them broadcasts and automated messages on new blog posts/youtube videos&lt;/p&gt;

&lt;h4&gt;
  
  
  Subscription box
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0ojfh7d2b3etcb358mqo.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0ojfh7d2b3etcb358mqo.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Corner widget
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fknlhjfzck5zqd4hf09ka.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%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fknlhjfzck5zqd4hf09ka.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Broadcast sent to Messenger
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbcfngerdatng4grmd17f.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fbcfngerdatng4grmd17f.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Launch on ProductHunt
&lt;/h3&gt;

&lt;p&gt;I just launched in on PH today. &lt;strong&gt;It would be great if you can spare 1 min to support and give me your feedback about my product in &lt;a href="https://www.producthunt.com/posts/mfy-im" rel="noopener noreferrer"&gt;ProductHunt&lt;/a&gt;.&lt;/strong&gt; Check out &lt;a href="https://www.producthunt.com/posts/mfy-im" rel="noopener noreferrer"&gt;MFY.im in ProductHunt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.producthunt.com/posts/mfy-im" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.producthunt.com%2Fwidgets%2Fembed-image%2Fv1%2Ffeatured.svg%3Fpost_id%3D148155%26theme%3Dlight%26v%3D1" alt="MFY.im in ProductHunt"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you aren't aware of &lt;a href="https://producthunt.com" rel="noopener noreferrer"&gt;ProductHunt&lt;/a&gt;, it's a website that showcases top (5-10) products every day. &lt;/p&gt;

&lt;p&gt;If you've built a product, do launch it in PH. I'm also writing a blog post on how to launch in ProductHunt!&lt;/p&gt;

</description>
      <category>startup</category>
      <category>business</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>ReactJS – Auto Lint &amp; Format on Git Commit with Airbnb Style Guide</title>
      <dc:creator>Gijo Varghese</dc:creator>
      <pubDate>Sat, 02 Mar 2019 10:42:08 +0000</pubDate>
      <link>https://dev.to/gijovarghese/reactjs--auto-lint--format-on-git-commit-with-airbnb-styleguide-2815</link>
      <guid>https://dev.to/gijovarghese/reactjs--auto-lint--format-on-git-commit-with-airbnb-styleguide-2815</guid>
      <description>&lt;p&gt;When you’re working in a team, each developer will have their own style. It’s very important to have a consistent style across all the files.&lt;/p&gt;

&lt;p&gt;Looking at a piece of code, you shouldn’t be able to tell who wrote it 😉&lt;/p&gt;

&lt;p&gt;With this guide, you’ll be able to set up auto linting and formatting on Git commit.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you’re a NodeJS developer, read this – &lt;a href="https://coffeencoding.com/nodejs-auto-lint-format-on-git-commit-with-airbnb-styleguide/"&gt;NodeJS – Auto Lint &amp;amp; Format on Git Commit with Airbnb Styleguide&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It’s divided into 4 parts&lt;/p&gt;

&lt;p&gt;You’ll learn&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setup Eslint with Airbnb Style Guide&lt;/li&gt;
&lt;li&gt;Setup Formatting with Prettier&lt;/li&gt;
&lt;li&gt;Auto Lint &amp;amp; Format on Git Commit&lt;/li&gt;
&lt;li&gt;Configure VS Code for Eslint and Prettier&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why you’ll need Linting and Formatting?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Clean code&lt;/li&gt;
&lt;li&gt;Easily find errors, typos, syntax errors&lt;/li&gt;
&lt;li&gt;Follow the best practices&lt;/li&gt;
&lt;li&gt;Warning on using deprecated/harmful methods&lt;/li&gt;
&lt;li&gt;Have a consistent style in code across the team&lt;/li&gt;
&lt;li&gt;Avoid committing ‘harmful’ code like console.log&lt;/li&gt;
&lt;li&gt;Make PR awesome, less headache for reviewers!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Setup Eslint with Airbnb Style Guide
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://eslint.org/"&gt;Eslint&lt;/a&gt; is a linting utility for JavaScript and JSX, with some nice rules and plugins. Anyone can write rules for Eslint. An example rule  could be “avoid using console.log()“&lt;/p&gt;

&lt;p&gt;Luckily Airbnb has written a Style Guide for JavaScript which covers most of the best practices they use. It’s basically a collection of different rules. You can read it here – &lt;a href="https://github.com/airbnb/javascript"&gt;Airbnb JavaScript Style Guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt;  – Install necessary packages by&lt;br&gt;
&lt;code&gt;npm i -D eslint eslint-config-airbnb eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt; – Create a new file &lt;code&gt;.eslintrc&lt;/code&gt; at the root directory of your project and paste the following&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"browser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"extends"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"airbnb"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prettier"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3&lt;/strong&gt; – Add a new command to lint in &lt;code&gt;package.json&lt;/code&gt; – &lt;code&gt;"lint": "eslint 'src/**/*.{js,jsx}' --fix"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now you should be able to able lint your code by running &lt;code&gt;npm run lint&lt;/code&gt;. It will try to fix errors that are fixable. Otherwise will throw errors/warnings&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup Formatting with Prettier
&lt;/h2&gt;

&lt;p&gt;While Eslint is for Linting and finding errors in the code, &lt;a href="https://prettier.io/"&gt;Prettier&lt;/a&gt; is purely for formatting. Besides JavaScript Prettier also supports formatting json, HTML, CSS, markdown, sql, yaml, etc. Using both Eslint and Prettier is highly recommended.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1&lt;/strong&gt; – Install Prettier CLI package by &lt;code&gt;npm i -D prettier-eslint-cli eslint-config-prettier&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt; – Add a new command to format in &lt;code&gt;package.json&lt;/code&gt; – &lt;code&gt;"format": "prettier --write 'src/**/*.{js,jsx,css,scss}'"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Just like we did earlier you should now able to run &lt;code&gt;npm run format&lt;/code&gt; to format the code using Prettier!&lt;/p&gt;

&lt;h2&gt;
  
  
  Auto Lint &amp;amp; Format on Git Commit
&lt;/h2&gt;

&lt;p&gt;Even though we’ve built commands to run lint and formatting, most of the time developers forget to run it and commit to git. You can set up npm run lint to your CI/CD so that whenever there are some errors it will fail. However, it will be really nice if we would do these checks every time when someone commits.&lt;/p&gt;

&lt;h4&gt;
  
  
  Husky and Lint-staged to rescue
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/husky"&gt;Husky&lt;/a&gt; allows you to add commands to run before committing. It takes advantage of the &lt;a href="https://githooks.com/"&gt;git hooks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/lint-staged"&gt;Lint-staged&lt;/a&gt; – “Run linters against staged git files”. Running Eslint and Prettier on all files on every commit will be very time-consuming. With lint-staged you can run those only on the staged files.&lt;/p&gt;

&lt;p&gt;Install husky and lint-staged by &lt;code&gt;npm i -D husky lint-staged&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You’ll need to edit the &lt;code&gt;package.json&lt;/code&gt; to configure it. Here is the full file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eslint 'src/**/*.{js,jsx}' --fix"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"prettier --write 'src/**/*.{js,jsx,css,scss}'"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"lint-staged"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"**/*.js"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"eslint --fix"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"prettier-eslint --write"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"git add"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"husky"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"hooks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"pre-commit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"lint-staged"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"eslint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^5.15.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"eslint-config-airbnb"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^17.1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"eslint-config-prettier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.1.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"eslint-plugin-import"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.16.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"eslint-plugin-jsx-a11y"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.2.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"eslint-plugin-react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^7.12.4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prettier-eslint-cli"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.7.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"husky"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.3.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint-staged"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^8.1.3"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We tell husky to run lint-staged on every commit. Lint-staged will run eslint, prettier, and ‘git add‘ on staged files. The last ‘git add‘ is to add the changed filed back to commit since it might be changed formatting.&lt;/p&gt;

&lt;h4&gt;
  
  
  Need to commit without these checks?
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0McyRIGS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://coffeencoding.com/wp-content/uploads/2019/03/git-fire-300x300.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0McyRIGS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://coffeencoding.com/wp-content/uploads/2019/03/git-fire-300x300.jpg" alt=""&gt;&lt;/a&gt;&lt;br&gt;
What if there is a fire 🙂 and you try to commit? “Please remove console logs” or something like that? You tell git not to run these hooks by adding --no-verify (&lt;code&gt;git commit –m -n “Urgent commit!”&lt;/code&gt;)&lt;/p&gt;
&lt;h2&gt;
  
  
  Configure VS Code for Eslint and Prettier
&lt;/h2&gt;

&lt;p&gt;Both Eslint and Prettier have great integrations for VS Code. It will automatically highlight errors/warnings, fix code while typing/saving, etc.&lt;/p&gt;

&lt;p&gt;Install &lt;a href="https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint"&gt;Eslint&lt;/a&gt; and &lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode"&gt;Prettier&lt;/a&gt; extensions by &lt;code&gt;ext install dbaeumer.vscode-eslint&lt;/code&gt; and &lt;code&gt;ext install esbenp.prettier-vscode&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once you’ve installed the extensions, open VS Code settings.json (Ctrl+,) file and add the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.formatOnPaste"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.formatOnSave"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"editor.formatOnType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prettier.eslintIntegration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;You should now have Eslint and Prettier configured so that whenever you try to commit files, they’ll scan the files and try to fix all error, or show you the errors that are not automatically fixable. Hope you enjoyed it.&lt;/p&gt;

&lt;p&gt;Comments below if you run into any problems or has any other feedback!&lt;/p&gt;

&lt;p&gt;This article was initially posted in my blog &lt;a href="https://coffeencoding.com"&gt;Coffee N Coding&lt;/a&gt;. Follow me on &lt;a href="https://twitter.com/gijovarghese141"&gt;Twitter&lt;/a&gt;, I share a lot of cool stuff like this.&lt;/p&gt;

&lt;p&gt;Subscribe to my blog via &lt;a href="https://m.me/775189579517896/?ref=eyJ0YWdzIjpbImNhdGVnb3J5OlJlYWN0SlMiLCJtLm1lIl19"&gt;FB Messenger&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>eslint</category>
      <category>git</category>
    </item>
    <item>
      <title>Boost your Website Speed with 2 Lines of Code</title>
      <dc:creator>Gijo Varghese</dc:creator>
      <pubDate>Sat, 26 Jan 2019 16:41:18 +0000</pubDate>
      <link>https://dev.to/gijovarghese/boost-your-website-speed-with-2-lines-of-code-27e5</link>
      <guid>https://dev.to/gijovarghese/boost-your-website-speed-with-2-lines-of-code-27e5</guid>
      <description>&lt;p&gt;Consider you're reading a blog post. While reaching the bottom you can see &lt;strong&gt;related posts&lt;/strong&gt;. What if your browser will preload those pages even before you click?&lt;/p&gt;

&lt;p&gt;Super fast inner pages, right?&lt;/p&gt;

&lt;h1&gt;
  
  
  Introducing Quicklink
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/GoogleChromeLabs/quicklink"&gt;QuickLink&lt;/a&gt; is a tiny JavaScript code that will detect links within the viewport and prefetches URLs to the links.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;npm install --save quicklink&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;quicklink&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;quicklink/dist/quicklink.mjs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;quicklink&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/GoogleChromeLabs/quicklink#api"&gt;Full api docs&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  But it will load unnecessary data, will it slow down my user?
&lt;/h3&gt;

&lt;p&gt;Quicklink waits until the browser is idle, checks if the user isn't on a slow connection or has data-saver enabled.&lt;/p&gt;

&lt;p&gt;Result? Those URLs will load instantly!&lt;/p&gt;

&lt;h3&gt;
  
  
  Will it slows down my website?
&lt;/h3&gt;

&lt;p&gt;It's only &amp;lt; 1KB minified/gzipped&lt;/p&gt;

&lt;h2&gt;
  
  
  Did it help?
&lt;/h2&gt;

&lt;p&gt;Follow me on &lt;a href="https://twitter.com/gijovarghese141"&gt;Twitter&lt;/a&gt;, I share a lot of cool stuff there&lt;/p&gt;

</description>
      <category>react</category>
      <category>vue</category>
      <category>angular</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
