This is a beta build tutorial, so its structure, implementation steps, and sample code may continue to change.
Resume Components
In this chapter, we will create the main resume components.
Basic Info Component
Create src/components/BasicInfo.vue:
<template>
<section class="basic-info">
<h1>{{ name }}</h1>
<p class="title">{{ title }}</p>
<div class="contact">
<span>{{ email }}</span>
<span>{{ phone }}</span>
</div>
</section>
</template>
<script setup lang="ts">
defineProps({
name: String,
title: String,
email: String,
phone: String,
});
</script>Experience Component
Create src/components/Experience.vue:
<template>
<section class="experience">
<h2>Experience</h2>
<div v-for="job in jobs" :key="job.company" class="job">
<h3>{{ job.position }} at {{ job.company }}</h3>
<p class="date">{{ job.startDate }} - {{ job.endDate }}</p>
<ul>
<li v-for="desc in job.descriptions" :key="desc">{{ desc }}</li>
</ul>
</div>
</section>
</template>
<script setup lang="ts">
interface Job {
position: string;
company: string;
startDate: string;
endDate: string;
descriptions: string[];
}
defineProps({
jobs: Array as () => Job[],
});
</script>Education Component
Create src/components/Education.vue:
<template>
<section class="education">
<h2>Education</h2>
<div v-for="edu in schools" :key="edu.school" class="school">
<h3>{{ edu.degree }} - {{ edu.school }}</h3>
<p class="date">{{ edu.startDate }} - {{ edu.endDate }}</p>
</div>
</section>
</template>
<script setup lang="ts">
interface School {
degree: string;
school: string;
startDate: string;
endDate: string;
}
defineProps({
schools: Array as () => School[],
});
</script>Skills Component
Create src/components/Skills.vue:
<template>
<section class="skills">
<h2>Skills</h2>
<div class="badges">
<span v-for="skill in skills" :key="skill" class="badge">{{ skill }}</span>
</div>
</section>
</template>
<script setup lang="ts">
defineProps({
skills: Array as () => string[],
});
</script>Next Steps
In the next chapter, we will learn how to generate PDF from the resume.