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 GitHub Release


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 check
  • GET /api/status — Detailed service status
  • GET /api/list-resumes — List all resumes
  • GET /api/get-resume — Load specific resume
  • PUT /api/update-resume — Update resume content
  • POST /api/delete-resume — Delete a resume
  • POST /api/polish-bullets — Enhance bullet points
  • POST /api/tailor-resume — Customize for job
  • POST /api/grade-resume — Score and analyze
  • POST /api/parse-resume — Parse uploaded resume
  • POST /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

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

Uploaded Python 3

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

Hashes for btr_resume-1.0.tar.gz
Algorithm Hash digest
SHA256 0594960feb3f2b50706b3b9e1a6a6a8af5fd27af1394fdaa46ae1e03d894d6c0
MD5 fb9f8d1c2df489945b512aa1421be162
BLAKE2b-256 a11352beefe1e721a75033f82a5fd83423b21abb0a8a94fa0041acba033b9ef3

See more details on using hashes here.

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

Hashes for btr_resume-1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a233a2842723eb62adc6a456cb020d1eac896d613676d2a2395e346d97674400
MD5 f008487b00691e51a10d12a57f3b7810
BLAKE2b-256 c420cb1a159867b67c53a32f635e0025d83a2bfebd8e7ab16bcfd13aee2e7e38

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