My JSONResume based CV and generation with resumed with interchangeable themes and support for multiple languages.
    
    
    View CV
    ·
    Report Bug
    ·
    Request Feature
  
This project contains my CV application based on JSONResume. Furthermore, variants of the CV are generated automatically as .html (using resumed) and .pdf (using puppeteer). Tons of themes are supported. Custom build scripts allow generation for multiple languages (which is a missing feature in JSONSchema itself). Deployment is automated using GitHub Actions to GitHub Pages.
You can use this repository as a starting point and inspiration to write your own CV with JSONResume.
Notice: However, please provide your own json files and do not reuse my files without modification as those contain personal information as described in the LICENSE.
- Auto-generated HTML content for the CV based on JSONResume and resumed
- Auto-generated PDF content for the CV based on puppeteer
- Support for thousands of themes and custom ones
- Vue-based Single Page Application (SPA) for dynamically viewing the CV
- Easily extensible Multi-language support
- Dark mode support
- Progressive Web App Support (App installation, Offline usage)
- PWA installation notification (Chromium-based browsers only)
- Accessibility tested
This project is built as a monorepo. Currently, it only contains the following packages
- cv-content: Generation for multiple static html files using JSONSchema and resumed
- cv-wrapper: Vue based SPA used as entrypoint to dynamically serve- cv-contentand provide additional features
The following lists contain the important technologies used to implement this application.
- JSONResume (to define JSON content for CV)
- resumed (to generate .html files of CV and validate JSON Schema)
- html-minifier-terser (to optimize .html files)
- puppeteer (to generate .pdf file of CV)
- prettier (to format .jsonfiles)
- concurrently (to allow for parallel build execution and speed increase)
- Vue (JavaScript framework used to implement the application)
- vue-i18n (Internationalization support for Vue)
- PrimeVue (UI components library)
- PrimeIcons (Icon set used for PrimeVue)
- PrimeFlex (CSS utility library)
- Pinia (State management solution for Vue)
- VueUse (Collection of useful Vue Composition API helpers)
- flag-icons (Predefined flag icons based on ISO standard)
To get a local copy up and running, follow these simple steps.
This project requires Node.js to run. It uses pnpm to manage dependencies. You need to have both tools installed.
Info: If you want to use npm as alternative to pnpm, just replace all commands in this guide with npm instead of pnpm.
- Clone the repository
git clone https://github.com/devtobi/cv.git- Install dependencies
pnpm install- Optional: Install puppeteer Chrome browser on your machine (only required .pdfgeneration)
pnpm run setupTo get started using this repository, you need to edit the .json files inside the data directory for your own CV.
Tip: Each file represents the data for generation a CV in a specific language. You can create as many .json files as you want. The build tools will automatically handle them. Keep in mind that the filename is used as a path inside the generated assets for web deployment.
Example: es.json will generate a file index.html under the es directory and thus be served under /es/index.html.
Info: Please note your .json files need to be written in JSONResume schema. You can use pnpm run format to format your files and pnpm run validate to check if your edits are valid, according to JSONResume.
If you want to build your CV locally, you need to install a theme onto your system, as this repository does not come with one by default. Themes are published as npm packages in the format jsonresume-theme-*. Take a look at the available themes here.
Install your desired theme as development dependency using pnpm install -D jsonresume-theme-* (or npm install -D jsonresume-theme-*).
Then set your theme by exporting an environment variable named THEME to the name of your theme (e.g. export THEME=jsonresume-theme-basic).
Info: Keep in note the commands for exporting environment variables might differ depending on your operating system.
To build the whole monorepo use the command pnpm run build.
The command builds an .html version and a .pdf version and places those files into specific subdirectories for each language your CV was written in. On top of that, it builds the Vue based wrapper application. In the end both build folders are combined into a single dist folder. This folder can be served as is.
This repository provides custom workflows to validate or build and deploy your CV. You can find the workflows under .github/workflows.
The validation will run on every push to any branch. Build and deployment can only be triggered on your main branch via a manual trigger through the GitHub Actions GUI.
The workflows use a custom action to set up required tooling for running inside CI/CD environments. It uses caching to speed up execution time when no changes inside pnpm-lock.yaml were found.
Info: As you will not change any dependencies as a normal user of this repository, you will greatly benefit from the caching mechanism.
You can set run options via the GUI for the workflow execution like:
- theme: Theme to use for building website and/or PDF document (- jsonresume-theme-<theme>), required
- deploy: Whether to deploy the website or not, default- false
- node-version: NodeJS version to use, default is- lts/*
- bun-version: Bun version to use, default is- latest
- chrome-version: Chrome version to use, default is- stable
Note: To deploy as GitHub Pages, you need to have it correctly configured and enabled. See GitHub documentation for more information.
- Tobias Stadler - devtobi
Distributed under a customized MIT License. See LICENSE for more information.
Important: The files contained in the data directory include personal data.
Permission to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of these specific files is granted on the condition that users must replace
the personal data with their own. The files in the data directory must not be used
as is without modification using their own personal data.