Lyhnidas Your Job Coach Repository
Xhensila Stambolliu
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.
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.
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
SignUp
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.
The default opening is on the recruiter side.
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.
Recruiter Nav after 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.
Sign Out
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.
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.
NewSkillForm — This form is used to add a new skill to the skills model class for a user.
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.
NewJobForm — The purpose of this form is to enable a recruiter to post a new job.
JobUpdateForm— Recruiters use this form to update an existing job post.
*Epic: Viewing & Navigation of the web app as a Job Seeker works as expected
EPIC: Registration & User accounts work as expected
Epic: Job Sorting & Searching work as expected
Epic: Applying & Saving Jobs work as expected
*Epic: Viewing & Navigation of the web app as a Recruiter works as expected
Epic: Job Posting & Selecting Candidates works as expected
EPIC: Site management
Sprint 1 19/03/23 - 20/03/23 (Finished at 21/03/23)
Sprint 21/03/23 - 23/03/23 (Finished on 23/03/23)
Add Recruiter app
Set up all Recruiters view
Set up recruiter details (rec_details) view
Set up add_job view
Set up edit_job
Set up job_detail
Set up all_jobs
Set up search_candidates
Set up job_candidate_search
Set up applicant_list
Set up selected_list
Set up select_applicant
Set up remove_applicant
Add Candidates app
Set up home view
Set up job_search_list
Set up job_detail
Set up saved_jobs
Set up applied_jobs
Set up my_profile
Set up edit_profile
Set up profile_view
Set up delete_skill
Set up save_job
Set up apply_job
Set up remove_job
Add Urls for Recruiters App and Candidates App
Sprint 3 23/03/23 - 26/03/23 (Finished on 26/03/23)
Sprint 4 26/03/23- 28/03/23 (finished 28/03 2023)
Sprint 5 revising the project and making neccesary fixes 29/03/23 - 31/03/23 (Finished on 31/03/23)
Responsive design.
Website title and information on the site's purpose.
Navigation Menu (Site Wide).
Postgress databases to store information and user login/profile information.
Cloudinary to store static files
CRUD Functionality
Login functionality.
Logout functionality.
Ability to view all job posts.
Ability to view job details.
Ability to be able to search for job
Ability to search job by title and location,
Ability to apply, save and remove job.
Ability to Update profile.
Ability to see applied, Saved jobs
Ability to see if a user is selected, rejected or in process for a job
Ability to add and edit of job posts.
Ability to manage applicants list and selected list
Ability to search for candidates.
Admin creation and management of job posts.
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 |
:-------------------- | --------------- | --------------- |
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.
This site has a link to Lyhnidas Social Pages (Facebook, twitter, LinkedIn and gmail adresse) with a link on the page footer.
Colours
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.
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
This project was deployed through Heroku using the following steps:
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:
pip3 freeze --local > requirements.txt
to create your requirements file.web: gunicorn jobcoach.wsgi
and make sure there is no additional blank line after it.