Skip to content

A minimalistic resume template built using Vue 3 (Composition API) and Bootstrap 5.0.

Notifications You must be signed in to change notification settings

ryanbalieiro/vue-resume-template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Vue Resume Template by Ryan Balieiro

This theme has a simple and clean layout designed for creating user-friendly resumes or CV landing pages. It's built using Vue 3.0 (Composition API) and Bootstrap 5, presenting a cohesive one-page layout that blends functionality and aesthetics.

Key features:

  • A handy fixed side navigation bar that lets you easily scroll through the different sections of your resume.
  • Six unique section layouts to showcase your work experience, education, skills, portfolio, and more.
  • An alternative navigation mode designed just for mobile screens.
  • Multi-language translation support included.
  • Using Vite for faster build times and better integration.

Status

GitHub license npm version

Preview

Check out a live version of the template here.

1. Desktop Screenshots

alt desktop

2. Mobile Screenshots

alt mobile

Getting Started

  1. Clone the repo:
git clone https://github.com/ryanbalieiro/vue-resume-template
  1. Go to the root directory of the project and install all dependencies with npm:
npm install
  1. Run the project in developer mode:
npm run dev
  1. To temporarily deactivate the preload animation during theme adjustments, go to public/data/settings.json and modify the following field:
 "preloaderEnabled": false

Template Customization

1. Changing the content

All the app's content, like texts and images, is stored in the public/ folder. Inside, you’ll find two key directories:

  • public/data ➔ This is where all the data JSON files are stored, containing the full content of the app.
  • public/images➔ Here, you’ll find the icons and photos that the app uses.

You can easily customize the app’s content by updating the data in these two folders to match your preferences.

2. Quickly customizing the colors

Adjusting the theme colors can be done quickly by editing the variables found in src/scss/_variables.scss. To illustrate, a variation of the theme featuring shades of green can be created by modifying the following variables:

$primary: #13a452; /** changing the 'primary' color to green **/
$dark: #021307; /** changing the 'dark' color to a dark shade of green **/
$background-color: #f8fff8; 

Resulting in:

alt green

3. Adding and removing languages

To add or remove languages, open public/data/settings.json and modify the supportedLanguages field as needed. Use the default property to specify the fallback language that should be used if the application doesn't support the user's preferred language.

{
    "supportedLanguages": [
        {
            "name": "English",
            "id": "en",
            "flagUrl": "images/flags/en.png",
            "default": true
        },

        {
            "name": "日本語",
            "id": "ja",
            "flagUrl": "images/flags/ja.png"
        }
    ]
}

The public/images/flags/ folder already contains a collection of flags for commonly used languages. If you require a specific flag icon that isn't there, you can download it at no cost from this source.

To deactivate support for multiple languages, keep only a single language within the array. This will automatically hide the language picker menu.

4. Adding, removing and reordering sections

Inside the public/data/sections.json file, you will find two arrays: one for sections and the other for categories. Every section should be linked to a corresponding category. These categories are used in grouping sections within the mobile navigation.

Adding, removing or reordering the portfolio sections and categories can be achieved by making modifications to these arrays as needed.

For localizing the section and category titles, ensure that the id of each section and category has a corresponding translation in public/data/strings.json.

public/data/strings.json

{
    "en": {
        "section1_id": "Section 1 ID",
        "section2_id": "Section 2 ID",
        "section3_id": "Section 3 ID"
    },
    
    "ja": {
        "section1_id": "セクション1 ID",
        "section2_id": "セクション2 ID",
        "section3_id": "セクション3 ID"
    }
}

5. Customizing a section

Each section entry in public/data/sections.json comprises the following fields:

{
    "id": "experience",
    "categoryId": "background",
    "component": "TimelineSection",
    "jsonPath": "data/sections/experience.json",
    "faIcon": "fa-solid fa-briefcase"
}
  • id ➔ A unique identifier for the section, also used as a key to fetch the section's name within strings.json
  • categoryId ➔ Specifies the category to which the section belongs (used for grouping sections in the mobile navigation).
  • component ➔ Indicates the Vue component responsible for rendering the section.
  • jsonPath ➔ A reference pointing to the JSON file containing the section's content.
  • faIcon ➔ The FontAwesome icon associated with the section.

To modify the content of a section, open and edit its respective JSON file. Keep in mind that each Vue component may require a specific JSON structure. For proper structuring of section JSON files, refer to the existing ones as a guide.

6. Localizing fields

To stay in line with the project's guidelines, put the translations for your static texts into the public/data/strings.json file. This file acts as a hub for all your global localization needs. For section and component-specific content, create a locales field to encapsulate the corresponding translations.

Each localizable object adheres to the following structure:

{
    "locales": {
        "en": {
            "hello": "Hello!",
            "age: "Age"
        },
        
        "es": {
            "hello": "Hola!",
            "age": "Edad"
        },
        
        (...)
    }
}

7. Adding functionality to the contact form

Making the contact form functional requires the creation of your own server-side implementation within the ContactForm.vue file. Please note that the current template only includes the client-side implementation, accompanied by a simulated delay using a placeholder timeout to mimic the waiting period for requests:

const _sendMessage = (values) => {
    const feedbackView = layout.getFeedbackView()
    feedbackView.showActivitySpinner(data.getString("sendingMessage") + "...")
    submitAttempts++

    /** The message sending logic goes here... **/
    //setTimeout(() => {
    //    if(submitAttempts % 2 !== 0) {
    //        _onMessageSent()
    //    }
    //    else {
    //        _onMessageError()
    //    }
    //}, 1000)
    /** ************************************** **/
}

To disable the contact form, open public/data/settings.json and set the contactFormEnabled flag to false:

 "contactFormEnabled": false

8. Making the sidebar shrinkable

If you want to give users the option to shrink or expand the sidebar on larger screens, just head over to public/data/settings.json and set the sidebarShrinkingEnabled flag to true.

 "sidebarShrinkingEnabled": true

Now, a handy toggle button will appear in the top left corner of the sidebar, letting the user switch between an expanded and compressed view.

Building for production

Open the vite.config.js file and set the base directory for your application. This setting defines the main path that your website will be hosted under.

export default defineConfig({
  base: '/vue-resume-template/',
  plugins: [vue()],
})

In simple terms, if you consider GitHub hosting the GitHub Pages site for this repo at the URL https://ryanbalieiro.github.io/vue-resume-template/, the correct base directory to set is /vue-resume-template/.

If you're deploying to Netlify or your own custom domain where your website is located at the root, you can leave the base setting as '/'.

To compile your project for production, execute:

npm run build

This command triggers a series of processes that package your code, assets, and other necessary files, ultimately creating a production-ready version of your project. After running the command, you'll find the compiled files within the dist folder. This is the folder you should use for deploying your application to a live server or hosting platform.

If you’re deploying to GitHub Pages, make sure to run this custom command after the build process:

npm run deploy

This step serves as a solution to the problem discussed in detail at https://stackoverflow.com/questions/48521177/404-when-reloading-a-vue-website-published-to-github-pages. This command will create a 404.html file as a copy of index.html, so when users access a secondary route (like /education or /skills), it will redirect them to the Vue App instead of GitHub's default 404 page.

About

This template was created by and is maintained by Ryan Balieiro.

It's based on the Bootstrap framework created by Mark Otto and Jacob Thorton; and the Vue framework created by Evan You.

Copyright and License

Code released under the MIT license, providing complete freedom for utilization. Feel free to enhance and adapt it to suit your needs.

About

A minimalistic resume template built using Vue 3 (Composition API) and Bootstrap 5.0.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published