Privacy-first resume and job-description analyzer with local skill matching and optional AI-powered feedback.
Live app: robbundy2002.github.io/ResumeGPT
- Browser-only React + TypeScript application built with Vite.
- PDF and TXT resume parsing in the browser.
- Deterministic local matching for skills, aliases, categories, keyword coverage, missing skills, evidence, and explainable scoring.
- No ResumeGPT backend, account, database, cloud storage, or resume upload.
- Optional AI workflow that generates a structured prompt for ChatGPT or another AI service.
- No direct browser API-key mode and no application-owned AI credential.
- Clear Session action removes resume text, job description, and local analysis from memory.
Core analysis runs locally in browser memory. Resume files are parsed on the device and are never sent to a ResumeGPT server. The app does not persist resume data by default and never puts resume content in URLs.
Optional AI feedback is handled through a generated prompt that the user can copy into the AI service of their choice. ResumeGPT does not collect API keys or call an AI provider directly.
- The browser validates the selected PDF or TXT file by extension, MIME type where available, file size, and readable content.
- PDF text is extracted with
pdfjs-dist; TXT files are read with the browserFileAPI. - The skill extractor scans the resume and job description with normalized aliases such as
k8s/Kubernetes,node/Node.js/NodeJS, andpostgres/PostgreSQL. - Matching uses token-aware patterns to avoid false positives such as matching
JavainsideJavaScript. - Scoring is deterministic: required job skills count 2x, preferred skills count 1.5x, and other detected job skills count 1x.
flowchart LR
User[User Browser] --> Parser[Local PDF/TXT Parser]
User --> JD[Job Description Input]
Parser --> Matcher[Deterministic Matching Engine]
JD --> Matcher
Matcher --> Results[Explainable Results UI]
Matcher --> Prompt[Generated AI Prompt]
Prompt --> Copy[User Copies Prompt]
- React
- TypeScript
- Vite
- pdfjs-dist
- Vitest
- React Testing Library
- Playwright
- GitHub Actions
- GitHub Pages
npm ci
npm run devnpm run lint
npm run typecheck
npm run test:coverage
npm run build
npm run test:e2eCI does not require or use an API key.
.github/workflows/ci.yml runs linting, TypeScript checks, coverage tests, and a production build on pushes and pull requests to main.
.github/workflows/deploy.yml repeats validation, builds the static site, uploads the dist artifact, and deploys through the official GitHub Pages actions:
actions/configure-pagesactions/upload-pages-artifactactions/deploy-pages
No gh-pages branch is used.
Set the repository Pages source to GitHub Actions in GitHub repository settings. Pushes to main deploy the static site, and workflow_dispatch can be used for manual redeployment.
ResumeGPT is now a static, privacy-first browser application. The former Express backend and third-party platform deployment configs have been removed.
Description:
Privacy-first resume and job-description analyzer with local skill matching and optional AI-powered feedback.
Topics:
resume, resume-analyzer, job-search, react, typescript, vite, openai, privacy, github-pages, github-actions
Keep the project static and privacy-first. Do not add authentication, databases, cloud storage, hosted backends, serverless functions, vector databases, RAG, payments, or deployment targets other than GitHub Pages.
MIT
