Skip to content

A small pipeline to generate tailored résumés and cover letters using OpenAI models. It ingests existing CVs, extracts structured data into JSON databases, and generates professional outputs in text, Markdown, or PDF formats.

License

Notifications You must be signed in to change notification settings

cordeecorce-creator/resume-maker-openai

Repository files navigation

Résumé Maker

A small pipeline to generate tailored résumés and cover letters using OpenAI models.
It ingests existing CVs, extracts structured data into JSON databases, and generates professional outputs in text, Markdown, or PDF formats.

⚠️ NO PRIVACY CONCERNS IMPLEMENTED, SCRIPT WILL SEND ALL INGESTED DATA TO OPENAI ⚠️

N.B.: The code right now is a mixed billingual codebase but the outputs are in french, prompt modifications in the code will correct this for you.


Project Layout

.
├── generate.py           # interactive generator for résumé / cover letter
├── build-letter-db.py    # extracts structured letter database (JSON)
├── build-resume-db.py    # extracts structured résumé database (JSON)
├── requirements.txt      # Python dependencies
├── .env                  # where you place your openai api key
├── data/                 # where validated JSON DBs are stored
├── ingest/               # input CVs (txt, md, pdf, docx)
│   ├── sample-1.txt      # example CV
│   └── sample-2.md       # example CV
├── output/               # generated résumés / letters
├── prompts/              # LLM prompts for résumé and cover letter
└── specs/                # JSON schemas
    ├── letter-db-schema.json
    └── resume-db-schema.json

Setup

  1. Clone the repo and enter the directory

    git clone <your-repo-url>
    cd resume-maker
  2. Install dependencies

    python3 -m venv venv
    source venv/bin/activate
    pip install -r requirements.txt
  3. Set your API key
    Rename .env.sample to .env and place your API key

    OPENAI_API_KEY=sk-xxxxx
    

Usage

Step 1: Build résumé database

This reads all files from ingest/ (supports .txt, .md, .pdf, .docx), extracts text, runs through the LLM, validates against the schema, and writes JSON to data/resume-db.json.

python3 build_resume_db.py

Step 2: Build letter database

Build/infer a base of motivations, values, and writing style for cover letters:

python3 build_letter_db.py

This creates data/letter-db.json.

Step 3: Generate documents

This is the interactive step where you create tailored résumés and cover letters.

Run:

python3 generate.py

You’ll be guided through:

  1. Enter job info

    • Job title
    • Employer
    • (Optional) short description of the role
  2. Draft generation

    • The tool generates a résumé (and optionally a cover letter) using the structured data from data/.
    • The draft is shown in the terminal.
  3. Interactive review & refinement

    • Type yes to accept the draft.
    • Or type feedback (e.g. “make it shorter”, “add more detail on web experience”), and a new draft will be generated.
    • You can repeat this loop until satisfied.
  4. Choose export format(s)

    • When you accept a draft, you’ll be asked which formats to export:
      • txt (plain text)
      • md (Markdown)
      • pdf (print-ready, with headings, bullet lists, and clean typography)
    • You can select multiple, comma-separated (e.g. pdf, md).

⚠️ Note: Steps 1 and 2 only need to be done when ingest/ has new CVs. If nothing has changed there, you can skip directly to step 3.

Output

  • All generated files are saved to output/
  • Filenames follow this pattern:
    <slugified-job-title>-<resume|cover-letter>-<timestamp>.<fmt>
    

For example:

web-developer-résumé-2025-10-21_12-30-45.pdf
web-developer-cover-letter-2025-10-21_12-32-01.pdf

About

A small pipeline to generate tailored résumés and cover letters using OpenAI models. It ingests existing CVs, extracts structured data into JSON databases, and generates professional outputs in text, Markdown, or PDF formats.

Topics

Resources

License

Stars

Watchers

Forks

Languages