Skip to content

AI-powered recruitment suite to rank resumes, analyze for ATS compatibility, and generate interview questions using LLM .

Notifications You must be signed in to change notification settings

Tejas164321/AI-Recruiter

Repository files navigation

AI Recruiter πŸš€

An AI-powered suite designed to streamline and revolutionize your recruitment workflow.

AI Recruiter Hero

πŸ“ Overview

AI Recruiter is a modern, full-stack web application built to help recruiters and hiring managers make smarter, faster, and data-driven hiring decisions. By leveraging the power of Google's Gemini AI through Genkit, this platform automates the tedious tasks of resume screening, candidate ranking, and interview preparation, allowing you to focus on what truly matters: finding the best talent.

This project is built with a production-ready stack and serves as a comprehensive example of integrating modern web technologies with cutting-edge AI capabilities.


✨ Key Features

  • 🧠 AI Resume Ranker: Upload multiple job descriptions and resumes to intelligently rank candidates. The AI provides a match score, ATS compatibility score, and detailed feedback for each candidate.
  • πŸ“Š ATS Score Finder: Analyze individual resumes for Applicant Tracking System (ATS) compatibility. Get actionable suggestions to optimize resumes for automated screening processes.
  • ❓ AI Interview Question Generator: Automatically generate a comprehensive set of technical, behavioral, situational, and role-specific interview questions by simply uploading a job description.
  • πŸ” Secure Authentication & Data Storage: Built-in user authentication (Sign Up/Login) powered by Firebase Authentication. All user data, including uploaded roles and screening results, is securely stored in Firestore and tied to the user's account.
  • πŸ“± Fully Responsive Design: A sleek and modern UI built with ShadCN and Tailwind CSS, ensuring a seamless experience on both desktop and mobile devices.
  • 🎨 Light & Dark Mode: A beautiful, themeable interface that respects user preferences.

πŸ› οΈ Tech Stack


πŸ—οΈ Architecture Diagram

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                            ResumeRank AI Architecture                       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                      β”‚
                                      β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                           User Interface Layer                              β”‚
β”‚                                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚
β”‚  β”‚   Landing Page  β”‚  β”‚   Dashboard     β”‚  β”‚   Auth Pages    β”‚              β”‚
β”‚  β”‚   (Next.js)     β”‚  β”‚   (Protected)   β”‚  β”‚   (Login/Signup)β”‚              β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚
β”‚                                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚
β”‚  β”‚ Resume Ranker   β”‚  β”‚ ATS Score Finderβ”‚  β”‚ Interview Q Gen β”‚              β”‚
β”‚  β”‚   Feature       β”‚  β”‚   Feature       β”‚  β”‚   Feature       β”‚              β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚
β”‚                                                                             β”‚
β”‚  Built with: Next.js (App Router), React, ShadCN UI, Tailwind CSS           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                      β”‚
                                      β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        Authentication & Data Layer                          β”‚
β”‚                                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚
β”‚  β”‚ Firebase Auth   β”‚  β”‚ Firestore DB    β”‚  β”‚ User Sessions   β”‚              β”‚
β”‚  β”‚ (Email/Password)β”‚  β”‚ (NoSQL)         β”‚  β”‚ (Secure)        β”‚              β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚
β”‚                                                                             β”‚
β”‚    Stores: User data, Job Descriptions, Resumes, Screening Results          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                      β”‚
                                      β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                            AI Processing Layer                              β”‚
β”‚                                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚
β”‚  β”‚   Genkit Flows  β”‚  β”‚   AI Prompts    β”‚  β”‚   Data Analysis β”‚              β”‚
β”‚  β”‚  (Server Actionsβ”‚  β”‚   (Structured)  β”‚  β”‚   (Resume/JD)   β”‚              β”‚
β”‚  β”‚   in Next.js)   β”‚  β”‚                 β”‚  β”‚                 β”‚              β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚
β”‚                                                                             β”‚
β”‚  Flows: Rank Candidates, Calculate ATS Score, Generate Interview Questions  β”‚
β”‚                                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                        β”‚
β”‚  β”‚ Google AI Geminiβ”‚                                                        β”‚
β”‚  β”‚   (LLM Model)   β”‚                                                        β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                        β”‚
β”‚                                                                             β”‚
β”‚  Powered by: Genkit Framework, Google AI API                                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                      β”‚
                                      β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                            Deployment & Hosting                             β”‚
β”‚                                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”‚
β”‚  β”‚ Firebase App    β”‚  β”‚   CI/CD         β”‚  β”‚   Environment   β”‚              β”‚
β”‚  β”‚   Hosting       β”‚  β”‚   (GitHub)      β”‚  β”‚   Variables     β”‚              β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β”‚
β”‚                                                                             β”‚
β”‚          Ready for production deployment with Firebase                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Architecture Description

The architecture of ResumeRank AI is designed as a modern, scalable full-stack web application that integrates cutting-edge AI capabilities with robust backend services. It follows a layered architecture pattern to ensure separation of concerns, maintainability, and extensibility.

1. User Interface Layer

  • Technology: Next.js with App Router, React components, ShadCN UI library, Tailwind CSS for styling.
  • Purpose: Provides the frontend interface for user interactions, including landing pages, authentication forms, dashboard, and feature-specific pages (Resume Ranker, ATS Score Finder, Interview Question Generator).
  • Key Features: Responsive design, light/dark mode support, drag-and-drop file uploads, real-time loading indicators, and toast notifications.
  • Data Flow: Handles user input (file uploads, form submissions), displays results, and manages client-side state with React contexts (AuthContext, LoadingContext).

2. Authentication & Data Layer

  • Technology: Firebase Authentication and Firestore NoSQL database.
  • Purpose: Manages user authentication (email/password), session handling, and secure data storage.
  • Data Storage: User profiles, uploaded job descriptions (as data URIs), candidate resumes, screening results, and generated interview questions.
  • Security: All data is tied to authenticated users, ensuring privacy and data isolation.

3. AI Processing Layer

  • Technology: Genkit framework integrated with Google AI's Gemini 2.0 Flash model.
  • Purpose: Handles all AI-driven operations through structured flows and prompts.
  • Key Components:
    • AI Flows: Server-side functions (rank-candidates, calculate-ats-score, extract-job-roles, generate-jd-interview-questions) that orchestrate AI processing.
    • Prompts: Structured prompts that guide the LLM to perform specific tasks like resume analysis, scoring, and question generation.
    • Data Processing: Converts uploaded files to data URIs for AI consumption, processes AI responses, and formats results for frontend display.
  • AI Capabilities: Leverages Gemini's natural language understanding for intelligent candidate ranking, ATS compatibility analysis, and contextual interview question creation.

4. Deployment & Hosting Layer

  • Technology: Firebase App Hosting for seamless deployment, GitHub Actions for CI/CD.
  • Purpose: Ensures reliable, scalable hosting with automatic builds and environment management.
  • Configuration: Environment variables for API keys, Firebase config, and other secrets.

Data Flow Overview

  1. User Interaction: User uploads job descriptions and resumes via the UI.
  2. Authentication: Firebase Auth verifies user identity.
  3. Data Storage: Files are temporarily processed and stored in Firestore.
  4. AI Processing: Genkit flows invoke Google AI Gemini to analyze documents and generate results.
  5. Result Delivery: Processed data (scores, feedback, questions) is stored and displayed to the user.
  6. Persistence: All results are saved in Firestore for future access and analysis.

This architecture ensures high performance, security, and scalability while providing a seamless user experience for AI-powered recruitment workflows.


πŸš€ Getting Started

Follow these instructions to get a copy of the project up and running on your local machine for development and testing purposes.

Prerequisites

1. Clone the Repository

git clone https://github.com/your-username/resumerank-ai.git
cd resumerank-ai

2. Install Dependencies

npm install

3. Set Up Environment Variables

You'll need to provide your secret keys for Firebase and Google AI. Create a file named .env.local in the root of the project by copying the example file:

cp .env.example .env.local

Now, open .env.local and fill in the required values.

How to get your Firebase credentials:

  1. Go to your Firebase Console.
  2. Create a new project (or select an existing one).
  3. In your project, go to Project Settings (the gear icon).
  4. Under the "General" tab, scroll down to "Your apps".
  5. Click the Web icon (</>) to create a new web app.
  6. Give it a nickname and register the app.
  7. Firebase will provide you with a firebaseConfig object. Copy the values from this object into the corresponding NEXT_PUBLIC_FIREBASE_* variables in your .env.local file.
  8. Enable Authentication (with Email/Password provider) and Firestore Database in the Firebase console.

How to get your Google AI API key:

  1. Visit Google AI Studio.
  2. Click "Create API key in new project".
  3. Copy the generated API key and paste it as the GOOGLE_API_KEY value in your .env.local file.

4. Run the Development Server

Once your environment variables are set, you can run the application:

npm run dev

The application should now be running on http://localhost:3000.


πŸ“ Folder Structure

The project follows a standard Next.js App Router structure with some key directories:

/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ app/                # Main application pages and layouts
β”‚   β”œβ”€β”€ ai/                 # Genkit AI flows and configuration
β”‚   β”œβ”€β”€ components/         # Reusable UI components
β”‚   β”œβ”€β”€ contexts/           # React contexts (Auth, Loading)
β”‚   β”œβ”€β”€ hooks/              # Custom React hooks (useToast)
β”‚   β”œβ”€β”€ lib/                # Libraries, utilities, and type definitions
β”‚   └── services/           # Firestore service functions
β”œβ”€β”€ public/                 # Static assets (images, fonts)
└── .env.local              # Your secret environment variables (ignored by Git)

About

AI-powered recruitment suite to rank resumes, analyze for ATS compatibility, and generate interview questions using LLM .

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages