{"id":24315636,"url":"https://github.com/devtobi/cv","last_synced_at":"2026-04-21T11:01:37.531Z","repository":{"id":242045674,"uuid":"804518549","full_name":"devtobi/cv","owner":"devtobi","description":"My CV as a modern web application","archived":false,"fork":false,"pushed_at":"2026-04-20T06:01:52.000Z","size":5993,"stargazers_count":1,"open_issues_count":34,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-20T07:36:54.221Z","etag":null,"topics":["cv","generation","single-page-app","vue","webapp"],"latest_commit_sha":null,"homepage":"https://devtobi.de/cv/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devtobi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-05-22T18:33:37.000Z","updated_at":"2026-04-20T05:56:17.000Z","dependencies_parsed_at":"2024-06-03T21:04:12.292Z","dependency_job_id":"a9a13224-bb0b-4cad-8d75-9be5e719c18c","html_url":"https://github.com/devtobi/cv","commit_stats":null,"previous_names":["devtobi/cv"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devtobi/cv","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devtobi%2Fcv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devtobi%2Fcv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devtobi%2Fcv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devtobi%2Fcv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devtobi","download_url":"https://codeload.github.com/devtobi/cv/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devtobi%2Fcv/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32088913,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T06:27:27.065Z","status":"ssl_error","status_checked_at":"2026-04-21T06:27:21.250Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cv","generation","single-page-app","vue","webapp"],"created_at":"2025-01-17T11:18:14.372Z","updated_at":"2026-04-21T11:01:37.515Z","avatar_url":"https://github.com/devtobi.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Last commit][commit-shield]][commit-url]\n[![License][license-shield]][license-url]\n\n\u003cbr /\u003e\n\u003cdiv style=\"text-align: center;\"\u003e\n  \u003ch3\u003ecv\u003c/h3\u003e\n\n  \u003cp\u003e\n    My \u003ca href=\"https://jsonresume.org\"\u003eJSONResume\u003c/a\u003e based CV and generation with \u003ca href=\"https://github.com/rbardini/resumed\"\u003eresumed\u003c/a\u003e with interchangeable themes and support for multiple languages.\n    \u003cbr /\u003e\n    \u003cbr /\u003e\n    \u003ca href=\"https://devtobi.de/cv/\"\u003eView CV\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/devtobi/cv/issues/new/choose\"\u003eReport Bug\u003c/a\u003e\n    ·\n    \u003ca href=\"https://github.com/devtobi/cv/issues/new/choose\"\u003eRequest Feature\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n## Table of Contents\n\n- [About the Project](#about-the-project)\n  - [Built With](#built-with)\n- [Getting Started](#getting-started)\n  - [Prerequisites](#prerequisites)\n  - [Installation](#installation)\n- [Usage](#usage)\n- [Authors](#authors)\n- [License](#license)\n\n## About The Project\n\nThis project contains my CV application based on [JSONResume](https://jsonresume.org). Furthermore, variants of the CV are generated automatically as `.html` (using [resumed](https://github.com/rbardini/resumed)) and `.pdf` (using [puppeteer](https://pptr.dev/)). 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.\n\nYou can use this repository as a starting point and inspiration to write your own CV with JSONResume.\n\n**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`.\n\n### Features\n\n- Auto-generated HTML content for the CV based on [JSONResume](https://jsonresume.org) and [resumed](https://github.com/rbardini/resumed)\n- Auto-generated PDF content for the CV based on [puppeteer](https://pptr.dev/)\n- Support for thousands of themes and custom ones\n- Vue-based Single Page Application (SPA) for dynamically viewing the CV\n- Easily extensible Multi-language support\n- Dark mode support\n- Progressive Web App Support (App installation, Offline usage)\n- PWA installation notification (Chromium-based browsers only)\n- Accessibility tested\n\n### Built With\n\nThis project is built as a monorepo. Currently, it only contains the following packages\n- `cv-content`: Generation for multiple static html files using JSONSchema and resumed\n- `cv-wrapper`: Vue based SPA used as entrypoint to dynamically serve `cv-content` and provide additional features\n\nThe following lists contain the important technologies used to implement this application.\n\n#### `cv-content`:\n\n- [JSONResume](https://jsonresume.org) (to define JSON content for CV)\n- [resumed](https://github.com/rbardini/resumed) (to generate .html files of CV and validate JSON Schema)\n- [html-minifier-terser](https://github.com/terser/html-minifier-terser) (to optimize .html files)\n- [puppeteer](https://pptr.dev/) (to generate .pdf file of CV)\n- [prettier](https://prettier.io) (to format `.json` files)\n- [concurrently](https://github.com/open-cli-tools/concurrently) (to allow for parallel build execution and speed increase)\n\n#### `cv-wrapper`:\n\n- [Vue](https://vuejs.org) (JavaScript framework used to implement the application)\n- [vue-i18n](https://vue-i18n.intlify.dev) (Internationalization support for Vue)\n- [PrimeVue](https://primevue.org) (UI components library)\n- [PrimeIcons](https://github.com/primefaces/primeicons) (Icon set used for PrimeVue)\n- [PrimeFlex](https://primeflex.org) (CSS utility library)\n- [Pinia](https://pinia.vuejs.org) (State management solution for Vue)\n- [VueUse](https://vueuse.org) (Collection of useful Vue Composition API helpers)\n- [flag-icons](https://flagicons.lipis.dev) (Predefined flag icons based on ISO standard)\n\n## Getting Started\n\nTo get a local copy up and running, follow these simple steps.\n\n### Prerequisites\n\nThis project requires [Node.js](https://nodejs.org/) to run. It uses [pnpm](https://pnpm.io) to manage dependencies. You need to have both tools installed.\n\n**Info**: If you want to use `npm` as alternative to `pnpm`, just replace all commands in this guide with `npm` instead of `pnpm`.\n\n### Installation\n\n1. Clone the repository\n\n```sh\ngit clone https://github.com/devtobi/cv.git\n```\n\n2. Install dependencies\n\n```sh\npnpm install\n```\n\n3. **Optional**: Install puppeteer Chrome browser on your machine (only required `.pdf` generation)\n\n```sh\npnpm run setup\n```\n\n## Usage\n\nTo get started using this repository, you need to edit the `.json` files inside the `data` directory for your own CV.\n\n**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.\n\n**Example**: `es.json` will generate a file `index.html` under the `es` directory and thus be served under `/es/index.html`.\n\n### Local Usage\n\n**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.\n\nIf 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](https://www.npmjs.com/search?q=jsonresume-theme-).\n\nInstall your desired theme as development dependency using `pnpm install -D jsonresume-theme-*` (or `npm install -D jsonresume-theme-*`).\nThen set your theme by exporting an environment variable named `THEME` to the name of your theme (e.g. `export THEME=jsonresume-theme-basic`).\n\n**Info**: Keep in note the commands for exporting environment variables might differ depending on your operating system.\n\nTo build the whole monorepo use the command `pnpm run build`.\nThe 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.\n\n### Usage with GitHub actions\n\nThis repository provides custom workflows to validate or build and deploy your CV. You can find the workflows under `.github/workflows`.\n\nThe 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.\n\nThe 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.\n\n**Info**: As you will not change any dependencies as a normal user of this repository, you will greatly benefit from the caching mechanism.\n\nYou can set run options via the GUI for the workflow execution like:\n\n- `theme`: Theme to use for building website and/or PDF document (`jsonresume-theme-\u003ctheme\u003e`), required\n- `deploy`: Whether to deploy the website or not, default `false`\n- `node-version`: NodeJS version to use, default is `lts/*`\n- `bun-version`: Bun version to use, default is `latest`\n- `chrome-version`: Chrome version to use, default is `stable`\n\n**Note**: To deploy as GitHub Pages, you need to have it correctly configured and enabled. See GitHub documentation for more information.\n\n## Authors\n\n- **Tobias Stadler** - [devtobi](https://github.com/devtobi)\n\n## License\n\nDistributed under a customized MIT License. See [LICENSE][license-url] for more information.\n\n**Important**: The files contained in the `data` directory include personal data.\nPermission to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of these specific files is granted on the condition that users must replace\nthe personal data with their own. The files in the `data` directory must not be used\nas is without modification using their own personal data.\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n\n[license-shield]: https://img.shields.io/badge/license-MIT_(customized)-orange?style=for-the-badge\u0026logo=github\n[license-url]: https://github.com/devtobi/cv/blob/main/LICENSE\n[commit-shield]: https://img.shields.io/github/last-commit/devtobi/cv?style=for-the-badge\u0026logo=github\n[commit-url]: https://github.com/devtobi/cv/commit/main\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevtobi%2Fcv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevtobi%2Fcv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevtobi%2Fcv/lists"}