AI-Powered Resume Builder - Polish, tailor, and optimize your resume locally
Project description
BT Resume
A free, local AI resume helper that polishes your resume bullets, tailors your resume to job descriptions, and formats new experience — all running privately on your own machine. No API keys, no subscriptions, no data leaving your device.
Quick Start
Prerequisites
- Python 3.10+ — Download Python
- Ollama — Download from ollama.com (handled automatically on first run)
Install & Run
pip install btr-resume
btr serve
That's it. Your browser opens to http://localhost:5000 with the BT Resume web UI.
First run:
btr servewill automatically attempt to start Ollama and download the Mistral 7B model (~4.1GB). If Ollama is not installed, you'll be prompted to install it from ollama.com.
Why BT Resume?
Most AI resume tools cost money, require an account, or send your personal data to external servers. This is my take on a free alternative — built from scratch in Python + React, powered by open-source LLMs that run entirely on your device.
Features
- Bullet Polish — rewrites weak resume bullets into strong, ATS-optimized ones using proven resume writing formulas
- Job Tailoring — aligns your resume language and keywords to match a specific job description without changing your real experience
- Experience Updater — describe a new project or role in plain English and get polished, formatted resume bullets back
- Resume Grading — get scores and feedback on your resume's effectiveness
- PDF + TXT input — works with both plain text and real PDF resumes
- PDF output — generates a clean, formatted PDF resume ready to send
- 100% offline — no internet connection required after setup, no API keys, completely free
Commands
| Command | Description |
|---|---|
btr serve |
Start the server and open the browser (same as plain btr) |
btr |
Start the server and open the browser |
btr setup |
Manual setup: install Ollama and download the AI model |
Configuration
BT Resume is zero-config by default, but you can customize via environment variables:
| Variable | Default | Description |
|---|---|---|
BT_RESUME_HOST |
127.0.0.1 |
Server bind address |
BT_RESUME_PORT |
5000 |
Server port |
BT_RESUME_DEBUG |
false |
Enable debug logging |
BT_RESUME_OLLAMA_HOST |
http://127.0.0.1:11434 |
Ollama server URL |
BT_RESUME_ENABLE_ANALYTICS |
true |
Anonymous usage tracking (set to false to disable) |
BT_RESUME_SECRET_KEY |
(auto-generated) | Flask secret key (persisted across restarts) |
Example:
BT_RESUME_PORT=8080 BT_RESUME_DEBUG=true btr serve
Requirements
- OS: Windows, macOS, or Linux
- Python: 3.10+
- RAM: 8GB+ recommended
- Disk: 2GB+ free space (for the AI model)
- Ollama: Installed automatically on first run
Tech Stack
| Layer | Tool |
|---|---|
| Frontend | React 19 + TypeScript + Vite |
| Backend | Python 3.10+ / Flask |
| LLM Runtime | Ollama |
| AI Model | Mistral 7B (fast, efficient) |
| PDF Reading | pdfplumber |
| PDF Generation | ReportLab |
| Distribution | PyPI — pip install btr-resume |
Building from Source
# Clone the repo
git clone https://github.com/rasumeng/BT-Resume.git
cd BT-Resume
# Install Python package in editable mode
pip install -e .
# Build the web frontend
cd web
npm install
npm run build
cd ..
# Start the server
btr serve
Project Structure
BT-Resume/
├── btr/ # CLI package (btr serve, btr setup)
│ ├── __init__.py
│ ├── __main__.py # python -m btr
│ └── cli.py # CLI commands
├── backend/ # Flask REST API
│ ├── app.py # Flask app with CORS
│ ├── routes/ # API endpoint definitions
│ ├── services/ # Business logic (LLM, PDF, tailoring)
│ └── config.py # Backend configuration
├── core/ # Shared Python modules
│ ├── prompts/ # LLM prompt templates
│ ├── pdf/ # PDF generation components
│ ├── resume_model.py # Data models
│ └── utils.py # Utility functions
├── web/ # React SPA frontend
│ ├── src/ # Components, screens, styles
│ ├── package.json
│ └── vite.config.ts
├── pyproject.toml
└── README.md
Architecture
┌─────────────────────┐
│ React Web UI │ ← Served by Flask / opened in browser
│ (User Interface) │
└──────────┬──────────┘
│ HTTP/JSON (localhost)
▼
┌─────────────────────┐
│ Flask REST API │ ← Python Backend
│ (localhost:5000) │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Ollama LLM │ ← Local AI Model (Mistral 7B)
│ (localhost:11434) │ Runs entirely offline
└─────────────────────┘
License
MIT License — see LICENSE
Author
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file btr_resume-1.0.7.tar.gz.
File metadata
- Download URL: btr_resume-1.0.7.tar.gz
- Upload date:
- Size: 217.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e6cebdc1468c3330812c8c52ff7443bf24f3c5db0abb937a694b9cb8aa713e9
|
|
| MD5 |
6ee92c1e92aa91cef643bef37b931dc0
|
|
| BLAKE2b-256 |
4c2ab695cac3efbfa3c756ec373d4857df2e55f3513395ffb58df15b7b580d22
|
File details
Details for the file btr_resume-1.0.7-py3-none-any.whl.
File metadata
- Download URL: btr_resume-1.0.7-py3-none-any.whl
- Upload date:
- Size: 234.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22443a0459617990fcf684f6c449f7fc9188658fa4651f0c28e07f1817900db9
|
|
| MD5 |
6f589a47074a6bd7bd37ab49fcb52f44
|
|
| BLAKE2b-256 |
da6f17af1264dca5b54b1efb18e7205412fcc215fe0b39916b71400ad5d8672e
|