Skip to content

Muskankr/AI-Resume-Analyzer

Repository files navigation

GitHub license GitHub issues Last Commit Build Backend Coverage Frontend Coverage GitHub stars GitHub forks GitHub contributors PRs Welcome ECSoC'26

AI Resume Analyzer

An enterprise-grade automated platform to parse resumes, evaluate ATS scores, extract technical skills, and generate contextual recommendations.

Framework Overview

Client (Frontend)

React Vite TypeScript Bootstrap Axios

Server (Backend)

Python Django DRF PDFPlumber CORS

Key Features • Project Preview •pm tun ArchitectureTech StackInstallation & SetupAPI ReferenceRoadmapContributingContributors


Key Features

  • Flexible Multi-Format Parsing — Instant text extraction from files (PDF format) using Python pdfplumber.
  • ATS Optimizer & Scoring Engine — High-performance scoring algorithm that parses resumes against technical standard keywords.
  • Contextual Skill Extraction — Detects core programming languages, frameworks, developer tools, database engines, and libraries.
  • Dynamic Feedback Generation — Yields smart suggestions recommending targeted certifications, technologies, and formatting changes.
  • Premium Glassmorphic UI — Fully responsive, beautiful interface with active state indicators, hover metrics, and smooth transitions built using Bootstrap 5.

Project Preview/ Screenshots

🏠 Home Page

Application Interface Preview

📤 Resume Upload

Application Interface Preview

📜 Analysis Result

Application Interface Preview

Architecture & Data Flow

 ┌──────────────┐         POST /api/upload/         ┌─────────────────┐
 │              │ ────────────────────────────────> │                 │
 │ React Client │                                   │ Django Backend  │
 │  (Bootstrap) │ <──────────────────────────────── │   (REST API)    │
 └──────────────┘           Analysis JSON           └─────────────────┘
                                                             │
                                                             ▼
                                                    ┌─────────────────┐
                                                    │  PDFPlumber Parser│
                                                    └─────────────────┘
                                                             │
                                                             ▼
                                                    ┌─────────────────┐
                                                    │ Keyword Matches │
                                                    │   & ATS Engine  │
                                                    └─────────────────┘

Tech Stack

Client (Frontend)

  • Framework: React 19 (Vite boilerplate)
  • Language: TypeScript
  • Styling: Bootstrap 5 + Vanilla CSS Variables (Glassmorphism theme)
  • API Handler: Axios

Server (Backend)

  • Framework: Django REST Framework (DRF)
  • Language: Python 3.10+
  • CORS Management: django-cors-headers
  • Text Extractor: PDFPlumber

Project Structure

ai-resume-analyzer/
├── frontend/                 # React frontend application
│   ├── public/             # Static public assets (ui.png, favicon, etc.)
│   ├── src/
│   │   ├── assets/         # Images, logos, and Vite assets
│   │   ├── App.css         # Component layout configurations
│   │   ├── App.tsx         # Application entry view & core client logic
│   │   ├── index.css       # Core stylesheets and variables
│   │   └── main.tsx        # DOM Renderer
│   ├── package.json        # Node modules and dependency matrix
│   └── tsconfig.json       # TypeScript compiler settings
│
├── backend/                 # Django REST API backend
│   ├── resume_analyzer/    # Main settings, routing, and configurations
│   ├── analyzer/           # App endpoints, models, viewsets, and migrations
│   │   ├── migrations/     # Database migration schema
│   │   ├── models.py       # Resume database models
│   │   ├── serializers.py  # Django REST serialization maps
│   │   ├── urls.py         # Endpoint routes
│   │   └── views.py        # Resume parsing & scoring logic
│   ├── resumes/            # Storage path for processed resumes
│   ├── requirements.txt    # Python dependencies list
│   └── manage.py           # Django command utility
│
└── README.md

Installation & Setup

Prerequisites

