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.3.tar.gz (215.9 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.3-py3-none-any.whl (232.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: btr_resume-1.0.3.tar.gz
  • Upload date:
  • Size: 215.9 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.3.tar.gz
Algorithm Hash digest
SHA256 e6422a86ea4eeb4d7e9d8202ae75b9cb39ceae609f49ab0ebec0dd209adcd8e3
MD5 492270ae7f2930575e4a2af9d16d4b08
BLAKE2b-256 3c12755e1bed7d0820a73f544b256fe8a2a8dcf243baf67e59dc34a6b2bca10e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: btr_resume-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 232.7 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f17807e64310a10606ab05a70d314f6c08251f26e5f5d60e418a125e1ae42ed9
MD5 a5dd2cbdc5321f19feb4e2f62914dfc2
BLAKE2b-256 d6b3ec8a91b7ec2041d0d761b202c9f3281d2f00aa59630d25c09ae61f99c299

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