<?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: Rajdeep Chandra</title>
    <description>The latest articles on DEV Community by Rajdeep Chandra (@rajdeepc).</description>
    <link>https://dev.to/rajdeepc</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%2F313578%2F6ff870ad-6c27-4683-a5d4-0f2fa5319932.jpeg</url>
      <title>DEV Community: Rajdeep Chandra</title>
      <link>https://dev.to/rajdeepc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rajdeepc"/>
    <language>en</language>
    <item>
      <title>Pegasus -  A web based REST Client built with MongoDB Atlas</title>
      <dc:creator>Rajdeep Chandra</dc:creator>
      <pubDate>Fri, 24 Dec 2021 16:19:09 +0000</pubDate>
      <link>https://dev.to/rajdeepc/pegasus-a-web-based-rest-client-built-with-mongodb-atlas-19li</link>
      <guid>https://dev.to/rajdeepc/pegasus-a-web-based-rest-client-built-with-mongodb-atlas-19li</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;


&lt;p&gt;Pegasus is a web REST application built specifically for testers and developers to have a holistic view of what changes are breaking the Front End Code. Most of the time Backend changes key pairs which causes app crash. Pegasus is specifically designed to solve problems such as :&lt;/p&gt;


&lt;ul&gt;
&lt;li&gt;Code Break due to key changes in API.&lt;/li&gt;
&lt;li&gt;Check specific key updates with line highlighting.&lt;/li&gt;
&lt;li&gt;Get Realtime updates to your desktop if any API construct has changed.&lt;/li&gt;
&lt;li&gt;In-App notifications.&lt;/li&gt;
&lt;li&gt;Hyper runners to run project specific APIs after new builds.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Features 💡
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Compare Response Feature - Compare responses of the same API once response structure changes&lt;/li&gt;
&lt;li&gt;Add or remove API Endpoints - Add and remove API endpoints from EndPoints tab&lt;/li&gt;
&lt;li&gt;Search Endpoints - Search through your API Endpoints with Smart Search&lt;/li&gt;
&lt;li&gt;Sign In Feature - Sign In to save all your api&lt;/li&gt;
&lt;li&gt;Notification Switch - Switch On/Off Notifications&lt;/li&gt;
&lt;li&gt;Generate Code - Generate Code from your API constructs&lt;/li&gt;
&lt;li&gt;More Personalised Settings - More Personalised Settings Feature&lt;/li&gt;
&lt;li&gt;IndexDB Support - Localised data now saved in IndexDB for more storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Link to GitHub: &lt;br&gt;
&lt;a href="https://github.com/Rajdeepc/pegasus"&gt;https://github.com/Rajdeepc/pegasus&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live: &lt;a href="https://pegasus-fly.herokuapp.com/"&gt;https://pegasus-fly.herokuapp.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;README: &lt;a href="https://github.com/Rajdeepc/pegasus/blob/master/README.md"&gt;https://github.com/Rajdeepc/pegasus/blob/master/README.md&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;This product is not for a specific themes as listed but I wanted to make this to solve a specific problem on the development and for the testers. Whenever there are any breaking changes in the API comes developers and testers are not aware of its impact so this product helps to assess as well make the team aware of any breaking changes in the app due to API changes.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Rajdeepc/pegasus"&gt;https://github.com/Rajdeepc/pegasus&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Screenshot of the dashboard:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Nva0y6vd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lmvpihogjhsxpv77owec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Nva0y6vd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lmvpihogjhsxpv77owec.png" alt="Screenshot of the dashboard" width="880" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Built with 🔧
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ReactJS - Front-end&lt;/li&gt;
&lt;li&gt;Database - MongoDB Atlas&lt;/li&gt;
&lt;li&gt;NodeJS - Backend Service&lt;/li&gt;
&lt;li&gt;Socket.IO - Real Time Communication&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>atlashackathon</category>
    </item>
    <item>
      <title>Building Teleport — An alternative to POSTMAN</title>
      <dc:creator>Rajdeep Chandra</dc:creator>
      <pubDate>Tue, 18 Aug 2020 12:37:28 +0000</pubDate>
      <link>https://dev.to/rajdeepc/building-teleport-an-alternative-to-postman-2c5i</link>
      <guid>https://dev.to/rajdeepc/building-teleport-an-alternative-to-postman-2c5i</guid>
      <description>&lt;p&gt;One fine morning like everyone I was at office doing my work when suddenly I realized that my code was breaking which was working an hour back and this startled me and kept me wondering what could go wrong. So like everyone else I followed THE PROTOCOL. Yes!! I started debugging.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem we faced:
&lt;/h3&gt;

&lt;p&gt;While debugging I could find that few of the attributes were missing from the API response and this what failed my working code. So in few more months down the line these issues started to happen frequently that whenever back end team modifies the JSON structure our code used to break suddenly.&lt;/p&gt;

&lt;h3&gt;
  
  
  What we have tried but failed!!
&lt;/h3&gt;

&lt;p&gt;To avoid this we started to have recurring calls to understand any changes but that too was unavoidable due to over crowding of calls. So these issues remain a glitch to the process.&lt;br&gt;
So I thought why can’t POSTMAN let us know the change what happened in the Back End before we start to waste our time figuring out the bug. This made me build this application.&lt;/p&gt;

&lt;p&gt;I call it Teleport&lt;/p&gt;

&lt;h2&gt;
  
  
  The Design:
&lt;/h2&gt;

&lt;p&gt;Well this was one of the toughest phase for me because I wanted to make my app stand out like what we have in POSTMAN with much more personalization and more advanced features like response compare. Figuring out the building blocks and building an end to end solution took the longer sprint to join all the entry points to the system.&lt;/p&gt;

&lt;p&gt;Once you have a look at the web app you will see the design has been kept simple with a metronic theme and the layout is adaptive. I managed to build some thing like this, keeping in mind the simplest of design and user friendly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aU1tmd5B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/875/1%2AVSoWfYVrk21mxho3hAnPhw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aU1tmd5B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/875/1%2AVSoWfYVrk21mxho3hAnPhw.png" alt="" width="875" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech Stack &amp;amp; Architecture:
&lt;/h2&gt;

&lt;p&gt;I took a longer time in taking the decisive approach to make the software more robust keeping in mind the scalability part. I used React 16.x on the UI layer with SASS as the CSS pre-processor. &lt;/p&gt;

&lt;p&gt;I work extensively with Vue and React and I chose React for this app since I wanted to try out the new features of it as well as when we are able to get hydration updates I can leverage its power. The building blocks of this application is very simple and I made sure whoever wants to add features to this can easily run through the code and understand the entry points of each component.&lt;/p&gt;

&lt;p&gt;It is a pure JavaScript web app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t8auwi8F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/473/1%2Aign_9yRIKmC44i0V7POEOQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t8auwi8F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/473/1%2Aign_9yRIKmC44i0V7POEOQ.png" alt="" width="378" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Road Map of Features Releases:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;June Release, 2020&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compare Response Feature — Compare responses of the same API once response structure changes&lt;/li&gt;
&lt;li&gt;Add or remove API Endpoints — Add and remove API endpoints from End Points tab&lt;/li&gt;
&lt;li&gt;Search Endpoints — Search through your API Endpoints with Smart Search&lt;/li&gt;
&lt;li&gt;Sign In Feature — Sign In to save all your API&lt;/li&gt;
&lt;li&gt;Notification Switch — Switch On/Off Notifications&lt;/li&gt;
&lt;li&gt;Generate Code — Generate Code from your API constructs&lt;/li&gt;
&lt;li&gt;More Personalized Settings — More personalized settings&lt;/li&gt;
&lt;li&gt;Index DB Support — Localized data now saved in Index DB for more storage&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Sept Release, 2020&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Refactor the repository with Type Script&lt;/li&gt;
&lt;li&gt;Authentication with custom sign up&lt;/li&gt;
&lt;li&gt;Web sockets real time update on Notifications&lt;/li&gt;
&lt;li&gt;Difference checker switch to show difference in attribute or values&lt;/li&gt;
&lt;li&gt;Automation in documentation generator of APIs&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What am I currently working on?
&lt;/h2&gt;

&lt;p&gt;There are missing features from the live demo which should exist in a real product. All of them will be finished on Phase 2:&lt;/p&gt;

&lt;h3&gt;
  
  
  Import JSON collection
&lt;/h3&gt;

&lt;p&gt;I would like to build this feature for a robust JSON parser which can import and parse any type of JSON&lt;/p&gt;

&lt;h3&gt;
  
  
  Diff checker for testers and developers
&lt;/h3&gt;

&lt;p&gt;This feature will hold a switch which will enable diff checker for attribute for testers and the value for developers. This could make a good feature for testers to check for any changes in attribute of the current response&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessibility ♿
&lt;/h3&gt;

&lt;p&gt;Not all components have properly defined aria attributes, visual focus indicators, etc.&lt;/p&gt;

&lt;p&gt;Feel free to contribute to this project and bring in more features. I am planning for a production release this September so stay tuned !!!!&lt;/p&gt;

&lt;h2&gt;
  
  
  Fork or contribute here:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Rajdeepc/teleport"&gt;Github Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading! If you have any questions, feel free to reach out at &lt;a href="mailto:rajrock38@gmail.com"&gt;rajrock38@gmail.com&lt;/a&gt;, connect with me on LinkedIn, or follow me on Medium and Twitter. &lt;br&gt;&lt;br&gt;
If you found this article helpful, it would mean a lot if you gave it some applause👏 and shared to help others find it! And feel free to leave a comment below.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>javascript</category>
      <category>react</category>
      <category>node</category>
    </item>
    <item>
      <title>Documenting React Components with docz</title>
      <dc:creator>Rajdeep Chandra</dc:creator>
      <pubDate>Sun, 12 Jul 2020 11:14:25 +0000</pubDate>
      <link>https://dev.to/rajdeepc/documenting-react-components-with-docz-531p</link>
      <guid>https://dev.to/rajdeepc/documenting-react-components-with-docz-531p</guid>
      <description>&lt;p&gt;Well.. when you are working on large scale projects and you are building reusable components from scratch and the number of components becoming more over time and new developers are coming in to the project, there is a need to document the components because you might get questions like “I want to build a new component for my new feature.. Is it already there? What it does? Does it work the same I want it to be?..&lt;/p&gt;

&lt;p&gt;These questions are quite valid and going through the entire components to find out where it is and how it works is time consuming and it not a good practice. Documentation and putting it live on a web server solves this problem. Today we are going to see how we can create documentation of React Components and use them in your projects so that we can save time working on our feature. We can scale these components based on our need instead of creating another one from scratch.&lt;/p&gt;

&lt;p&gt;To build documentation of React Components we will use docz.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Docz?
&lt;/h2&gt;

&lt;p&gt;Documenting code is one of the most important and time-heavy processes when developing software.&lt;/p&gt;

&lt;p&gt;A lot of time is spent on building and maintaining custom documentation sites.&lt;/p&gt;

&lt;p&gt;Docz was created to solve this problem.&lt;br&gt;
Docz enables you to quickly create live-reloading, seo-friendly, production-ready documentation sites with MDX and customize the look, feel and behavior when required by leveraging GatsbyJS and Gatsby theme shadowing.&lt;/p&gt;
&lt;h3&gt;
  
  
  Principles:
&lt;/h3&gt;

&lt;p&gt;We started by looking over the options available when you want to create your design system or document your project. We borrowed the best ideas from each and came up with the following guiding principles :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Zero config and easy to learn. Avoid unnecessary build steps with confusing setups.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Blazing fast. Built with performance in mind from the start.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Easy to customize. Create something that will be easy to use and customize.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MDX based. Use the best standard for writing documentation.&lt;br&gt;
Docz&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It has never been so easy to document your things&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="//www.docz.site"&gt;docz website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this tutorial we will not go through docz but we will only see how can we incorporate docz in our existing React application and create documentation for our already present React Components.&lt;/p&gt;

&lt;p&gt;Before moving to this tutorial I would suggest you to go through the docz website&lt;/p&gt;

&lt;p&gt;Let’s dive in…..&lt;/p&gt;

&lt;p&gt;Let’s suppose we have below React Application and we would like to generate documentation for our components.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uclV19a_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/300/1%2Ag96jv6Z4vdii9aLyi5Tt6Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uclV19a_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/300/1%2Ag96jv6Z4vdii9aLyi5Tt6Q.png" alt="" width="300" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are trying to build the documentation of our AlertComponent with docz.&lt;/p&gt;

&lt;p&gt;docz runs on gatsby on the wrapper. so when we need to run a documentation site inside our app we are spinning up a Gatsby server which is a wrapper on React. To learn more on Gatsby follow this link:&lt;/p&gt;

&lt;p&gt;&lt;a href="//www.gatsbyjs.org"&gt;Gatsby&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1:
&lt;/h3&gt;

&lt;p&gt;Add a .mdx file inside your component folder. For e.g(AlertComponent.mdx)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qfIJ0qpi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/501/1%2A-tTkTKnPxW_TPBQhPSIiog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qfIJ0qpi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/501/1%2A-tTkTKnPxW_TPBQhPSIiog.png" alt="AlertComponent.mdx" width="501" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are using pre-processing styles like SCSS or LESS in your components, then you should have some extra config to let know Gatsby that you need to compile the pre-processors like this.&lt;/p&gt;
&lt;h3&gt;
  
  
  For SCSS:
&lt;/h3&gt;

&lt;p&gt;Install node-sass and gatsby-plugin-sass&lt;/p&gt;
&lt;h1&gt;
  
  
  npm
&lt;/h1&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;save&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;sass&lt;/span&gt; &lt;span class="nx"&gt;gatsby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;plugin&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;sass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h1&gt;
  
  
  yarn
&lt;/h1&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;yarn&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;sass&lt;/span&gt; &lt;span class="nx"&gt;gatsby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;plugin&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;sass&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Add the plugin to your gatsby-config.js
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//gatsby-config.js&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gatsby-plugin-sass&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You should now be able to use sass in your components!&lt;/p&gt;
&lt;h3&gt;
  
  
  For LESS:
&lt;/h3&gt;

&lt;p&gt;Install gatsby-plugin-less&lt;/p&gt;
&lt;h1&gt;
  
  
  npm
&lt;/h1&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;install&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;save&lt;/span&gt; &lt;span class="nx"&gt;gatsby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;plugin&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;less&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h1&gt;
  
  
  yarn
&lt;/h1&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;yarn&lt;/span&gt; &lt;span class="nx"&gt;add&lt;/span&gt; &lt;span class="nx"&gt;gatsby&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;plugin&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;less&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Add the plugin to your gatsby-config.js
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//gatsby-config.js&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gatsby-plugin-less&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You should now be able to use less in your components!&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2:
&lt;/h3&gt;

&lt;p&gt;Add the below line in your “scripts” object in package.json to run a dev server for your documentation website of your React Components.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;docz-serve&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yarn docz serve&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4nvmi-YO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/338/1%2A4qV1H5B68f82Cg1njquSzg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4nvmi-YO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/338/1%2A4qV1H5B68f82Cg1njquSzg.png" alt="package.json" width="338" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now if you run npm run docz-serve you will see something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vm_n6RPQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/700/1%2APwkOtrCPny3V7y8Sj3UjLA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vm_n6RPQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/700/1%2APwkOtrCPny3V7y8Sj3UjLA.png" alt="docz running locally" width="700" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once your development server is up you will see a .docz folder in your directory which is serving all your static docz files. &lt;/p&gt;

&lt;p&gt;You should put it in .gitignore&lt;br&gt;
Thats it!!!&lt;/p&gt;

&lt;p&gt;Thanks for reading! If you have any questions, feel free to reach out at &lt;a href="mailto:rajrock38@gmail.com"&gt;rajrock38@gmail.com&lt;/a&gt;, connect with me on &lt;a href="https://www.linkedin.com/in/rajdeepcoder/"&gt;LinkedIn&lt;/a&gt;, or follow me on &lt;a href="https://medium.com/@rajrock38"&gt;Medium&lt;/a&gt; and &lt;a href="https://twitter.com/rajrock38"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you found this article helpful, it would mean a lot if you gave it some applause👏 and shared to help others find it! And feel free to leave a comment below.&lt;/p&gt;

</description>
      <category>react</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to design a URL Shortener web app</title>
      <dc:creator>Rajdeep Chandra</dc:creator>
      <pubDate>Tue, 09 Jun 2020 08:57:50 +0000</pubDate>
      <link>https://dev.to/rajdeepc/how-to-design-a-url-shortener-web-app-29gp</link>
      <guid>https://dev.to/rajdeepc/how-to-design-a-url-shortener-web-app-29gp</guid>
      <description>&lt;p&gt;This is one of my few system design tutorials which I am gonna post in next few days where I will tell you about good concrete failsafe solutions in building highly scalable distributed systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  A brief on what we are gonna learn:
&lt;/h3&gt;

&lt;p&gt;Designing a system is always an important or The Most important factor in a high traffic system. While designing something like a UrlShortener, a ticketing application or an eCommerce app where millions of users will do reads and writes. You system should be able to handle such amount of traffic smoothly efficiently and robustly. So to do this we need to design our stack our workflows and the system at scale.&lt;/p&gt;

&lt;p&gt;Today we are gonna build a URL shortener like tinyurl.com. We will see what all algorithms can be used, good and shortcomings of those and ultimately which suits the best for this system.&lt;br&gt;
So the first checkpoint of designing a system is to make few concrete assumptions:&lt;/p&gt;

&lt;p&gt;In this case we can assume: the length of the url which can be 7 characters long and how many hits will come to our system. Lets say our system will be capable of getting 1Million hits/day ie 30 M hits/day and so on….&lt;/p&gt;

&lt;h3&gt;
  
  
  Building Data Capacity Model:
&lt;/h3&gt;

&lt;p&gt;So to build our database we need to build a data model which will consist of the following entries:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Long URL - 2KB of size&lt;/li&gt;
&lt;li&gt;Short URL - 7 chars&lt;/li&gt;
&lt;li&gt;Created datestamp - 7 bytes&lt;/li&gt;
&lt;li&gt;Expiry date - 7 bytes&lt;/li&gt;
&lt;li&gt;Its quite simple right… No its actually not when you want to build a system which scales. For a single server system, its quite simple but in real life scenarios these systems should scale.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Algorithms:
&lt;/h3&gt;

&lt;p&gt;Now we come to the implementation logic part. So to achieve this.. well almost we can use two algorithms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;base62&lt;/li&gt;
&lt;li&gt;MD5 Hash&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So both the above two algorithms can be used to get the random hashes.We are using base62 since with using base62 we can generate 62⁷ ie more than 3 trillion combinations of strings and the same as with MD5 Hash. A light problem with MD5 Hash is that it gives us 20–22 character long hash values where are requirement is only 7 characters so to achieve that we need to pickup first 7 characters of the MD5 Hash value. That is ok for the time being…&lt;/p&gt;

&lt;h3&gt;
  
  
  Trying to build the system with base62 and MD5 Hash:
&lt;/h3&gt;

&lt;p&gt;First lets try to build the system with base62: So we take our long url for e.g: &lt;a href="http://www.abc.com/ayhasd/asdeqwe/qweqw?yusdsd=123123&amp;amp;kqwenoow" rel="noopener noreferrer"&gt;www.abc.com/ayhasd/asdeqwe/qweqw?yusdsd=123123&amp;amp;kqwenoow&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We pass this value to our base62 service and it will return me a 7 character unique key such as an1132s which we will pass it to our url shortener domain and build our short url like &lt;a href="http://www.shorturl.com/an1132s" rel="noopener noreferrer"&gt;www.shorturl.com/an1132s&lt;/a&gt; which on hitting will redirect us to the desired long url. This works nicely for a single system but suppose when millions of users are using the system there has to be system which will have parallel processing or sharding or multiple servers serving those requests instead of one server.&lt;/p&gt;

&lt;p&gt;So in such cases there rises our problem. Since multiple servers are serving different requests there can be cases where two servers will come to a point where they will return same 7 characters base62 value will be same for two different long urls. So if we are using a NoSQL database we will not have methods like INSERT IF and search the database whether that keys exists or not but we will run into a corrupt item or a Database collision is such case.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trying to solve the problem with a Counter:
&lt;/h3&gt;

&lt;p&gt;Well the above problem can be solved with a counter..OR can it be? Let’s try it out.&lt;/p&gt;

&lt;p&gt;To solve the ambiguity we can have a counter or 2 counters which can track or act as a thread safe unique id generators so that we don’t run into duplicate hash values. So we can give one counter a range value from 1–1Million and the second counter to 2 Million — 3 Million. But suppose the range values get exhausted after few months and the counter service will not know how to reset it and it will not have the communication with the other counter since both the counters are working in different servers. So here lies the problem with having a counter service.&lt;/p&gt;