Ensure you have the following packages installed on your local development machine:

  • Node.js (v18 or higher)
  • Python (v3.10 or higher)
  • Git
  • Redis Server (running locally on port 6379 for Celery tasks)

Clone the Repository

git clone https://github.com/Muskankr/AI-Resume-Analyzer.git

Server Setup (Django)

We recommend installing dependencies inside a secure Python virtual environment:

# Navigate to server directory
cd server

# Initialize a virtual environment
python -m venv venv

# Activate the virtual environment
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate

# Create local environment configuration from the example
# Windows:
copy .env.example .env
# macOS/Linux:
cp .env.example .env

# Install dependencies
pip install -r requirements.txt

# Execute database migrations
python manage.py migrate

# Spin up Django development server
python manage.py runserver

# In a separate terminal, activate the venv and start the Celery background worker:
# (Use --pool=solo on Windows to avoid process spawning issues)
celery -A resume_analyzer worker -l info --pool=solo

The API server starts on: http://127.0.0.1:8000/

Server Environment Variables

Variable Description Default / Placeholder
SECRET_KEY Secret key for Django cryptographic signing django-insecure-local-development-secret-key-change-me
DEBUG Set to True for development, False for production True
ALLOWED_HOSTS Comma-separated list of allowed host/domain names localhost,127.0.0.1,127.0.0.1:8000

Client Setup (React)

Create your environment variables by copying the provided examples:

cd frontend
cp .env.development.example .env.development
cp .env.production.example .env.production

Then install dependencies and start the app:

# Install packages
npm install

# Run the local Vite web server
npm run dev

The client application will run at: http://localhost:5173/

Client Environment Variables

Variable Description Default / Placeholder
VITE_BACKEND_URL The URL of the Django backend REST API server http://127.0.0.1:8000
VITE_SENTRY_DSN Sentry DSN for frontend error tracking (Empty)

Error Tracking (Sentry)

This project uses Sentry for production error tracking on both the frontend and backend. The integration includes a before_send (backend) and beforeSend (frontend) hook to actively sanitize request bodies and prevent Personally Identifiable Information (PII) or resume content from being sent to the tracking service.

Setup

  1. Create a free developer account at Sentry.io.
  2. Create two new projects in Sentry:
    • One for Django (Backend)
    • One for React (Frontend)
  3. Copy the respective DSN (Data Source Name) for each project.

Environment Variables

Add the DSNs to your .env files:

Backend (server/.env)

SENTRY_DSN=your-django-sentry-dsn

Frontend (client/.env)

VITE_SENTRY_DSN=your-react-sentry-dsn

Local Development Behavior

For local development, you do not need to set the Sentry DSNs.

  • If SENTRY_DSN and VITE_SENTRY_DSN are missing or empty, Sentry remains inactive.
  • The application will initialize normally without any tracking overhead or startup errors.

Testing & Coverage Setup

Test suites and coverage reports are wired into the project setup for both backend and frontend submodules.

Root Workspace Commands

# Run test coverage for both Frontend and Backend
npm run test:coverage

# Run Frontend tests with Vitest coverage
npm run test:coverage:frontend

# Run Backend tests with Coverage.py
npm run test:coverage:backend

Backend Coverage (Django + Coverage.py)

cd backend
coverage run manage.py test analyzer
coverage report
  • Coverage Configuration: Configured in backend/.coveragerc
  • Minimum Threshold: 60% line coverage.

Frontend Coverage (React + Vitest)

cd frontend
npm run test:coverage
  • Coverage Configuration: Configured in frontend/vite.config.ts
  • Minimum Threshold: 50% across lines, functions, branches, and statements.

API Reference

Parse Resume File

Validates and parses an uploaded resume, matches standard technical keywords, calculates scores, and returns suggestions.

  • Endpoint: /api/upload/
  • Method: POST
  • Payload Format: multipart/form-data

Parameters

Name Type Required Description
file binary (PDF) Yes The document to analyze

Sample Success JSON Response (200 OK)

{
  "score": 80,
  "skills_found": [
    "python",
    "django",
    "react",
    "git"
  ],
  "suggestions": [
    "Mention Django experience",
    "Add frontend skills like React"
  ]
}

Rate Limiting

The resume upload endpoint (POST /api/upload/) is throttled per client IP using DRF's SimpleRateThrottle.

Setting Default Description
RESUME_UPLOAD_RATE 10/hour Max requests per IP. Format: <n>/hour, <n>/day, <n>/min

To change the limit, set RESUME_UPLOAD_RATE in your server/.env:

RESUME_UPLOAD_RATE=20/hour

When the limit is exceeded, the API returns:

// HTTP 429 Too Many Requests
// Retry-After: <seconds>
{ "detail": "Request was throttled. Expected available in <N> seconds." }

Security Configuration & Headers

Standard security headers are configured for both the frontend (client) and backend (server) environments to mitigate common vulnerabilities:

Configured Headers

  1. Content-Security-Policy (CSP): Limits the resources (scripts, styles, connections) the browser is allowed to load.
    • Client: Allows 'self' resources, inline scripts/styles for React/Bootstrap, and local/production backend API connections.
    • Server (API): Uses a strict default-src 'none'; for JSON API responses, and standard self-hosting for Django admin.
  2. X-Frame-Options (DENY): Prevents the app from being embedded in <iframe> tags, mitigating Clickjacking attacks.
  3. X-Content-Type-Options (nosniff): Disables MIME-type sniffing to prevent MIME-based attacks.
  4. Referrer-Policy (strict-origin-when-cross-origin): Protects privacy by stripping referrer paths when making cross-origin requests.

Local Development Parity

To ensure parity between local development and production environments, the headers are applied in both locations:

  • Production (Vercel): Configured via vercel.json files in the root and frontend directories.
  • Local Development (Vite): Preconfigured in vite.config.ts to send headers when running the local dev server (npm run dev).
  • Django Backend: Applied dynamically in all environments via Django settings and a custom middleware in middleware.py.

Roadmap

  • DOCX Document Parsing — Integrate python-docx to support Word resume parser pipelines.
  • Dark Mode Toggle — Implement user-theme selections with CSS theme tokens persisted in localStorage.
  • Target Job Role Comparison — Match resume skill outputs directly against selectable target job roles.
  • Persistent User Dashboard — Save and render a timeline history of past scores using client-side indexing.
  • Upload Interactive States — Dash borders and overlay drop indicators to make file uploads feel extremely natural.

Contributing

We welcome contributions of all levels under the ECSoC'26 program!

📜 Please read our Code of Conduct before participating in this project. By contributing, you agree to abide by its guidelines.

  1. Fork the repository on GitHub.
  2. Clone your fork and create a checkout branch:
    git checkout -b feature/your-feature-name
  3. Commit your changes with standard semantic commit messages (e.g. feat: ..., fix: ...).
  4. Push changes to your fork and create a Pull Request (PR) targeting the upstream main branch.

Please review active issues before creating duplicates, and always link open issues to your Pull Request!


Code Owners

This repository uses a CODEOWNERS file to automatically request reviews from maintainers whenever a Pull Request is opened.

  • The file lives at .github/CODEOWNERS.
  • Currently, all files (*) are owned by @Muskankr.
  • When you open a PR, GitHub will automatically add the code owner as a reviewer.
  • As the project grows, ownership can be split by folder (e.g. /frontend/ → frontend maintainers, /backend/ → backend maintainers).

Contributors

Maintainer

  • Muskan Kumari (@Muskankr) — Project Creator & Lead Maintainer

Active Contributors Grid

A huge thanks to all the developers who have contributed code, fixed bugs, and improved documentation!

Contributors Avatars Grid
Show your support by leaving a ⭐ on this repository!

About

AI-powered Resume Analyzer with ATS scoring, skill extraction, and resume improvement suggestions.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages