<?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: Mert izgahi</title>
    <description>The latest articles on DEV Community by Mert izgahi (@mert_izgahi_e1e5719866b86).</description>
    <link>https://dev.to/mert_izgahi_e1e5719866b86</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%2F1679599%2F5a606929-7aa0-41b8-8743-0c6930527eed.png</url>
      <title>DEV Community: Mert izgahi</title>
      <link>https://dev.to/mert_izgahi_e1e5719866b86</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mert_izgahi_e1e5719866b86"/>
    <language>en</language>
    <item>
      <title>Join To My Journey to learn building full stack web application</title>
      <dc:creator>Mert izgahi</dc:creator>
      <pubDate>Mon, 28 Oct 2024 20:02:13 +0000</pubDate>
      <link>https://dev.to/mert_izgahi_e1e5719866b86/join-to-my-journey-to-learn-building-full-stack-web-application-33bn</link>
      <guid>https://dev.to/mert_izgahi_e1e5719866b86/join-to-my-journey-to-learn-building-full-stack-web-application-33bn</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.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%2Fig2fonf93938aj4imoix.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fig2fonf93938aj4imoix.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I decided to share my experience in building web applications by building a full stack web app I called it Job Board, Job board is a MERN Stack application with multi roles and features.&lt;/p&gt;

&lt;p&gt;At the starting point, I created a repository on GitLab and wrote an overview of the app, including the roles and workflows. This overview is based on my initial perspective, which may change later. However, the important thing for me is to keep everything documented.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gitlab.com/mern2834339/job-board" rel="noopener noreferrer"&gt;Project Repository&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/playlist?list=PLN4WTu8pa217VTAbhLWFcHS3vffsUSiUb" rel="noopener noreferrer"&gt;Youtube Playlist&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Job Board
&lt;/h1&gt;

&lt;p&gt;A MERN Stack Job Board app. allow users to post jobs and apply to them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Teck Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Redux&lt;/li&gt;
&lt;li&gt;React Router&lt;/li&gt;
&lt;li&gt;React Hook Form&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Shadecn Tailwind&lt;/li&gt;
&lt;li&gt;Zod&lt;/li&gt;
&lt;li&gt;Express&lt;/li&gt;
&lt;li&gt;Mongoose&lt;/li&gt;
&lt;li&gt;Cloudinary&lt;/li&gt;
&lt;li&gt;JWT&lt;/li&gt;
&lt;li&gt;Bcrypt&lt;/li&gt;
&lt;li&gt;Nodemailer&lt;/li&gt;
&lt;li&gt;Typescript&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Node&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Post jobs&lt;/li&gt;
&lt;li&gt;Apply to jobs&lt;/li&gt;
&lt;li&gt;Search jobs&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Filter jobs&lt;/li&gt;
&lt;li&gt;Sort jobs&lt;/li&gt;
&lt;li&gt;Manage applications&lt;/li&gt;
&lt;li&gt;Manage jobs&lt;/li&gt;
&lt;li&gt;Manage resumes&lt;/li&gt;
&lt;li&gt;Manage interviews&lt;/li&gt;
&lt;li&gt;Manage notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Application Flow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  User As Employer
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Register - Or - Login&lt;/li&gt;
&lt;li&gt;Account

&lt;ul&gt;
&lt;li&gt;Update Profile&lt;/li&gt;
&lt;li&gt;Change Password&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Company Settings&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setup Company Profile&lt;/li&gt;
&lt;li&gt;Update Company Profile&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Dashboard&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manage Jobs&lt;/li&gt;
&lt;li&gt;Create Job&lt;/li&gt;
&lt;li&gt;Update Job&lt;/li&gt;
&lt;li&gt;Delete Job&lt;/li&gt;
&lt;li&gt;Reactivate Job&lt;/li&gt;
&lt;li&gt;Archive Job&lt;/li&gt;
&lt;li&gt;Unarchive Job&lt;/li&gt;
&lt;li&gt;Filter Jobs&lt;/li&gt;
&lt;li&gt;Sort Jobs&lt;/li&gt;
&lt;li&gt;Search Jobs&lt;/li&gt;
&lt;li&gt;Manage Applications&lt;/li&gt;
&lt;li&gt;View Applications&lt;/li&gt;
&lt;li&gt;Accept Application&lt;/li&gt;
&lt;li&gt;Reject Application&lt;/li&gt;
&lt;li&gt;Manage Interviews&lt;/li&gt;
&lt;li&gt;Create Interview&lt;/li&gt;
&lt;li&gt;Update Interview&lt;/li&gt;
&lt;li&gt;Delete Interview&lt;/li&gt;
&lt;li&gt;Manage Notifications&lt;/li&gt;
&lt;li&gt;View Notifications&lt;/li&gt;
&lt;li&gt;Mark Notification as Read&lt;/li&gt;
&lt;li&gt;Delete Notification&lt;/li&gt;
&lt;li&gt;Logout&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  User As Candidate
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Register - Or - Login&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Account&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Update Profile&lt;/li&gt;
&lt;li&gt;Change Password&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Root&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jobs&lt;/li&gt;
&lt;li&gt;View Job&lt;/li&gt;
&lt;li&gt;Apply to Job&lt;/li&gt;
&lt;li&gt;Filter Jobs&lt;/li&gt;
&lt;li&gt;Sort Jobs&lt;/li&gt;
&lt;li&gt;Search Jobs&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Applications&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;View Application&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Create Application&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Update Application&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Delete Application&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Interviews&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;View Interview&lt;/li&gt;
&lt;li&gt;Approve Interview&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Notifications&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;View Notification&lt;/li&gt;
&lt;li&gt;Mark Notification as Read&lt;/li&gt;
&lt;li&gt;Delete Notification&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Resume&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload Resume&lt;/li&gt;
&lt;li&gt;Delete Resume&lt;/li&gt;
&lt;li&gt;Select Active Resume&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Logout&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  User As Candidate
&lt;/h3&gt;

&lt;h2&gt;
  
  
  Database
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Mongoose&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Models
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Job&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;id&lt;/li&gt;
&lt;li&gt;title&lt;/li&gt;
&lt;li&gt;description&lt;/li&gt;
&lt;li&gt;level (Senior, Junior, Intern)&lt;/li&gt;
&lt;li&gt;applicationMethod (email,external,linkedin,jobboard)&lt;/li&gt;
&lt;li&gt;location (JobType -&amp;gt; Remote, Hybrid, Onsite)&lt;/li&gt;
&lt;li&gt;applicationLink?&lt;/li&gt;
&lt;li&gt;applicationDeadline&lt;/li&gt;
&lt;li&gt;category&lt;/li&gt;
&lt;li&gt;salary&lt;/li&gt;
&lt;li&gt;requirements&lt;/li&gt;
&lt;li&gt;responsibilities&lt;/li&gt;
&lt;li&gt;showSalary&lt;/li&gt;
&lt;li&gt;status (Active, Archived)&lt;/li&gt;
&lt;li&gt;created_at&lt;/li&gt;
&lt;li&gt;updated_at&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Company&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;id&lt;/li&gt;
&lt;li&gt;name&lt;/li&gt;
&lt;li&gt;description&lt;/li&gt;
&lt;li&gt;website&lt;/li&gt;
&lt;li&gt;linkedin&lt;/li&gt;
&lt;li&gt;logo&lt;/li&gt;
&lt;li&gt;city&lt;/li&gt;
&lt;li&gt;state&lt;/li&gt;
&lt;li&gt;country&lt;/li&gt;
&lt;li&gt;cover&lt;/li&gt;
&lt;li&gt;size&lt;/li&gt;
&lt;li&gt;location&lt;/li&gt;
&lt;li&gt;created_at&lt;/li&gt;
&lt;li&gt;updated_at&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;User&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;id&lt;/li&gt;
&lt;li&gt;name&lt;/li&gt;
&lt;li&gt;email&lt;/li&gt;
&lt;li&gt;password&lt;/li&gt;
&lt;li&gt;role (Candidate, Employer, Admin)&lt;/li&gt;
&lt;li&gt;company?&lt;/li&gt;
&lt;li&gt;linkedIn&lt;/li&gt;
&lt;li&gt;github?&lt;/li&gt;
&lt;li&gt;dribble?&lt;/li&gt;
&lt;li&gt;activeResume?&lt;/li&gt;
&lt;li&gt;cover?&lt;/li&gt;
&lt;li&gt;imageUrl?&lt;/li&gt;
&lt;li&gt;created_at&lt;/li&gt;
&lt;li&gt;updated_at&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Resume&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;id&lt;/li&gt;
&lt;li&gt;userId&lt;/li&gt;
&lt;li&gt;resumeUrl&lt;/li&gt;
&lt;li&gt;created_at&lt;/li&gt;
&lt;li&gt;updated_at&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Application&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;id&lt;/li&gt;
&lt;li&gt;jobId&lt;/li&gt;
&lt;li&gt;userId&lt;/li&gt;
&lt;li&gt;status (Pending, Accepted, Rejected)&lt;/li&gt;
&lt;li&gt;resume&lt;/li&gt;
&lt;li&gt;message&lt;/li&gt;
&lt;li&gt;created_at&lt;/li&gt;
&lt;li&gt;updated_at&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Interview&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;id&lt;/li&gt;
&lt;li&gt;jobId&lt;/li&gt;
&lt;li&gt;userId&lt;/li&gt;
&lt;li&gt;type (Virtual, InPerson)&lt;/li&gt;
&lt;li&gt;googleMeetLink&lt;/li&gt;
&lt;li&gt;status (Pending, Approved)&lt;/li&gt;
&lt;li&gt;created_at&lt;/li&gt;
&lt;li&gt;updated_at&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Notification&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;id&lt;/li&gt;
&lt;li&gt;userId&lt;/li&gt;
&lt;li&gt;message&lt;/li&gt;
&lt;li&gt;created_at&lt;/li&gt;
&lt;li&gt;updated_at&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>mern</category>
      <category>react</category>
      <category>shadecn</category>
      <category>express</category>
    </item>
  </channel>
</rss>
