Xh3ni / LyhnidasYourJobCoach

0 stars 1 forks source link

If opportunity doesn't knock, build a door.

Lyhnidas Your Job Coach

Live Site:

Lyhnidas Your Job Coach

Repository:

Lyhnidas Your Job Coach Repository

Developer:

Xhensila Stambolliu

About

This is a full-stack project built using Django, Python, HTML, CSS, and JavaScript. I have created this website for my fourth project of the codeinstitute's Diploma in FullStack Development. It is a website which helps job seekers and recruiters come together and hire easily built using Django Framework.

Table of Contents

  1. Project Aim
  2. [User Experience]()
    1. Target Audience
    2. [Apps]()
    3. Design
    4. Scope
    5. User stories
  3. [Technical]()
    1. Agile
  4. Features
  5. Marketing
  6. Bugs
  7. Technologies Used
  8. Testing
  9. Deployment
  10. Credits
  11. Acknowledgments

Aim

To create a web application which will allow helps job seekers and recruiters come together and hire easily. A user can easily access the website to search and apply for a job, and also, a user can add a job as a recruiter.

Database Design

Database Schema

User Account

This app is use for all authentication, profile and account purposes. I am using the allauth package to handle the authentication. Also, I am only using account login providers, so we are free from any password handling and recovery issues.


Login

Login

SignUp

Sign Up

base.html This is the base of the entire website which each other webpage extends from. It contains the header and footer of the website. It links this template to all the CSS and JS files. I have used Bootstrap4 CSS and JS files and a pair of other CSS files. Thereare two sections for the navigation bar, one for the recruiter side and the other for the candidate side. Also,there is a button to move to the other side.


The default opening is on the candidate side.

Candidate Nav Not Login


The default opening is on the recruiter side.

Recruiter Nav Not Login




It also has the login button when the user is not signed in, and when loged in, the login button disappears, and the logout button appears.

Candidate Nav Login




Recruiter Nav after Login

Recruiter Nav Login




The footer is the same. There are some links to pages and some details about the website and some social media handles. All the social media links open on a new page and redirect to Lyhnidas Pages.

Footer




Sign Out

SignOut

Candidates App

In the candidates part, are all the things relevant to the job seekers (candidates), which consists of the job search, job application and saving of jobs. It also shows the current status of the application, whether its accepted, pending or rejected. Also, there is an intelligence search feature built-in which shows the jobs which are the best fit for the user based on the skills skills and job requirements.

Firstly is defined a CHOICES variable which consists of four choices (Full Time, Part Time, Internship, Remte), which is used in the Profile class.

Profile— This class contains all the information about the candidate. It is linked to the default User model of Django. It also consists of the full name, country, location, resume, graduation year and looking for an option. It also has a slug option, which helps to generate a slug from the user variable. Resumes are stored in cloud storage. It also has a function which returns its absolute URL with the help of a slug. Skill- This is the model class which contains the skill and a foreign key linking to the User.

SavedJobs - This is the class of the model which consists of three parameters — job, user and date_posted. Job links it to the Job model from the recruiters' App, user links with the User Model, and date uses the current time via the Django timezone. The purpose is to store the jobs saved by a user.

AppliedJobs - This is the class of the model which consists of three parameters — job, user and date_posted. Job links it to the Job model from the recruiters' App, user links with the User Model, and date uses the current time via the Django timezone. The purpose is to store the jobs applied by a user. It is very similar to the Saved Jobs class.

forms.py The forms part consists of two forms which is used for the candidates part of the website: ProfileUpdateForm and NewSkillForm.

  1. ProfileUpdateForm — The purpose of this form is to enable a user to update his candidate profile. The user can update all the parameters of the Profile model class.

  2. NewSkillForm — This form is used to add a new skill to the skills model class for a user.

Recruiters App

In the recruiters part, there are mostly all the things which are relevant to the recruiters and hiring companies, which consist of the job posting, getting candidates applying on job posts, selecting these candidates and also viewing the resumes of all the candidates on the database. It also shows the current status of the job post, like how many have applied and can see the applicants list. Then can select or reject them based on their profile and resume. Also, there is an intelligence search feature built-in which shows the candidates who are the best fit based on their skills and job requirements to save time.

Firstly is defined a CHOICES variable which consists of four choices (Full Time, Part Time, Internship, Remte), which is used in the Job class.

Job - This class contains all the information relevant to the job post. It has a recruiter variable which links it to the Recruiter posting the job post. It also has all details about the job, like the title, location, company, description, skills required and the type of the job, whether it is a full-time job, part-time job, an internship or a remote opportunity. There is also a link section which can be left blank (only required when the recruiter wants to accept applicants on their website). It also has a slug that helps create unique slugs based on the job title.

Applicants - This class stores all the data related to the candidates who have applied to a particular job post. It has a job variable linking it to the relevant job, an applicant variable which links it to the candidate who applied and a date when the candidate applied.

Selected - This is the class which stores all the data related to the candidates who have been selected for a particular job post. It has a job variable linking it to the relevant job, an applicant variable which links it to the candidate who was selected and a date when the candidate was selected.

forms.py

The form consists of two forms which is used for the recruiters part of the website: NewJobForm and JobUpdateForm.

  1. NewJobForm — The purpose of this form is to enable a recruiter to post a new job.

  2. JobUpdateForm— Recruiters use this form to update an existing job post.

Scope

Structure

User Experience

User Stories

*Epic: Viewing & Navigation of the web app as a Job Seeker works as expected

  1. As a ... first time user... I can... see the home page of the website and jobs so that I can ...decide whether or not I should sign-up...
  2. As a ...first time user... I can ...easily navigate to the log in so that I can ...create a profile...
  3. As a ...first time user, as a candidate... I want to be able to... know what is expected of me on the home page so that I can ...easily navigate and find information...

*Epic: Viewing & Navigation of the web app as a Recruiter works as expected

  1. As a ...first time user... I can ...see the home page of the website and jobs... so that ...I can decide whether or not I should sign-up...
  2. As a ...first time user as a recruiter... I want to be able to ...know what is expected of me on the home page... so that I can ...easily navigate and find information...
  3. As a ...first time user... I can ...easily navigate to the log in... so that I can ...create a profile...

Agile methodology

All sprints are described here.

Features

Importance and Difficulty

Feature Difficulty Importance
Postgress databases to 5 5
store information and
user login/profile
information
:-------------------- --------------- ---------------
CRUD Functionality 5 5
:-------------------- --------------- ---------------
Admin creation and 5 5
management of Posts
:-------------------- --------------- ---------------
Ability to view all 2 5
job posts.
:-------------------- --------------- ---------------
Ability to view 2 5
job details
:-------------------- --------------- ---------------
Ability to search 2 5
for a job by title
and location
:-------------------- --------------- ---------------
Ability to apply,save 3 5
and remove job
:-------------------- --------------- ---------------
Ability to Update 3 5
Profile
:-------------------- --------------- ---------------
Ability to see Applied, 3 5
Saved Jobs
:-------------------- --------------- ---------------
Ability to see selected 3 5
rejected, in process
candidates
:-------------------- --------------- ---------------
Ability to Add and 5 5
edit a job
:-------------------- --------------- ---------------
Ability to manage 5 5
jobs and candidates
:-------------------- --------------- ---------------
Registered user can 5 5
add a job
:-------------------- --------------- ---------------
Login functionality 3 5
:-------------------- --------------- ---------------
Navigation Menu 3 5
(Site Wide)
:-------------------- --------------- ---------------
Responsive design 2 5
:-------------------- --------------- ---------------
Website title and 1 5
information on the
the site purpose
:-------------------- --------------- ---------------
Logout functionality 1 5
:-------------------- --------------- ---------------
Search functionality 3 3
:-------------------- --------------- ---------------

Future Features

This project will be maintained in the future for the purpose of a job portal. Some features that I would like to implement are listed below.

Marketing

The Colour scheme was generated using the eyedropper plugin to get one colour from the logo image and colours to create the colour palette. A simple pallette using blue and white and complimented by bootstrap colors and classes was eventually decided on.

Two complimentary fonts were chosen with Google Fonts to be used across the website.

The chosen fonts were Lato for the site.

Technologies Used

Testing

Testing is required on all features and user stories. All clickable links must redirect to the correct pages. All forms linked to the database must be tested to ensure they insert all given fields into the correct collections.

HTML Code must pass through the W3C HTML Validator. CSS Code must pass through the W3C CSS Validator.

JavaScript code must pass through the JSHint Validator.

Python Code must pass through PEP8 Validator

The website was extensively tested as it was developed using:

This project has been tested throughout its inception. Each input has been thoroughly tested to make sure that any invalid inputs are handled correctly and a response is shown to the user.

Full test results can be found here

Deployment on Heroku

This project was deployed through Heroku using the following steps:

Requirements and Procfile

Heroku needs to know which technologies are being used and any requirements, so I created files to let it know. Before creating the Heroku app, create these files using the following steps in GitPod:

Creating Heroku App

Connecting to GitHub

Environment Variables

Deploy

Config Vars Deploy

Credits

Code

Acknowledgments