Skip to content

Latest commit

 

History

144 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Parsify

A Full-Stack, AI-Powered Resume Evaluation Pipeline

Python Next.js FastAPI License: MIT

Live Demo (Frontend): https://parsifyv1.vercel.app


Table of Contents


Overview

Parsify is a comprehensive, full-stack web application designed to intelligently and fairly evaluate software engineering resumes. Instead of providing an opaque score like traditional ATS (Applicant Tracking Systems), Parsify focuses on explainability and transparency.

It parses resume PDFs natively into structural Markdown, extracts structured JSON data using a local or hosted Large Language Model (LLM), augments that data with real-world GitHub profile signals, and then produces an objective evaluation.

The final output provides candidates and recruiters with actionable insights, a detailed breakdown of strengths, and highest-impact areas for improvement.


Key Features

  • Multi-Format Document Extraction: Supports high-fidelity extraction from PDF, DOCX, and TXT files. PDFs are processed via PyMuPDF into rich Markdown.
  • Provider-Agnostic AI: Seamlessly swap between local privacy-first models (via Ollama) and highly accurate cloud-based models (via Google Gemini).
  • GitHub Enrichment: Automatically scans resumes for GitHub links or accepts manual input. It queries the GitHub REST API to pull repository statistics, identifying top-tier contributions to open source or complex personal projects.
  • Career Path Prediction & Salary Estimates: Recommends alternative top roles (e.g., Frontend, Backend, ML) the candidate is suited for with AI-driven confidence scores and predicts a fair market base salary range.
  • Fairness Checking: Verifies no bias based on restricted categories.
  • Salary Prediction: Estimates candidate market value based on role and skills.
  • Interview Question Generation: Automatically tailors technical/behavioral interview questions.
  • Live PDF Export: Download the full evaluation report as a clean PDF (@media print styling).
  • Targeted Job Description Matching (Analyzer): (NEW) A dedicated /analyzer page where you can paste a Job Description and a Resume to get a live ATS match percentage, along with matched skills, missing skills (skill gap), and actionable recommendations.
  • Job-Tailored AI Resume Builder: (NEW) A dedicated /builder tool to generate a professional summary and high-impact bullets from raw details via Gemini. By pasting a Target Job Description, the AI will explicitly tailor your content.
  • Professional PDF Export: (NEW) Includes a Real-Time Live Preview and PDF Export capabilities utilizing jsPDF and html2canvas for pixel-perfect resume downloads.
  • Bulk Excel Parsing & Indexing: (NEW) A dedicated /bulk page to upload an Excel or CSV file containing 100+ resume URLs. The system downloads, evaluates, and indexes them in the background.
  • Resume History & Versioning: Persists previous builder versions via local storage.
  • Skill Gap Analysis: Explicitly visualizes matched and missing technologies against standard software engineering roles.
  • Semantic Talent Search: Evaluated resumes are indexed into a local ChromaDB vector store, enabling powerful semantic searches by recruiters.
  • Hybrid Search Architecture (NEW): We now combine Semantic Search (ChromaDB) with Sparse Keyword Search (BM25) to ensure exact technology matches are found.
  • Reciprocal Rank Fusion (NEW): Utilizes RRF to mathematically merge semantic and keyword search streams for state-of-the-art candidate ranking.
  • Rule-Based Candidate Explainer (NEW): Automatically generates transparent, AI-free explanations during talent search, highlighting exact skill overlaps, years of experience, and location matches.
  • Side-by-Side Comparison: A dedicated /compare view allows deep-diving into two candidates' metrics concurrently.
  • Context-Aware Skill Depth Scoring (NEW): Automatically weighs skills based on their proximity to 'projects' or 'production experience', rewarding proven application over mere keyword dropping.
  • Fast Deterministic Semantic Similarity (SBERT) (NEW): Calculates an instant local fallback ATS Match Score using all-MiniLM-L6-v2 embeddings, independent of LLM latency.
  • Anti-Hallucination Keyword Verification (NEW): Runs a strict, deterministic regex check across the raw resume text to explicitly flag any skills hallucinated by the LLM, or verify existing ones.
  • Confidence Levels (NEW): Displays an overall AI Confidence Rating (High, Medium, Low) for the evaluation output, based on text readability and semantic match strength.
  • Beautiful, Responsive UI: A dark-mode-first dashboard built with React 19 and Tailwind CSS that elegantly renders complex JSON evaluation data into easy-to-read metric cards, including real-time search latency metrics.

System Architecture

The application uses a decoupled client-server architecture, allowing the heavy lifting (PDF parsing and LLM inference) to remain on a dedicated server.

[ User Browser ] 
       │ 
       │ 1. Uploads PDF and Job Metadata
       ▼
[ Next.js API Proxy (/api/analyze) ]
       │
       │ 2. Forwards FormData securely
       ▼
[ FastAPI Backend (localhost:8000) ]
       │
       ├─► PyMuPDF extracts Markdown text
       ├─► GitHub API fetches repository stats
       └─► LLM (Gemini/Ollama) processes Jinja templates
       │
       │ 3. Returns structured EvaluationData
       ▼
[ Next.js API Proxy ]
       │
       │ 4. Maps to Feedback UI schema
       ▼
[ React UI Dashboard ] -> Renders Scores, Strengths, and Tips

Frontend (/frontend)

  • Framework: Next.js 15, React 19, TypeScript
  • Styling: Tailwind CSS 3
  • State Management: Zustand, combined with browser localStorage for persisting resume history.
  • Key Files:
    • app/api/analyze/route.ts: Secure serverless proxy route.
    • app/upload/page.tsx: The primary interaction point for file uploads.

Backend (/fbackend)

  • Framework: FastAPI, Python 3.11+
  • PDF Processing: PyMuPDF (pymupdf4llm)
  • Validation: Pydantic models ensure strict typing of LLM JSON outputs.
  • Key Files:
    • src/routes/evaluate.py: The main REST endpoint handling incoming files.
    • src/services/score.py: Orchestrates the PDF extraction, GitHub enrichment, and LLM evaluation pipeline.

Evaluation Rubric

The AI evaluates candidates against a strict 120-point rubric:

  • Open Source Contributions (35 points): Quality, popularity, and consistency of open-source work.
  • Self Projects (30 points): Complexity, technical depth, and completeness of personal repositories.
  • Production Experience (25 points): Years of professional experience, scale of systems built, and impact.
  • Technical Skills (10 points): Relevance and breadth of programming languages and frameworks.
  • Bonus Points (Up to +20 points): Awarded for exceptional achievements (e.g., highly starred repos, notable awards).
  • Deductions: Explicitly deducted for spelling errors, formatting issues, or suspicious prompt injections.

Prerequisites

Before you begin, ensure your system meets the following requirements:

  • Node.js: v18 or newer.
  • Python: v3.11 or v3.12 (Python 3.14+ is not recommended due to missing pre-built wheels for specific dependencies like pydantic-core).
  • AI Backend (Choose One):
    • Ollama: Installed locally and running (ollama serve) with a pulled model (e.g., ollama pull gemma3:4b).
    • Google Gemini: An active API Key from Google AI Studio.

Local Development Setup

The repository is neatly divided. You must run both servers concurrently for the application to function.

1. Backend Setup

Open your terminal and navigate to the backend folder:

cd fbackend

Create an isolated virtual environment to prevent dependency conflicts. On Windows:

py -3.11 -m venv venv
.\venv\Scripts\activate

Install all required Python packages:

pip install -r requirements.txt

Initialize your environment variables by copying the template:

cp .env.example .env

(Open the .env file in your code editor and configure your specific LLM credentials—see the Configuration section below).

Finally, launch the FastAPI development server:

uvicorn main:app --reload --port 8000

The backend is now listening at http://127.0.0.1:8000.

2. Frontend Setup

Open a new terminal window and navigate to the frontend folder:

cd frontend

Install the Node dependencies:

npm install

Start the Next.js development server:

npm run dev

The frontend is now available at http://localhost:3000.


Configuration Details

The backend utilizes an .env file to control the AI provider logic.

Backend (fbackend/.env)

Variable Description
LLM_PROVIDER Set to ollama for local inference or gemini for cloud inference.
DEFAULT_MODEL The specific model string. Example: gemma3:4b or gemini-2.5-flash.
GEMINI_API_KEY Required only if LLM_PROVIDER is set to gemini.
GITHUB_TOKEN (Optional) A personal access token to prevent rate-limiting during repo enrichment.

Frontend (frontend/.env)

Variable Description
NEXT_PUBLIC_BACKEND_URL The URL of the FastAPI backend. Defaults to http://localhost:8000 if not provided. Essential for production hosting.
GEMINI_API_KEY Required for the Next.js API routes that interact directly with Gemini (e.g., Resume Builder).
GEMINI_MODEL (Optional) Model used for frontend generative features. Defaults to gemini-1.5-flash.
GITHUB_TOKEN (Optional) A personal access token to avoid rate limits if making GitHub API calls from frontend.

Usage Guide

  1. Navigate to http://localhost:3000 in your web browser.
  2. Click Upload Resume on the dashboard.
  3. Fill in the optional context fields:
    • Target Company Name
    • Target Job Title
    • Specific Job Description (for keyword matching)
    • GitHub Profile Override
  4. Drag and drop a valid .pdf, .docx, or .txt resume file.
  5. Click Analyze.
  6. Wait 15-30 seconds as the backend extracts the Markdown, parses the sections, communicates with the LLM, and scores the profile.
  7. Review your detailed, evidence-backed evaluation report!

(You can also test the backend REST API independently by visiting the auto-generated Swagger documentation at http://localhost:8000/docs).


Privacy and Fairness

Parsify is built with privacy and equity in mind:

  • Local Data: By utilizing Ollama, all resume processing can happen 100% locally on your machine, ensuring no PII (Personally Identifiable Information) is ever transmitted to third-party cloud providers.
  • Fairness Measures: The absence of a GitHub profile is explicitly configured not to be treated as a negative signal during the evaluation phase.
  • Human in the Loop: Parsify is designed as a tool to assist recruiters and candidates, not to make definitive hiring decisions. Always support AI evaluations with human review.

License

This project is licensed under the MIT License.

About

It is a resume parser that uses machine learning to extract information from resumes and match it with job descriptions

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages