Writing a Resume isn't easy, and doing it in Word isn't fun. So html and css make it easy. React and Tailwindcss make it even easier and enjoyable.
At localhost:3000/ is your Resume, open src/app/page.tsx and change the layout, move things around.
At localhost:3000/cover-letter is your cover letter
- src/app/cover-letter/layout.tsx contain the header, it uses the same
TitleandContactcomponents of youResume. - src/app/cover-letter/page.tsx is the letter content.
IMPORTANT!: I'm using the premise that resume should have one page. You can change src/app/globals.css with a percentage that works better for you. I'm using 83%, and I think it should not be bellow 80%.
:root {
font-size: 83%;
}
Replace my avatar public/avatar.jpg and remember to keep it small.
Avatar should be around 50KB, otherwise the PDF will be big.
Turn off avatar in the src/data/config.ts
export const config = {
avatar: false,
};
Your name and position your are applying.
export const titleData = {
name: "Rafael Ricardo Vieceli",
headline: "Fullstack developer",
};
> Remember, you are a dev, you can move it around.
Your introduction
export const profileData: Paragraph[] = [
{
type: "paragraph",
value: "Experienced FullStack Developer with...",
},
];I used the concept of some text editors. You can look how it is rendered in the Content component.
I'm working on a better way to add log texts
Your contacts, phone, email, github, linkedin and more.
Current we have 4 types of contacts
interface BaseContact {
type: "phone" | "text" | "email";
icon: IconDefinition;
value: string;
}
interface LinkContact extends Omit<BaseContact, "type"> {
type: "link";
href: string;
}
export const contactData: ContactType[] = [
{
type: "email",
icon: faSquareEnvelope,
value: "your_email_@gmail.com",
},
{
type: "phone",
icon: faSquarePhone,
value: "your phone number",
},
{
type: "link",
icon: faSquareGithub,
value: "github.com/rvieceli",
href: "https://github.com/rvieceli",
},
];Why? I added link for everything, Email has href=mailto:email and phone has href=tel:+1..
You can look how it is rendered in the ContactItem component.
If you want to add something else, like Instagram
import {
faSquareGithub,
faLinkedin,
faInstagram, // << here
} from "@fortawesome/free-brands-svg-icons";and then add it to profile.data.ts
export const contactData: ContactType[] = [
...,
{
type: "link",
icon: faInstagram,
value: "instagram/rvieceli",
href: "https://www.instagram.com/rvieceli",
},
]
This details are like contact, but they're hard to describe with an icon, So it is a Label/Value list.
Open src/data/personal-details.data.ts
export const personalDetailsData: LabelValue[] = [
{
label: "Nationality",
value: "Brazilian, Italian",
},
{
label: "Location",
value: "Ivrea, Italy",
},
];Nationality is relevant since I can work in Europe without a visa. But you can leave it empty and it will be hidden.
Languages you speak, for an international position is a must have.
Open src/data/languages.data.ts
export const languagesData: Language[] = [
{
language: "Portuguese",
level: "native",
},
{
language: "English",
level: "advanced",
},
];You can leave it empty and it will be hidden.
It's all of your skills, an array of string.
export const skillsData: string[] = [
"JavaScript",
"TypeScript",
"AWS",
"React",
"React Native",
"GraphQL",
"Node.js",
...
]It could get from work experience and filter duplications, but You can remove or add something as need. You can leave it empty and it will be hidden.
Certifications has 3 relevant information, name, year (because it expires) and the credentialUrl, people might want to check.
Open src/data/certifications.data.ts
export const certificationsData: Certification[] = [
{
name: "AWS Certified Cloud Practitioner",
year: "2023",
credentialUrl:
"https://www.credly.com/badges/f3853a19-e3a9-4880-9d04-0eff8aeddf2d/public_url",
},
];You can leave it empty and it will be hidden.
Open src/data/work-experience.data.ts
Each work experience is divided is two parts, header (title, company and period) and optional details (details).
export interface Company {
name: string;
url: string;
}
export interface Period {
start: string;
end?: string;
}
export interface Position {
title: string;
company: Company;
period: Period;
details?: Content[];
}This an example.
export const workExperienceData: Position[] = [
{
title: "FULLSTACK SOFTWARE DEVELOPER",
company: {
name: "FOODBARRIO, Switzerland (part-time, remote)",
url: "https://foodbarrio.com/en/",
},
period: {
start: "Jul 2023",
},
},
{
title: "SENIOR FULLSTACK SOFTWARE DEVELOPER",
company: {
name: "HYPERTING, Italy (remote)",
url: "https://www.hyperting.com/",
},
period: {
start: "May 2022",
end: "Apr 2023",
},
details: [
{
type: "paragraph",
value: "Worked on a software house",
},
{
type: "list",
items: ["Item 1;", "Item 2;"],
},
{
type: "tags",
items: ["React", "Node.JS", "TypeScript"],
},
],
},
];You can look how it is rendered in the WorkExperienceItem and Content component.
content can be ordered as you want, you can add tags first, or you can just use a list. There is no rules here. You can leave it empty and it will be hidden.
It's similar to Work Experiences.
Open src/data/education.data.ts
The differences area school (replacing company) and period.end that is required (add the future date, like LinkedIn)
export interface School {
name: string;
url?: string;
}
export interface Period {
start: string;
end: string; // future date if in progress
}
export interface Education {
degree: string;
school: School;
period: Period;
details?: Content[];
}And here is an example:
export const educationData: Education[] = [
{
degree: "Bachelor of Technology Management",
school: {
name: "FAEC INESUL, Brazil",
},
period: {
start: "2007",
end: "2019",
},
details: [
{
type: "paragraph",
value: "I've studied a lot.",
},
{
type: "tags",
items: ["Networking"],
},
],
},
];You can rename the Education component as
Coursesor duplicate it. You can leave it empty and it will be hidden.
I add a config to change highlight color and toggle avatar.
Open src/data/config.ts
export const config = {
avatar: false,
highlight_color: {
bg: "bg-blue-700", // bg-[#00f] for arbitrary color}
text: "text-blue-700", // text-[#00f] for arbitrary color}
},
};
When you print, you can set A4 or Letter.
Set Margins to None
Disable Print headers and footers
Enable Print backgrounds
The save as PDF, in this way all links will work fine.
To get a local copy up and running, please follow these simple steps.
Here is what you need to be able to run Next-Resume
- Node.js (Version: >=18.x)
- Npm
- Repository is a
template, just .
Click on
Use this templateand thenCreate a new repository
Add an available name and use it asPrivate, You might want to addphone.
-
Then you can clone in your local computer or use
codespaces. -
Install packages with yarn
npm install
-
Run
npm run dev

