A powerful and intuitive CV management system for companies to streamline their hiring process. This application automatically ranks candidates based on their CVs against open job positions, leveraging the power of Large Language Models (LLMs) for intelligent analysis.
CV Handler is a comprehensive solution for managing job applications. It combines a modern React frontend for seamless user interaction with a robust Python backend for advanced AI processing. The system allows recruiters to create job postings, upload candidate CVs, and receive detailed, AI-driven evaluations of each candidate's suitability for specific roles.
- Job Position Management: Create, edit, and manage job positions with detailed descriptions and requirements.
- CV Upload and Parsing: Easily upload CVs (PDF). The system securely stores them and automatically extracts text for analysis.
- AI-Powered Ranking: A dedicated Python service uses LLMs (Google Gemini, Ollama, etc.) to analyze CVs against job descriptions, providing a match score (0-100%) and detailed reasoning.
- Smart Score Sorting: Candidates are automatically sorted by their match score, ensuring the best fits are always visible at the top.
- Deep Linking: Selecting a candidate from a specific job list automatically opens their profile with that job's evaluation pre-selected.
- Detailed Candidate Profiles: View comprehensive candidate details, including experience, education, skills, "Green/Red Flags," and a professional summary.
- Secure Access: CVs are stored in private buckets with secure, temporary signed URL access.
- React: UI library.
- TypeScript: Type safety.
- Vite: Build tool.
- Tailwind CSS: Styling.
- shadcn/ui: UI components.
- React Query: Data fetching and state management.
- Supabase: Database (PostgreSQL), Authentication, and Storage.
- Python: Backend logic for CV processing.
- LLM Providers:
- Google Gemini: Default provider for high-quality analysis.
- Ollama: Supported for local LLM inference.
The application follows a decoupled architecture:
- Frontend (React): Handles user interaction, displays data, and uploads files to Supabase Storage.
- Database (Supabase): Stores job postings, candidate metadata, and evaluation scores.
- Backend Service (Python):
- Monitors the database for new candidates/jobs.
- Downloads CVs from Supabase Storage.
- Sends content to the configured LLM for analysis.
- Writes structured evaluation results (scores, analysis) back to the database.
Follow these steps to set up the project locally.
- Node.js & npm
- Python 3.8+
- Supabase Account
git clone https://github.com/your_username/cv_handler.git
cd cv_handler- Install dependencies:
npm install
- Create a
.envfile in the root directory:VITE_SUPABASE_URL=your_supabase_url VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
- Start the development server:
npm run dev
-
Navigate to the backend directory:
cd backend -
Create a virtual environment:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install Python dependencies:
pip install -r requirements.txt
(Note: Ensure you have
supabase,google-generativeai,PyMuPDF,python-dotenv,pyyamlinstalled if requirements.txt is missing) -
Create a
.envfile in thebackenddirectory:VITE_SUPABASE_URL=your_supabase_url SUPABASE_SERVICE_ROLE_KEY=your_service_role_key GOOGLE_API_KEY=your_google_gemini_key
> [!IMPORTANT]
You must use the
SERVICE_ROLE_KEYfor the backend to bypass Row Level Security (RLS) and access all data. -
Configure the LLM in
config.yaml(optional):llm: provider: "google" # or "ollama" model: "gemini-2.0-flash"
To process CVs and generate rankings, run the script:
python process_cvs.pyYou can set this up as a cron job or run it periodically.
Distributed under the MIT License.