A monorepo containing multiple applications for CV generation using a common markdown format. This project allows you to manage your CV in markdown and generate beautiful PDFs across different platforms.
.
├── apps/
│ ├── components/ # Shared React components for CV rendering
│ ├── web/ # Web application (Next.js)
│ ├── obsidian/ # Obsidian plugin
│ └── vscode/ # VSCode extension (coming soon)
A Next.js application that provides a web interface for editing and previewing your CV.
A plugin for Obsidian that allows you to manage and preview your CV directly within your vault.
- Node.js >= 10
- pnpm >= 9
pnpm installpnpm devTo develop the Obsidian plugin, you need to create a symbolic link to your Obsidian plugins directory:
ln -s <project-path>/apps/obsidian <obsidian-vault-path>/.obsidian/plugins/thecap-cv-generatorThen, start the Obsidian plugin development server:
pnpm dev:obsidianThe CV format follows a specific structure that maps to our type definitions. Here's a detailed breakdown:
Properties are defined at the top of the file and will be used for metadata and filtering (future feature):
---
title: Title property
year: 2025
favorite: true
tags:
- CV
- Curriculum Vitae
- Resume
---The contact section starts with an H1 heading containing your name, followed by a list of contact details. This maps to the ContactInfo type:
# McLOVIN
- title: Quantum Blockchain Architect
- Phone: +1 (808) 555-0111
- Email: mclovin@hawaii.gov
- Location: Honolulu, HI
- LinkedIn: linkedin.com/in/mclovin-hawaii
- GitHub: github.com/thereal-mclovinEach section of your CV is structured as follows:
- Section Title: Uses H2 heading (##)
- Items: Can have up to 4 components:
primary: H3 headingprimaryRight: After the | symbol in H3secondary: H4 headingsecondaryRight: After the | symbol in H4details: Bullet points under each item
Example section:
## PROFESSIONAL EXPERIENCE
### Superbad Security Inc. | Remote
#### Chief Identity Officer | 2007 - Present
- Developed revolutionary age verification algorithms
- Led a team of undercover developersMaps to:
{
title: "PROFESSIONAL EXPERIENCE",
items: [{
primary: "Superbad Security Inc.",
primaryRight: "Remote",
secondary: "Chief Identity Officer",
secondaryRight: "2007 - Present",
details: [
"Developed revolutionary age verification algorithms",
"Led a team of undercover developers"
]
}]
}To force a page break before a section, add \break to the section title:
## CERTIFICATIONS \breakFor a complete example, check apps/web/src/data/default.md.
This project is licensed under the GNU General Public License v3.0 (GPL-3.0) - see the LICENSE file for details.
What this means:
- ✔️ You can use this software for commercial purposes
- ✔️ You can modify the source code
- ✔️ You can distribute modified versions
- ❗ You must keep the source code open source
- ❗ You must state changes made to the code
- ❗ You must disclose your source code
- ❗ You must use the same license (GPL-3.0)