&lt;h3&gt;
  
  
  Zookeeper to the Rescue:
&lt;/h3&gt;

&lt;p&gt;We can have a failsafe concrete solution to this problem with ZooKeeper. But what is Zookeeper?&lt;/p&gt;

&lt;p&gt;A Zookeeper is a configuration management distributed system which acts as a coordination service to manage different services or servers enrolled to it. In simple words it acts as a centralised hub to communicate with different nodes attach to it. Keeping this in mind let us draw a System Design Diagram to solve our scaling problem.&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AVrkanHuPFSbG30u7QzlvvQ.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AVrkanHuPFSbG30u7QzlvvQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, a user uploads a long url which goes through a load balancer to determine which server to send the payload to. Assuming Server 1 is free to accept a payload and when it gets the request it increments its counter which ranges from 1 million — 2 million and assigns a value to the request. The Request then goes to the base62 service and gets its new shortened 7 character key.&lt;/p&gt;

&lt;p&gt;The main job of Zookeeper here is to assign each server with a particular counter range and keep track of its changes so that there is no duplicate keys or database collision.&lt;/p&gt;

&lt;h3&gt;
  
  
  Let us Scale:
&lt;/h3&gt;

&lt;p&gt;Suppose say Server 3 went down after a certain time so it will remove the entry in the Zookeeper service and make it unassigned again. And let us add another server 4 to the system and it will be assigned to a new range of 4 m — 5 M. This is how we can easily scale up and down the system without any downtime. And since Zookeeper is a service with multiple servers in it so it will eventually be a failsafe system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Link to the GitHub Repo:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Rajdeepc/url-shortener-vue" rel="noopener noreferrer"&gt;Github Repo&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Live App:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FRajdeepc%2Furl-shortener-vue%2Fraw%2Fmaster%2Fgithub%2Furldash.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%2Fgithub.com%2FRajdeepc%2Furl-shortener-vue%2Fraw%2Fmaster%2Fgithub%2Furldash.png" alt="Github Repo"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Link to Download Chrome Extension:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Rajdeepc/shrink-url-chrome_ext" rel="noopener noreferrer"&gt;Download Here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A full E2E application to shorten your urls and save it on your profile. It gives you flexibity to choose your domain…&lt;/p&gt;

&lt;p&gt;Thanks for reading! If you have any questions, feel free to reach out at &lt;a href="mailto:rajrock38@gmail.com"&gt;rajrock38@gmail.com&lt;/a&gt;, connect with me on LinkedIn, or follow me on Medium and Twitter.&lt;br&gt;
If you found this article helpful, it would mean a lot if you gave it some applause👏 and shared to help others find it! And feel free to leave a comment below.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>webdev</category>
      <category>react</category>
    </item>
    <item>
      <title>Boost your Front End Development with these tools</title>
      <dc:creator>Rajdeep Chandra</dc:creator>
      <pubDate>Mon, 08 Jun 2020 10:29:22 +0000</pubDate>
      <link>https://dev.to/rajdeepc/boost-your-front-end-development-with-these-tools-2klk</link>
      <guid>https://dev.to/rajdeepc/boost-your-front-end-development-with-these-tools-2klk</guid>
      <description>&lt;p&gt;We all know that working on Front End gives us a lot of space to explore with images, illustrations, placeholders, JSON, themes,VS code plugins etc so I have collated a list of collections which is a must have for every Front End Developers. I have been using these tools for a few years now and it’s pretty much covers everything we all require during our course of development.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Visual Studio Code (text editor)
&lt;/h3&gt;

&lt;p&gt;Visual Studio Code is a free source-code editor made by Microsoft for Windows, Linux and macOS. Features include support for debugging, syntax highlighting, intelligent code completion, snippets, code refactoring, and embedded Git.&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AeZzx1FOkFN0XcXxr1YLCBQ.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AeZzx1FOkFN0XcXxr1YLCBQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://code.visualstudio.com/download" rel="noopener noreferrer"&gt;https://code.visualstudio.com/download&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Emmet (code tool)
&lt;/h3&gt;

&lt;p&gt;Emmet support is built right into Visual Studio Code, no extension is required. Emmet 2.0 has support for the majority of the Emmet Actions including expanding Emmet abbreviations and snippets&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%2Fmiro.medium.com%2Fmax%2F461%2F1%2AWp-j3YJtuH2tQOydRY7YIA.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%2Fmiro.medium.com%2Fmax%2F461%2F1%2AWp-j3YJtuH2tQOydRY7YIA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://emmet.io/download/" rel="noopener noreferrer"&gt;https://emmet.io/download/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Live Server (for VS Code)
&lt;/h3&gt;

&lt;p&gt;A Quick Development Live Server with live browser reload.&lt;br&gt;
Start or Stop server by a single click from status bar.&lt;br&gt;
Open a HTML file to browser from Explorer menu.[Quick Gif Demo].&lt;br&gt;
Support for excluding files for change detection.&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2Agtkh0Pcube9Jl98e-HDCSw.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2Agtkh0Pcube9Jl98e-HDCSw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Material Theme (for VS Code)
&lt;/h3&gt;

&lt;p&gt;The most epic theme now for Visual Studio Code. It changes your folder icons to Material Design theme.&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AJ6iILJfGS1EvvUsfl7kHMQ.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AJ6iILJfGS1EvvUsfl7kHMQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://marketplace.visualstudio.com/items?itemName=Equinusocio.vsc-material-theme" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=Equinusocio.vsc-material-theme&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Prettier (code tool)
&lt;/h3&gt;

&lt;p&gt;Prettier is an opinionated code formatter with support for:&lt;br&gt;
JavaScript, including ES2017&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSX&lt;/li&gt;
&lt;li&gt;Angular&lt;/li&gt;
&lt;li&gt;Vue&lt;/li&gt;
&lt;li&gt;Flow&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;CSS, Less, and SCSS&lt;/li&gt;
&lt;li&gt;HTML&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;GraphQL&lt;/li&gt;
&lt;li&gt;Markdown, including GFM and MDX&lt;/li&gt;
&lt;li&gt;YAML&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AylQTqkjmrLScRtl3FcsvSA.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AylQTqkjmrLScRtl3FcsvSA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://github.com/prettier/prettier" rel="noopener noreferrer"&gt;https://github.com/prettier/prettier&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Auto Rename Tag (for VS Code)
&lt;/h3&gt;

&lt;p&gt;Auto rename paired HTML/XML tag&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AME0oAmIJdO6zaaYwL1DPwA.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AME0oAmIJdO6zaaYwL1DPwA.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7. JSON Viewer (Browser Extension)
&lt;/h3&gt;

&lt;p&gt;The most beautiful and customisable JSON/JSONP highlighter that your eyes have ever seen. It is a Chrome extension for printing JSON and JSONP.&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%2Fmiro.medium.com%2Fmax%2F640%2F1%2AnMDIRIjSi-tY5gytMHivoA.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%2Fmiro.medium.com%2Fmax%2F640%2F1%2AnMDIRIjSi-tY5gytMHivoA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh" rel="noopener noreferrer"&gt;https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Affinity Photo (Photo Editing)
&lt;/h3&gt;

&lt;p&gt;If you could create your own photo editing software, it would work like this. Whether it’s quick corrections, delicate retouching, or immersing yourself in complex fine art with hundreds of layers, Affinity Photo has you covered.&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AXfDQMkB2BD-mxR7hFeufLw.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AXfDQMkB2BD-mxR7hFeufLw.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://affinity.serif.com/en-us/" rel="noopener noreferrer"&gt;https://affinity.serif.com/en-us/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  9. GIMP (Photo Editing)
&lt;/h3&gt;

&lt;p&gt;GIMP is a cross-platform image editor available for GNU/Linux, OS X, Windows and more operating systems. It is free software, you can change its source code and distribute your changes.&lt;br&gt;
Whether you are a graphic designer, photographer, illustrator, or scientist, GIMP provides you with sophisticated tools to get your job done.&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2Aa0qXUPjg-p56UzlEiKMokA.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2Aa0qXUPjg-p56UzlEiKMokA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://www.gimp.org/" rel="noopener noreferrer"&gt;https://www.gimp.org/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Pexels (for photos)
&lt;/h3&gt;

&lt;p&gt;Free stock photos you can use everywhere. ✓ Free for commercial use ✓ No attribution required.&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2As7V2oQYP-WMPGFYnPtSzJQ.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2As7V2oQYP-WMPGFYnPtSzJQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://www.pexels.com/" rel="noopener noreferrer"&gt;https://www.pexels.com/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  11. Unsplash.com (for photos)
&lt;/h3&gt;

&lt;p&gt;Unsplash is a website dedicated to sharing stock photography under the Unsplash license. The website claims over 110,000 contributing photographers and generates more than 11 billion photo impressions per month on their growing library of over 1.5 million&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AdjG3OSLS_GgZee6CAT2Zug.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AdjG3OSLS_GgZee6CAT2Zug.png"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  12. Placeholder.com (for placeholder images)
&lt;/h3&gt;

&lt;p&gt;Placeholder.com is a free image placeholder service for web designers, serving billions and billions of images each year. You can specify image size &amp;amp; format (.GIF, .JPG, .PNG, .WEBP), background color &amp;amp; text color, as well as the text.&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2ADCX-17a-gBPEM5ipuefSiQ.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2ADCX-17a-gBPEM5ipuefSiQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  13. tinypng.com (compress images)
&lt;/h3&gt;

&lt;p&gt;TinyPNG uses smart lossy compression techniques to reduce the file size of your PNG files. By selectively decreasing the number of colors in the image, fewer bytes are required to store the data. The effect is nearly invisible but it makes a very large difference in file size!&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2Ad4JFSEmNVZqPxESrVDF2aw.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2Ad4JFSEmNVZqPxESrVDF2aw.png"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  14. Figma (design websites)
&lt;/h3&gt;

&lt;p&gt;Figma is a free, online UI tool to create, collaborate, prototype, and handoff.&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AayeG9jZ7gyzSk4tOCu6aYg.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AayeG9jZ7gyzSk4tOCu6aYg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://www.figma.com/" rel="noopener noreferrer"&gt;https://www.figma.com/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  15. UI Gradient &amp;amp; Colors (websites for color palettes)
&lt;/h3&gt;

&lt;p&gt;A handpicked collection of beautiful color gradients for designers and developers.&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2ANAH5VDIvSPbSNflmZZMwwg.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2ANAH5VDIvSPbSNflmZZMwwg.png"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  16. DaVinci Resolve (videos for browser)
&lt;/h3&gt;

&lt;p&gt;DaVinci Resolve 16 is the world’s only solution that combines professional 8K editing, color correction, visual effects and audio post production all in one software tool! You can instantly move between editing, color, effects, and audio with a single click.&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2Am85jMl2VdkqXDl-cc-zsNA.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2Am85jMl2VdkqXDl-cc-zsNA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;URL: &lt;a href="https://www.blackmagicdesign.com/in/products/davinciresolve/" rel="noopener noreferrer"&gt;https://www.blackmagicdesign.com/in/products/davinciresolve/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  17. Font Awesome (for icons)
&lt;/h3&gt;

&lt;p&gt;Font Awesome CDN is the easiest way to get Font Awesome on your website or app, all with just a single line of code. No downloading or installing!&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AEiZ9SzraFDLwK4EPQmYjIQ.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2AEiZ9SzraFDLwK4EPQmYjIQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  18. Undraw (for free illustrations)
&lt;/h3&gt;

&lt;p&gt;Create better designed websites, products and applications. Browse to find the images that fit your messaging, automagically customise the color to match your brand and use it as a normal image, embedded code or directly in your design workflow.&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%2Fmiro.medium.com%2Fmax%2F700%2F1%2A8BLUocpkdljRTQaU-7vMLQ.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%2Fmiro.medium.com%2Fmax%2F700%2F1%2A8BLUocpkdljRTQaU-7vMLQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Thanks for reading! If you have any questions, feel free to reach out at &lt;a href="mailto:rajrock38@gmail.com"&gt;rajrock38@gmail.com&lt;/a&gt;, connect with me on LinkedIn, or follow me on Medium and Twitter.&lt;br&gt;
If you found this article helpful, it would mean a lot if you gave it some applause👏 and shared to help others find it! And feel free to leave a comment below.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>javascript</category>
      <category>codepen</category>
    </item>
  </channel>
</rss>
