<?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: Eknoorpreet Singh</title>
    <description>The latest articles on DEV Community by Eknoorpreet Singh (@eknoor4197).</description>
    <link>https://dev.to/eknoor4197</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%2F758979%2F4225042c-c622-4238-a252-2036e4b32b8c.jpeg</url>
      <title>DEV Community: Eknoorpreet Singh</title>
      <link>https://dev.to/eknoor4197</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eknoor4197"/>
    <language>en</language>
    <item>
      <title>I built a DEV.to clone from scratch (including the API!) 👨‍💻🥳</title>
      <dc:creator>Eknoorpreet Singh</dc:creator>
      <pubDate>Thu, 07 Apr 2022 14:57:09 +0000</pubDate>
      <link>https://dev.to/eknoor4197/i-built-a-devto-clone-from-scratch-including-the-api-56k9</link>
      <guid>https://dev.to/eknoor4197/i-built-a-devto-clone-from-scratch-including-the-api-56k9</guid>
      <description>&lt;p&gt;Hey guys, I wanted to showcase my latest project: A DEV clone. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why I made it
&lt;/h2&gt;

&lt;p&gt;My motivation behind the project was simple: I had learnt both frontend (React) and backend (MongoDB, Node, Express) technologies and wanted to build a full-stack React app to learn how both sides work together. Initially, I decided to make a blog website where I could post my notes on anything new I learned. Then, I came to know about DEV.to (believe me, I didn't know about it until some months ago) so I decided to make a clone.&lt;/p&gt;

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

&lt;p&gt;Going in, I decided that I will not shy away from building any complex features present on the original website. Even though it's a clone (and nobody will probably ever use it), it's still a clone of a real-world application, and building it with that mindset will make you a better developer. For example, you write efficient queries because you care about the speed of the response from the server. &lt;/p&gt;

&lt;h3&gt;
  
  
  Tech
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;UI: &lt;a href="https://github.com/facebook/react" rel="noopener noreferrer"&gt;React&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Routing: &lt;a href="https://github.com/ReactTraining/react-router" rel="noopener noreferrer"&gt;React Router&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Real-time Notifications: &lt;a href="https://github.com/socketio/socket.io" rel="noopener noreferrer"&gt;Socket.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Backend: &lt;a href="https://github.com/expressjs/express" rel="noopener noreferrer"&gt;Express&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Database: &lt;a href="https://github.com/mongodb/mongo" rel="noopener noreferrer"&gt;MongoDB&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ORM: &lt;a href="https://github.com/Automattic/mongoose" rel="noopener noreferrer"&gt;Mongoose&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Image hosting: &lt;a href="https://cloudinary.com/" rel="noopener noreferrer"&gt;Cloudinary&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enough talking! Let's see the clone in action:&lt;/p&gt;

&lt;h3&gt;
  
  
  Login / Signup
&lt;/h3&gt;

&lt;p&gt;The application consists of local authentication (using JWT) as well as OAuth services of Google, Facebook, GitHub, and Twitter:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fdrkvr9wta%2Fimage%2Fupload%2Fv1649308727%2Fdevto-clone%2Flogin-signup_cw4dnt.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fdrkvr9wta%2Fimage%2Fupload%2Fv1649308727%2Fdevto-clone%2Flogin-signup_cw4dnt.gif" alt="Login / Signup"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Like / Unicorn / Bookmark
&lt;/h3&gt;

&lt;p&gt;Just like the original, there are 3 "reaction" features: like, unicorn (whose mystery I am yet to unravel), and bookmark.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  New Post
&lt;/h3&gt;

&lt;p&gt;Users can create / update / delete posts.&lt;/p&gt;

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

&lt;p&gt;(A gif wasn't working here so I just added an image)&lt;/p&gt;

&lt;h3&gt;
  
  
  Comments and Replies
&lt;/h3&gt;

&lt;p&gt;Users can comment /reply but unlike the original DEV, I limited my clone's comment section to just one thread.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fdrkvr9wta%2Fimage%2Fupload%2Fv1649310925%2Fdevto-clone%2Fcompressed-comments-replies_qsnuae.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fdrkvr9wta%2Fimage%2Fupload%2Fv1649310925%2Fdevto-clone%2Fcompressed-comments-replies_qsnuae.gif" alt="Comments and Replies"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time Notifications
&lt;/h3&gt;

&lt;p&gt;The user gets notifications when he's followed or his post receives a like or comment from another user.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Follow Tags
&lt;/h3&gt;

&lt;p&gt;Whenever a user creates a new post, he can add tags (no set limit as of now). If the tag doesn't exist, it's created and attached to the post. Furthermore, the user can follow/unfollow tags and get posts filtered by tags as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fdrkvr9wta%2Fimage%2Fupload%2Fv1649308992%2Fdevto-clone%2Ftags_y7jhbu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fres.cloudinary.com%2Fdrkvr9wta%2Fimage%2Fupload%2Fv1649308992%2Fdevto-clone%2Ftags_y7jhbu.gif" alt="Follow Tags"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Edit Profile
&lt;/h3&gt;

&lt;p&gt;Users can update their profile by providing information about their work, skills/languages, bio, social media, and location. &lt;/p&gt;

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

&lt;h3&gt;
  
  
  Search
&lt;/h3&gt;

&lt;p&gt;Users can search for posts (only via titles as of now).&lt;/p&gt;

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

&lt;h2&gt;
  
  
  What I learned:
&lt;/h2&gt;

&lt;p&gt;There are three most important factors that distinguish a good project from a great project:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;UI: The first thing people are going to compare when judging your clone is the UI. So, I tried to make it as close to the original as possible. It was a challenge to match the UI with the original on both desktop and mobile but I got through.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Features: As you saw, I tried to implement all the core features of the original DEV. Starting out, I had no idea how to go about working on real-time functionalities such as notifications. But you grow the most when you do the things you don't know how to do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code readability: You don't write code for just the machine. In real-world, you write it for other people to read. Being able to write code that is easy to read is an essential skill to master.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;I put a lot of effort into the DEV clone and I hope you liked it. Feel free to ask anything about the project! &lt;/p&gt;

&lt;p&gt;You can access the code at my &lt;a href="https://github.com/eknoorpreet/dev.to-clone"&gt;GitHub repo&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Here's the &lt;a href="https://devfrom.netlify.app" rel="noopener noreferrer"&gt;deployed site&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
