<?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: Elliott Chong</title>
    <description>The latest articles on DEV Community by Elliott Chong (@elliottchong).</description>
    <link>https://dev.to/elliottchong</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%2F788309%2F43ec32f2-8269-4d7b-8972-98de785b696a.png</url>
      <title>DEV Community: Elliott Chong</title>
      <link>https://dev.to/elliottchong</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/elliottchong"/>
    <language>en</language>
    <item>
      <title>[SportBuddy]</title>
      <dc:creator>Elliott Chong</dc:creator>
      <pubDate>Mon, 10 Jan 2022 13:17:55 +0000</pubDate>
      <link>https://dev.to/elliottchong/sportbuddy-5967</link>
      <guid>https://dev.to/elliottchong/sportbuddy-5967</guid>
      <description>&lt;h1&gt;
  
  
  SportBuddy
&lt;/h1&gt;

&lt;p&gt;Ever wanted to play some sports but find that your friends are too busy? With &lt;strong&gt;SportBuddy&lt;/strong&gt;, you can find Buddies to enjoy your favourite sports together! Just create a new posting with your desired Sport, and await other users to join the group. You can chat with them in the live chat section for more details. Visit the site now at &lt;a href="https://SportBuddy-Elle.netlify.app"&gt;https://SportBuddy-Elle.netlify.app&lt;/a&gt;!&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://GitHub.com/Elliott-Chong/SportBuddy"&gt;https://GitHub.com/Elliott-Chong/SportBuddy&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Submission Category
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Choose Your Own Adventure&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Technologies Used
&lt;/h1&gt;

&lt;p&gt;This is my first serious full stack project using the &lt;strong&gt;MongoDB&lt;/strong&gt;, &lt;strong&gt;React&lt;/strong&gt;, &lt;strong&gt;Express&lt;/strong&gt; and &lt;strong&gt;NodeJS&lt;/strong&gt; (&lt;em&gt;MERN&lt;/em&gt;) Stack. Featuring a custom authentication system using &lt;strong&gt;JSON Web Tokens&lt;/strong&gt; for session management, and Google OAuth for SSO. &lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Custom&lt;/em&gt; &lt;strong&gt;theme&lt;/strong&gt; and &lt;strong&gt;design&lt;/strong&gt;, layout preplanned in Inkscape, a vector based graphics editor.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Custom&lt;/em&gt; CSS implemented using &lt;strong&gt;TailwindCSS&lt;/strong&gt;, a utility based CSS framework.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Fully&lt;/em&gt; &lt;strong&gt;responsive&lt;/strong&gt; design for a better User Experience.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;State management&lt;/em&gt; involved React's &lt;strong&gt;useReducer&lt;/strong&gt; hook and their &lt;strong&gt;Context&lt;/strong&gt; &lt;strong&gt;API&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Live chat feature&lt;/em&gt; uses &lt;strong&gt;WebSockets&lt;/strong&gt;, implemented by the NodeJS package socket.io, allowing for full-duplex communication channels over a single TCP connection. This allows for all clients to receive socket messages at the same time and update thier state accordingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mongoose&lt;/strong&gt;, a MongoDB wrapper, was used as a &lt;em&gt;Object Relational Wrapper&lt;/em&gt; (ORM) to simplify the process of reading and writing to the database.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Screenshots
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--82Bu88mE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/9cKWVQe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--82Bu88mE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/9cKWVQe.png" alt="" width="880" height="510"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cj7B6yqr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/nZ8LN6Y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cj7B6yqr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/nZ8LN6Y.png" alt="enter image description here" width="880" height="513"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VMM5n_lD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/f3Upowa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VMM5n_lD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/f3Upowa.png" alt="enter image description here" width="880" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>atlashackathon</category>
    </item>
  </channel>
</rss>
