Create a CV/Resume Builder using the Django Rest Framework (Part 1)
Tags: python, django, beginners, resume
Published: 2020-12-13 15:46:44

> 
### "Everything was first an idea" 
~ Laptop and the Strategic Lady

**Table of content**

1. Introduction
2. What is a CV/Resume Builder?
3. Software (Application) requirement
4. Database design (Entity-Relation diagram)
  - What is normalization?
5. Resume templates
6. What next

**Introduction**

Being a developer involves planning out one's code from start to finish. As a back end developer, a day-to-day part of the job requires understanding the software requirement (SR) or user story before beginning the actual code. 

Besides familiarity with the SR, one should also design the database with normalization in mind, as well as, all-round system interaction with each other.
These points, unfortunately, are not often discussed in tutorials.

We shall begin this tutorial series with the boring part or interesting part depending on how one sees it. Get your thinking hats on readers!

**What is a CV/Resume Builder?**

If you have needed an internship, apprenticeship, or a job then you have certainly been required to have a resume or CV (depending on the company's preference). 

You may have even used CV builders like [Visualcv](www.visualcv.com) or [Novoresume](www.novoresume.com). These are awesome tools for creating resumes.

The purpose of this application in this tutorial is to develop a working API endpoint for CV/Resume building.

Before we dive in, we should understand the user requirement for the application.

***Software (Application) requirements***

An application requirement means "*what should this application do?*". A requirement gives the developer insight into what the application is about. A software requirement describes what the end-user expects from an application, both in features and functionality.

*CV Builder Software Requirements:*
1. The user should be able to sign up.
2. The user should be able to login in.
3. The user should be able to create a resume (duh!)
4. The user should be able to edit and delete an existing resume.
5. The user should be able to select from an existing list of templates.
6. The resume should have the basic information, hence, not all fields are expected to be filled.
7. The admin should be the only entity able to create, edit, delete resume templates.

Now we have the basic idea, let's decide how the models should look and the entity relationships between them.

Ideally, we understand that a user can have more than one education history, zero or more internship history, and could have completed zero or more professional courses.

Furthermore, a resume can have links such as Twitter, Github, LinkedIn, and other social links which an employer could access in order to learn more about the candidate.
These could be optional fields.

However, we expect the resume owner to have a first and last name, an email address, a professional summary, and a job title. Referees are also a necessary part of resumes which shall be included in our resume builder. 

The Entity-relation diagram which represents our real-world models would look something like this:

<iframe width="560" height="315" src='https://dbdiagram.io/embed/5fbaa7ce3a78976d7b7cef0c'> </iframe>

PS: If you haven't tried out dbdiagram.io I recommend it.

You can observe that foreign keys (One-to-Many or Many-to-One) are used in our ER-diagram rather than the Many-To-Many relationship, this is done in order to achieve a normalized database form.

**What is Normalisation?**

A quick meaning is breaking down a large table's relationship into a smaller table so that only fields that directly depend on the "*primary key*" fields are on the same table.

The purpose of normalization is to reduce data redundancy (repetition) and insertion, update, and deletion anomalies.

Normalization is present in relational databases. Examples of relational databases are MySQL, PostgreSQL, and MariaDB.

In practice, most relational databases achieve 3rd-degree normalization. Read more about normalization in [Wikipedia](https://en.m.wikipedia.org/wiki/Database_normalization)

**Resume Templates**

One of the next things we can do is to download sample Resumes in their HTML format. You could use this free site [Super Dev Resource](https://superdevresources.com/html-resume-templates/) or if you already have some Resumes in HTML that is fine too.

Here's a resume templates I have downloaded. 
![preview.jpg](https://cdn.hashnode.com/res/hashnode/image/upload/v1606072226970/ClnaMPXt3.jpeg)
These will be added to Django templates in our app.

**What next?**

Now, we've got the first steps.
We set up our Django application in the next part.
 
####*The inspiration behind this project*  
In November, I needed to work on a project and I quickly noticed that there weren't any tutorials on creating a Resume or CV builder.

I didn't want another To-do or note application. I wanted to write a tutorial that you will find yourself and your friends using.

I hope this inspires you to build something useful😃