Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AugmentCV

Free, AI-powered resume optimizer that helps job seekers beat ATS (Applicant Tracking System) filters.

FeaturesArchitectureGetting StartedDeploymentContributingLicense


What is AugmentCV?

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.

Features

  • 📄 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

Architecture

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)   │
                         └─────────────────────────┘

Services

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

Data Flow

  1. User uploads PDF resume + pastes job description on the client
  2. Client sends multipart/form-data to POST /parseResumeJD on the API
  3. API validates the request, stores the raw data in MongoDB, and proxies to the Server
  4. Server converts the PDF to Markdown (pymupdf4llm), then calls OpenAI GPT-4o-mini to extract structured sections
  5. Server runs spaCy NLP phrase matching against curated hard/soft skills keyword lists
  6. Response flows back with keyword counts and searchability flags
  7. Client computes the weighted ATS score and renders the interactive analysis dashboard

Getting Started

Prerequisites

1. Clone the repository

git clone https://github.com/aguerra09/augmentcv.git
cd augmentcv

2. Set up environment variables

Create a .env file at the project root:

OPENAI_API_KEY=your_openai_api_key_here

3. Start the Server (Python NLP Engine)

cd 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 8082

4. Start the API (Node.js Gateway)

cd api
pnpm install
pnpm start
# Runs on http://localhost:8081

5. Start the Client (Svelte SPA)

cd client
pnpm install
pnpm start
# Open http://localhost:8080 in your browser

Environment Variables

Server (Python)

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

API (Node.js)

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

Client (Svelte)

Variable Description Default
API URL of the API gateway http://localhost:8081/

Deployment

Docker Compose (Production)

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 -d

This 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.

CI/CD

The project uses GitHub Actions (.github/workflows/ci.yml) to:

  1. Build and push Docker images to GitHub Container Registry (ghcr.io)
  2. Trigger an automated deployment on push to the develop branch

Project Structure

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

Tech Stack

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)

Contributing

Contributions are welcome! Here's how to get started:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/my-feature
  3. Commit your changes: git commit -m 'Add my feature'
  4. Push to the branch: git push origin feature/my-feature
  5. Open a Pull Request

Ideas for contributions

  • 🌍 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

License

This project is open source. See the LICENSE file for details.


Made with ❤️ to help job seekers land their dream jobs.

About

Free, AI-powered resume optimizer that helps job seekers beat ATS (Applicant Tracking System) filters.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages