Skip to main content

⚡ Flash Resume

Fast, ATS-targeted resume tailoring and layout-verified 1-page PDF generation.

Stop the manual 3-tab shuffle (Job Board ↔ ChatGPT ↔ Overleaf). Full document AI rewrites take 15+ seconds, hallucinate experience, and push single-page resumes onto page 2.

Flash Resume solves this by:

  1. Targeted ATS Diffing: Injects high-density keywords from the job description directly into existing skills and bullets with a strict word-count budget ($\pm 2$ words).
  2. Instant Typst Compilation: Compiles your resume locally in < 100 milliseconds via bundled Typst.
  3. Programmatic Overflow Protection: Uses pypdf to inspect the compiled document and guarantee a verified single-page fit.
  4. Choice of AI engine: Pick Gemini for best ATS keyword quality (~15-20s) or Groq for near-instant tailoring (~3s) — switch any time from the extension setup.
  5. 1-Click Browser Extension: Tailor from LinkedIn, Indeed, or Greenhouse — the verified PDF is saved straight to your chosen folder, no download prompt.

🚀 Quick Start (Windows)

1. Install

pip install flash-resume

That's it for dependencies — the package bundles everything (Typst engine, AI clients, the extension files).

2. One-Time Setup

fs setup

This interactive command:

  1. Asks you to pick an AI provider (Gemini quality or Groq speed) and enter your free API key
  2. Chooses the folder where tailored PDFs are saved
  3. Sets up your master resume (runs the init wizard if needed)
  4. Registers the engine to start silently at Windows logon — no terminal ever needed again
  5. Copies the Chrome extension to a stable folder and tells you where to Load-unpack it

3. Load the Extension (Once)

  1. Open chrome://extensions/ (works in Chrome, Brave, and Edge)
  2. Enable Developer mode (top-right toggle)
  3. Click Load unpacked and select the folder printed by fs setup (default: %LOCALAPPDATA%\flash-resume\extension)

That's it. The engine autostarts at login, and the extension reconnects automatically — no reloads, no terminal, no "keep this window open" needed.

Managing the Setup

fs autostart status    # check if the at-login autostart is registered
fs autostart disable   # stop the engine from starting at login
fs autostart enable    # re-enable it
fs extension-path      # print the extension folder for Load-unpacked
fs doctor              # verify system health

For Contributors (from source)

git clone https://github.com/PavanBollepalli/flash-resume.git
cd flash-resume
uv sync
uv run fs init
uv run fs doctor

⚡ Daily Usage

The Everyday Command: fs tailor

When browsing jobs on LinkedIn, Naukri, or Indeed:

  1. Copy the job description to your clipboard (Ctrl + C).
  2. Run:
uv run fs tailor

You can also make clipboard input explicit with uv run fs tailor --clip.

That's it! Flash Resume:

  • Automatically reads the JD from your system clipboard
  • Infers target Company and Role
  • Integrates high-impact ATS keywords into relevant bullets and skills
  • Compiles the PDF and verifies the 1-page layout
  • Saves:
    • Company_Role.pdf (Ready to upload)
    • Company_Role.json (Structured tailored resume)
    • Company_Role.diff.md (Reviewable before/after report)
  • Renders a Rich visual terminal diff:
✓ Flash Resume Tailoring Complete
Datadog — Backend Software Engineer
ATS Match Score: 94%  |  Pages: 1 page (Layout Verified)  |  Compile: 72.5ms  |  Total: 1.84s

Integrated ATS Keywords:  FastAPI    PostgreSQL    Docker    Redis 

Custom Overrides (Optional)

# Pass a job description file or string directly
uv run fs tailor --jd ./jobs/datadog_swe.txt

# Paste a long job description safely, including quotes and apostrophes
Get-Content ./jobs/joveo.txt | uv run fs tailor --jd -
# Git Bash alternative:
cat ./jobs/joveo.txt | uv run fs tailor --jd -

# Override company or role name
uv run fs tailor --company "Google" --role "Site Reliability Engineer"

# Specify a custom output folder
uv run fs tailor --out ./applications/2026/

🧩 Chrome Extension (1-Click Tailor)

After fs setup, the companion engine runs silently in the background. The extension just talks to it — all config (provider, API key, save folder) lives on the server, set by fs setup.

One-tap ⚡ floating button (fastest):

  1. Open any job posting on LinkedIn, Indeed, or Greenhouse.
  2. Tap the ⚡ floating button in the bottom-right corner. It auto-detects the job and tailors your resume in a single tap — a toast shows the ATS score and saved path. The extension must be granted access to localhost:13450 once in chrome://extensions for the page-side button to reach the local engine.

Detailed view (review / retry):

  • Click the Flash Resume icon → "⚡ Tailor 1-Page Resume". The company, role, and job description are auto-filled (including from text you've selected on the page). The verified PDF is saved directly to your configured folder and the saved path is shown — no download dialog.

The engine reports a "Ready" / offline status in the popup; there is no browser-side setup wizard.


🏗️ Architecture

flash-resume/
├── pyproject.toml               # Package dependencies & scripts
├── README.md                    # Project documentation
├── templates/
│   └── resume.typ               # Modern, ATS-optimized Typst template
├── extension/                   # Manifest V3 Chrome Extension
│   ├── manifest.json
│   ├── popup.html / popup.js    # Tailor UI + saved-path view (no download prompt)
│   └── content.js               # Job extractor + one-tap ⚡ floating action button
├── src/flash_resume/
│   ├── cli.py                   # Typer CLI (setup, init, tailor, serve, autostart, ...)
│   ├── config.py                # ~/.config/flash-resume/config.json
│   ├── bootstrap.py             # Silent server entrypoint (pythonw -m flash_resume.bootstrap)
│   ├── autostart.py             # Windows Run-key registration for at-login server start
│   ├── extension.py             # Bundled Chrome extension installer (Load-unpacked path)
│   ├── models/
│   │   ├── resume.py            # MasterResume & structured components
│   │   ├── job.py               # JobAnalysis & extracted specs
│   │   └── tailoring.py         # TailorPlan, BulletEdit & TailorResult
│   ├── services/
│   │   ├── compiler.py          # Typst compilation & pypdf page validation
│   │   ├── llm.py               # Gemini Flash structured ATS optimization
│   │   ├── groq_llm.py          # Groq (gpt-oss-20b) fast provider
│   │   ├── tailor.py            # Pipeline orchestrator & diff generator
│   │   └── server.py            # FastAPI companion daemon for Chrome Extension
│   └── utils/
│       └── diff.py              # Rich terminal visualization
├── examples/
│   ├── master_resume.json       # Realistic reference master resume
│   └── job_description.txt      # Sample job description
└── tests/
    ├── test_models.py
    ├── test_compiler.py
    └── test_tailor.py

🛡️ Product Principles

  • 100% Factual Truthfulness: The engine only maps keywords and rephrases bullets that align with existing experience. It never invents companies, degrees, metrics, or domains you haven't touched.
  • Layout-Preserving Word Budgets: Replacement bullets are strictly constrained to $\pm 2$ words of the original bullet, preventing multi-line overflow.
  • Sub-100ms Local Compilation: Pure local Typst compilation ensures blazing-fast rendering without waiting for external server queues.

🧪 Testing

Run automated tests:

uv run pytest

Release files for flash-resume 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for flash-resume 0.2.3
File Size Uploaded
flash_resume-0.2.3.tar.gz 151.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for flash-resume 0.2.3
File Interpreter ABI Platform
flash_resume-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 206.1 kB

Release files / flash_resume-0.2.3.tar.gz

Download URL flash_resume-0.2.3.tar.gz
Size 151.3 kB
Tags Source
SHA-256 checksum
How to use checksums
d00ab9219bf3167df86b62e95a5d9f7668a49e6632d90ec59db98d7626a7603e
BLAKE2b-256 checksum
How to use checksums
ca48ef95573245d6f9f895c85abf1bb415d932444b8617b07a079d64368a65a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / flash_resume-0.2.3-py3-none-any.whl

Download URL flash_resume-0.2.3-py3-none-any.whl
Size 54.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f8047e57e505695f5fea7598d88ae6a3820dba30a08475dc005155d96d9a0d91
BLAKE2b-256 checksum
How to use checksums
048e0c8281d6bd73929fe5e93f4448bd45e7319fa5643d1a75e71600e525eaae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.3 This release

2 release files

0.2.2

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page