A tool for generating professional resumes and cover letters in PDF and HTML
formats. When an OPENAI_API_KEY
🔑 environment variable is present the resume
content can be automatically tailored to a specific job description via
OpenAI's API. Without the key the tool simply renders the provided content.
- Generate professional resumes with a consistent, two-page layout
- Generate matching cover letters
- Produce both PDF and HTML output formats
- Customize content via TOML resume document
- Support for multiple profiles/people
- Optional AI-powered customization of resume content based on a job
description when
OPENAI_API_KEY
is set - Job-specific output filenames keep your applications tidy
- Python 3.8+
- Pipenv for dependency management
-
Clone this repository
-
Install dependencies with pipenv:
pipenv install --dev
-
Create your personal resume content document:
cp resume-sample.toml resume.toml
-
Edit the
resume.toml
file with your personal information, work experience, and other resume details.
When running scripts or commands, ensure that the PYTHONPATH is set to include the src
directory. This ensures that the cvgenai
module can be correctly located and imported.
Generate both resume and cover letter (PDF only):
./run.sh
Set the OPENAI_API_KEY
environment variable to enable AI customization 🤖. If
the variable is unset the generator runs in pass-through mode and simply renders
the provided content.
Run all tests (this will install the package first):
./test.sh
Skip the package installation and only run tests:
./test.sh -t
Option | Description |
---|---|
--resume |
Generate only the resume |
--cover-letter |
Generate only the cover letter |
--html |
Generate HTML versions in addition to PDFs |
--job PATH |
Job description used for AI customization |
--content PATH |
Specify an alternative resume content file (default: resume.toml ) |
Generate only the resume:
run.sh --resume
Generate both resume and cover letter with HTML versions:
run.sh --resume --cover-letter --html
Customize the resume for a specific role:
run.sh --job example_job.txt
Generated files will use the job file name so you can keep results organized 📚.
Use an alternate content file:
run.sh --content my-other-resume.toml
resume.toml
: Your personal resume and cover letter informationsrc/cvgenai/
: Main packagecli.py
: Command-line interfacecontroller.py
: Coordinates the generation workflowcareer.py
: Loads and stores resume datafactory.py
: Creates services and generators based onapp_config.toml
generate.py
: Document generator implementationsdocument.py
: Abstractions for resume and cover letter documentsconfig.py
: TOML configuration loaderservices/
: File, HTML, PDF and customization servicestemplating/
: Jinja template rendering helper
templates/
: Contains HTML templates and CSS stylescover_letter_template.html
: Template for cover lettersresume_page1_template.html
: Template for resume page 1resume_page2_template.html
: Template for resume page 2style.css
: Styling for all documents
output/
: Where generated files are saved[name]_[job]_resume.pdf
: Complete resume (both pages combined)[name]_[job]_cover_letter.pdf
: Cover letter- When
--html
is used:[name]_[job]_resume_page1.html
: HTML for first page of the resume[name]_[job]_resume_page2.html
: HTML for second page of the resume[name]_[job]_cover_letter.html
: HTML version of the cover letterstyle.css
: Copy of the CSS file used
diagrams/
: UML diagrams describing the architecturetests/
: Pytest suite
You can modify the templates in the templates/
directory to customize the appearance of your resume and cover letter. The templates use Jinja2 syntax.
Edit the templates/style.css
file to customize the styling of your documents.
The resume.toml
file contains all the content for your resume and cover letter. You can create multiple content files for different job applications, different roles, or different people.
Thanks to the SOLID architecture, you can easily extend the project:
- Add new document types: Create a new class that extends the
Document
base class - Add new output formats: Create a new service class and implement the appropriate interface
- Change the templating engine: Create a new class that implements the
ITemplateRenderer
interface
- Keep each bullet point in your experience and education sections concise for better formatting
- Use the
--html
option during development to quickly preview changes in a web browser - Create multiple content files for different job applications (e.g.,
resume-dev.toml
,resume-manager.toml
) - For multiple people, use separate content files and specify with
--content