Skip to content

Repository files navigation

ResumeWriter

Tailors your LaTeX resume to a job description using a two-pass LLM pipeline. Outputs a 1-page PDF with bullets rewritten to mirror exact JD language.

How it works

  1. Scrapes the job description (URL, .txt, or inline text)
  2. Pass 1 : LLM extracts required skills and key terms from the JD
  3. Pass 2 : LLM rewrites every bullet in XYZ format using those terms
  4. Compiles LaTeX → PDF; trims spacing and cuts bullets until exactly 1 page
  5. Saves output to outputs/YYYY-MM-DD_<company>/ : source resume never touched

Quick start

git clone https://github.com/Micsushi/ResumeWriter.git
cd ResumeWriter
pip install -r requirements.txt
cp .env.example .env        # add OLLAMA_HOST and/or GEMINI_API_KEY
# From a URL
python resume_writer/main.py resume.tex --jd https://jobs.example.com/123

# From a file
python resume_writer/main.py resume.tex --jd job.txt

# Use Gemini instead of Ollama
python resume_writer/main.py resume.tex --jd job.txt --api gemini

LLM backends

Flag Model Requires
(default) qwen3:8b via Ollama OLLAMA_HOST in .env
--api gemini gemini-2.5-flash GEMINI_API_KEY in .env

Dev commands

make fix      # lint + format fixes, then tests
make check    # lint + format check only (no fixes) : same as CI
make test     # tests only

Linux server setup

bash scripts/setup_linux.sh   # installs Python, texlive, poppler, pulls qwen3:8b

See docs/setup.md for full setup and docs/plan.md for the build phases.

Part of a larger pipeline

[Ansible]      → provisions Linux server + Ollama
[Job scraper]  → populates jobs.db every 10 min
[ResumeWriter] → reads job, outputs targeted PDF
[Agent]        → submits application

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages