Free, AI-powered resume optimizer that helps job seekers beat ATS (Applicant Tracking System) filters.
Features • Architecture • Getting Started • Deployment • Contributing • License
Between 60% and 80% of resumes are rejected before a human ever sees them — simply because they don't contain the right keywords. AugmentCV analyzes your resume against a job description and gives you an actionable report showing exactly which keywords you're missing and how to improve your score.
No account required. No data stored. Completely free.
- 📄 PDF Resume Parsing — Upload your resume as a PDF; it's converted to structured data using AI (GPT-4o-mini)
- 🔍 NLP Keyword Extraction — Powered by spaCy, your resume and the job description are scanned against curated lists of 1000+ hard and soft skills
- 📊 ATS Score Calculation — Get a weighted score: 70% hard skills, 20% soft skills, 10% searchability (resume structure)
- ✅ Searchability Audit — Checks that your resume includes essential sections (abstract, experience, education, skills) and contact details (email, phone, LinkedIn, address)
- 📋 Copy Missing Keywords — One-click copy of all missing keywords to quickly update your resume
- 🔄 Re-upload & Re-analyze — Iterate on your resume and see your score improve in real time
- 💬 Feedback System — Built-in feedback form to report issues or suggest improvements
- 🌐 Internationalization — Spanish language support (easily extensible)
- 🔒 Privacy-First — No user accounts, no personal data retention
AugmentCV is a three-tier web application:
┌─────────────────────────────────────────────────────────┐
│ Nginx (Reverse Proxy) │
│ augmentcv.com → client │
│ api.augmentcv.com → api │
└────────────┬─────────────────────────┬──────────────────┘
│ │
┌───────▼───────┐ ┌────────▼────────┐
│ Client │ │ API │
│ Svelte 5 │ │ Express 5 │
│ Vite + TS │ │ TypeScript │
│ (port 8080) │ │ (port 8081) │
└───────────────┘ └────────┬────────┘
│
┌───────▼───────┐
│ Server │
│ FastAPI │
│ Python │
│ (port 8082) │
└───────┬───────┘
│
┌────────────▼────────────┐
│ OpenAI API + spaCy │
│ (Resume Parsing & │
│ Keyword Extraction) │
└─────────────────────────┘
| Service | Stack | Purpose |
|---|---|---|
| client | Svelte 5, Vite 7, TypeScript, pnpm | SPA frontend with Home, Analyze, Privacy, and Cookies views |
| api | Express 5, Mongoose 9, TypeScript, pnpm | API gateway — proxies analysis requests to server, stores analytics in MongoDB, handles feedback emails |
| server | FastAPI, spaCy, PyMuPDF, OpenAI, Python 3.10+ | NLP engine — parses PDF resumes (PDF → Markdown → GPT-4o-mini → JSON), extracts keywords via spaCy phrase matching |
- User uploads PDF resume + pastes job description on the client
- Client sends
multipart/form-datatoPOST /parseResumeJDon the API - API validates the request, stores the raw data in MongoDB, and proxies to the Server
- Server converts the PDF to Markdown (pymupdf4llm), then calls OpenAI GPT-4o-mini to extract structured sections
- Server runs spaCy NLP phrase matching against curated hard/soft skills keyword lists
- Response flows back with keyword counts and searchability flags
- Client computes the weighted ATS score and renders the interactive analysis dashboard
- Node.js >= 22
- pnpm >= 10
- Python >= 3.10
- MongoDB (local or remote)
- An OpenAI API key
git clone https://github.com/aguerra09/augmentcv.git
cd augmentcvCreate a .env file at the project root:
OPENAI_API_KEY=your_openai_api_key_herecd server
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
python -m spacy download en_core_web_sm
# Start the FastAPI server
uvicorn src.app:app --host 0.0.0.0 --port 8082cd api
pnpm install
pnpm start
# Runs on http://localhost:8081cd client
pnpm install
pnpm start
# Open http://localhost:8080 in your browser| Variable | Description | Default |
|---|---|---|
OPENAI_API_KEY |
OpenAI API key for resume parsing | required |
ALLOWED_ORIGINS |
Comma-separated list of allowed CORS origins | http://localhost:8080 |
LOG_LEVEL |
Logging level (DEBUG, INFO, WARNING, CRITICAL) |
CRITICAL |
| Variable | Description | Default |
|---|---|---|
ALLOWED_ORIGINS |
Comma-separated list of allowed CORS origins | http://localhost:8080 |
MONGO_URI |
MongoDB connection URI | mongodb://127.0.0.1/augmentcv |
SERVER |
URL of the Python server | http://localhost:8082/ |
PORT |
API server port | 8081 |
DUMP_TOKEN |
Auth token for the data dump endpoint | testdumptoken |
MAILER_ACCOUNT |
Gmail account for feedback emails | — |
MAILER_PASSWORD |
Gmail app password for feedback emails | — |
| Variable | Description | Default |
|---|---|---|
API |
URL of the API gateway | http://localhost:8081/ |
The project includes a production-ready Docker Compose setup in infra/:
cd infra
# Edit docker-compose.yml to set your environment variables
docker compose up -dThis starts four services:
- client — Nginx serving the built Svelte SPA (port 10600)
- api — Node.js Express API gateway (port 10601)
- server — Python FastAPI NLP engine (internal only)
- mongo — MongoDB 8 with persistent volumes
An Nginx reverse proxy configuration (infra/nginx.conf) is included for TLS termination.
The project uses GitHub Actions (.github/workflows/ci.yml) to:
- Build and push Docker images to GitHub Container Registry (
ghcr.io) - Trigger an automated deployment on push to the
developbranch
augmentcv/
├── client/ # Svelte 5 SPA frontend
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── dialogs/ # Modal dialogs
│ │ ├── icons/ # SVG icon components
│ │ ├── state/ # Global state management (Svelte 5 runes)
│ │ └── views/ # Page-level views (Home, Analyze, Privacy, Cookies)
│ ├── Dockerfile
│ ├── vite.config.ts
│ └── package.json
├── api/ # Express 5 API gateway
│ ├── src/
│ │ ├── core/ # Config & error handling
│ │ ├── models/ # Mongoose schemas
│ │ └── services/ # Route handlers (Proxy, Feedback, Dump)
│ ├── Dockerfile
│ ├── vite.config.ts
│ └── package.json
├── server/ # FastAPI NLP engine
│ ├── src/
│ │ ├── modules/ # ResumeParser (OpenAI) & KeywordExtractor (spaCy)
│ │ ├── utils/ # Pydantic models
│ │ └── inputs/ # Curated keyword CSV lists (hard_skills, soft_skills)
│ ├── Dockerfile
│ ├── requirements.txt
│ └── docker-compose.yml # Local dev compose for the server
├── infra/ # Production infrastructure
│ ├── docker-compose.yml # Full-stack compose (client + api + server + mongo)
│ └── nginx.conf # Reverse proxy with TLS
├── .github/
│ └── workflows/
│ └── ci.yml # GitHub Actions CI/CD pipeline
├── .gitignore
├── .python-version # Python 3.10.14
└── README.md # ← You are here
| Category | Technology |
|---|---|
| Frontend | Svelte 5, Vite 7, TypeScript |
| API Gateway | Express 5, Mongoose 9, TypeScript |
| NLP Engine | FastAPI, spaCy, OpenAI, PyMuPDF |
| Database | MongoDB 8 |
| Infrastructure | Docker, Nginx, GitHub Actions |
| Package Manager | pnpm (JS), pip (Python) |
Contributions are welcome! Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/my-feature - Commit your changes:
git commit -m 'Add my feature' - Push to the branch:
git push origin feature/my-feature - Open a Pull Request
- 🌍 Add more languages (English, French, German, etc.)
- 📊 Improve the keyword lists with industry-specific terms
- 🧪 Add unit and integration tests
- 🎨 UI/UX improvements and accessibility enhancements
- 📱 Improve mobile responsiveness
- 🤖 Support alternative LLM providers (Anthropic, Gemini, local models)
- 📈 Add resume improvement suggestions based on the analysis
This project is open source. See the LICENSE file for details.
Made with ❤️ to help job seekers land their dream jobs.