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.
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
- Auto-updates — automatically stays up-to-date with new features and fixes
- 100% offline — no internet connection required after setup, no API keys, completely free
Tech Stack
| Layer | Tool |
|---|---|---|
| Frontend | React 19 + TypeScript + Vite |
| Backend Language | Python 3.10+ |
| LLM Runtime | Ollama |
| Bullet Polish Model | Mistral 7B (fast, efficient) |
| PDF Reading | pdfplumber |
| PDF Generation | ReportLab |
| REST API | Flask with CORS |
| Distribution | PyPI (pip install btr-resume) |
Quick Start
Quick Install (pip)
pip install btr-resume
btr serve
Opens the web UI at http://localhost:5000.
Manual Setup (Development)
# 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
Requirements
- Python 3.10+
- Ollama (auto-installed via
btr setup) - 8GB+ RAM recommended
- 2GB+ free disk space
Usage
Application Tabs
| Tab | Description |
|---|---|
| My Resumes | View and manage all your resumes |
| Polish | Enhance your bullet points with AI |
| Tailor | Customize resume for specific job descriptions |
| Feedback | Submit feature requests and bug reports |
First Run Setup
btr setup
This will install Ollama (if needed) and download the AI model (~500MB-1GB).
Then start the app:
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
Application Flow
┌─────────────────────┐
│ 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
└─────────────────────┘
API Endpoints
GET /api/health— Backend health checkGET /api/status— Detailed service statusGET /api/list-resumes— List all resumesGET /api/get-resume— Load specific resumePUT /api/update-resume— Update resume contentPOST /api/delete-resume— Delete a resumePOST /api/polish-bullets— Enhance bullet pointsPOST /api/tailor-resume— Customize for jobPOST /api/grade-resume— Score and analyzePOST /api/parse-resume— Parse uploaded resumePOST /api/save-resume-pdf— Generate PDF output
Building from Source
Prerequisites
- Python 3.10+
- Node.js 18+ (for web frontend)
- Git
Build Commands
# Install the package in editable mode
pip install -e .
# Build the web frontend
cd web
npm install
npm run build
cd ..
# Build the Python wheel
python -m build
Output
Built wheel: dist/btr_resume-*.whl
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.tar.gz.
File metadata
- Download URL: btr_resume-1.0.tar.gz
- Upload date:
- Size: 213.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0594960feb3f2b50706b3b9e1a6a6a8af5fd27af1394fdaa46ae1e03d894d6c0
|
|
| MD5 |
fb9f8d1c2df489945b512aa1421be162
|
|
| BLAKE2b-256 |
a11352beefe1e721a75033f82a5fd83423b21abb0a8a94fa0041acba033b9ef3
|
File details
Details for the file btr_resume-1.0-py3-none-any.whl.
File metadata
- Download URL: btr_resume-1.0-py3-none-any.whl
- Upload date:
- Size: 230.4 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 |
a233a2842723eb62adc6a456cb020d1eac896d613676d2a2395e346d97674400
|
|
| MD5 |
f008487b00691e51a10d12a57f3b7810
|
|
| BLAKE2b-256 |
c420cb1a159867b67c53a32f635e0025d83a2bfebd8e7ab16bcfd13aee2e7e38
|