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

Uploaded Python 3

File details

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

File metadata

  • Download URL: btr_resume-1.0.1.tar.gz
  • Upload date:
  • Size: 213.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.1.tar.gz
Algorithm Hash digest
SHA256 8c0cef4975d717b24a1c8ad71edbd78e2ad8733a56148af157b29b3a1a3179c2
MD5 c867f7d1cc2a494f9eb49f5bac4b1f2d
BLAKE2b-256 0cec6baf81bf6989b54cd8c04ce6eff233c732db1ec5c91e377c6af6b065cdfd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: btr_resume-1.0.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d544300628453911589e5aa85a5d4a32cca49be939fdff4b5235837789ec49a4
MD5 6ff47b4c851c67a47278521c83ccabd0
BLAKE2b-256 8a9d15bf7b75a7d97de26f2974d3361e6f1ed42eccfaa388c2b175d47e215286

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