Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Resume Tailor

A local, multi-provider AI resume-tailoring tool. Paste a job description and it generates a tailored resume, an ATS optimization report, and an optional cover letter — with your real contact details and honest experience preserved (it never fabricates skills or experience).

Privacy note: This project contains no hardcoded API keys and no personal data. API keys are read from environment variables at runtime, and all generated output (your resumes, job history, cached config) is git-ignored. The only placeholder left in the source is [Your Full Name] in the cover-letter template — supply your own when you run it.

Features

  • Multi-provider AI — DeepSeek, Anthropic (Claude), or OpenRouter.
  • Live model discovery — the GUI auto-populates the model list from each provider's API (with pricing + context-window info) and caches it for 24h.
  • CLI + GUI — a tailor.sh quick launcher and a Gradio web UI (server.sh).
  • Fit analysis gate — optionally scores how well your resume matches a posting before spending tokens tailoring it.
  • ATS notes — a keyword/match-strength optimization report per application.
  • PDF export — Markdown → PDF via WeasyPrint (no pandoc/LaTeX required).
  • Application tracker — a dashboard + status JSON over your jobs/ folders.
  • Full test suitepytest.

Requirements

  • Python 3.10+
  • pip (a venv is recommended)
  • Network access to your chosen provider's API
  • An API key for at least one provider (set via environment variable)

Installation

# 1. Clone
git clone <your-fork-url> resume-tailor
cd resume-tailor

# 2. Create & activate a virtual environment
python3 -m venv venv
source venv/bin/activate          # Windows: venv\Scripts\activate

# 3. Install dependencies
pip install -r requirements.txt

# 4. Add your base resume (see "Your resume" below)

API keys

Keys are never stored in files — they are read from environment variables at launch. Add them to your shell profile (~/.bashrc, ~/.zshrc, etc.) and reload:

export DEEPSEEK_API_KEY="sk-..."
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENROUTER_API_KEY="sk-or-..."

You only need one provider's key to use the app. To load-balance across several keys, provide them comma-separated:

export DEEPSEEK_API_KEY="sk-a,sk-b,sk-c"

Your resume

The app reads a Markdown resume from base_resumes/<language>/. This folder is git-ignored so your real resume never leaves your machine. Drop your file there:

base_resumes/
  english/
    my-resume.md        # your real resume (NOT committed)
  portuguese/
    meu-curriculo.md    # optional

A base_resumes/README.md template is included to show the expected format and the [Your Full Name] / contact-header convention. The first .md found in the chosen language folder is used unless you pass --resume.

Usage

CLI

# Tailor a resume from a job-description file
python -m src.tailor_resume -j path/to/job-description.txt -l english -p openrouter

# Piped / pasted description
echo '<job description>' | ./tailor.sh

# Also export a PDF
python -m src.tailor_resume -j posting.txt --pdf

GUI (Gradio web app)

./server.sh start      # start at http://localhost:7860
./server.sh status     # is it running?
./server.sh stop       # stop it
./server.sh restart    # restart

./start-gui.sh is a thin alias to server.sh.

Sample job description

test-job.txt is a generic sample posting you can run immediately to try the CLI:

python -m src.tailor_resume -j test-job.txt -l english -p openrouter

Tests

pytest                 # runs the full suite

Project structure

resume-tailor/
├── config/
│   └── settings.py          # provider registry, models, prompts (edit here)
├── src/
│   ├── tailor_resume.py     # CLI entry point
│   ├── models.py            # AI provider classes (DeepSeek/Claude/OpenRouter)
│   ├── model_discovery.py   # live model-list fetch + cache
│   ├── utils.py             # file I/O, PDF export, job-info extraction
│   ├── gui.py               # Gradio web UI
│   └── dashboard.py         # application tracker
├── tests/                   # pytest suite
├── requirements.txt
├── server.sh / start-gui.sh / tailor.sh
├── base_resumes/            # YOUR resume (git-ignored)
├── jobs/                    # generated output (git-ignored)
└── data/                    # runtime cache (git-ignored)

Configuration

Most behaviour is centralized in config/settings.py (provider defaults, model ids, system prompts, pricing, temperature). Edit there first.

License

No license file is included yet. If you intend to publish this, add a LICENSE (e.g. MIT) before making the repo public.

About

AI resume & cover-letter tailor (OpenAI/Anthropic/DeepSeek) with a Gradio GUI and CLI

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages