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.5.tar.gz (216.7 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.5-py3-none-any.whl (233.4 kB view details)

Uploaded Python 3

File details

Details for the file btr_resume-1.0.5.tar.gz.

File metadata

  • Download URL: btr_resume-1.0.5.tar.gz
  • Upload date:
  • Size: 216.7 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.5.tar.gz
Algorithm Hash digest
SHA256 02cf6b1e0899ec683179d43884b002bb896f90cb2b0f4d44f009cd1c05f174df
MD5 05a921c784ad427115f5c5659bc21087
BLAKE2b-256 34bd1542763320c32a55d6728ceef4cfd2d649fdf440597a058d2f925f363ab3

See more details on using hashes here.

File details

Details for the file btr_resume-1.0.5-py3-none-any.whl.

File metadata

  • Download URL: btr_resume-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 233.4 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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 3ded063be227c6221033233e6ecf4dd56a451b5d64de3e0d389e90249c4b3379
MD5 9e6b667347a29737c9c6bd0d9ef1f1cb
BLAKE2b-256 0c8290842f5e4da693ed1285712b3be08239ce4df442e8423108b211f3e61927

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