Skip to main content

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.

License: MIT PyPI version Python Versions GitHub Release


Quick Start

Prerequisites

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 serve will 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

Built by Robert Asumeng LinkedIn | GitHub

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

btr_resume-1.0.7.tar.gz (217.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

btr_resume-1.0.7-py3-none-any.whl (234.0 kB view details)

Uploaded Python 3

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

Hashes for btr_resume-1.0.7.tar.gz
Algorithm Hash digest
SHA256 1e6cebdc1468c3330812c8c52ff7443bf24f3c5db0abb937a694b9cb8aa713e9
MD5 6ee92c1e92aa91cef643bef37b931dc0
BLAKE2b-256 4c2ab695cac3efbfa3c756ec373d4857df2e55f3513395ffb58df15b7b580d22

See more details on using hashes here.

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

Hashes for btr_resume-1.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 22443a0459617990fcf684f6c449f7fc9188658fa4651f0c28e07f1817900db9
MD5 6f589a47074a6bd7bd37ab49fcb52f44
BLAKE2b-256 da6f17af1264dca5b54b1efb18e7205412fcc215fe0b39916b71400ad5d8672e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page