A comprehensive job matching platform built with Django and React that uses AI-powered resume analysis and intelligent job matching to connect candidates with recruiters.
Experience the full functionality of APNA job platform with our live deployment on Vercel.
- Secure Authentication - Registration, login, and password reset with JWT tokens
- AI-Powered Resume Analysis - Upload resumes for automatic skill extraction using Google Gemini AI
- Intelligent Profile Verification - AI-generated scenario-based questions for profile verification
- Smart Job Matching - Get personalized job recommendations based on extracted skills
- Interactive Job Applications - Take custom tests created by HR teams
- Application Tracking - Monitor application status and view applied jobs
- Responsive Dashboard - Mobile-friendly interface for job management
- Comprehensive Job Posting - Create detailed job listings with custom requirements
- Custom Assessment Creation - Design scenario-based questions for candidate evaluation
- Candidate Management - View and evaluate applicant profiles and test results
- Advanced Filtering - Search and filter candidates based on various criteria
- Application Analytics - Track application metrics and candidate performance
- Resume Viewer - Access detailed candidate profiles and uploaded resumes
- Resume Text Extraction - Support for PDF resumes with OCR fallback using Tesseract
- Skill Identification - Automatic extraction of technical and soft skills
- Experience Analysis - Work history and project identification
- Question Generation - AI-generated interview questions based on candidate profile
- Intelligent Matching - Algorithm-based job-candidate matching system
- Framework: Django 5.1.6 with Django REST Framework
- Database: MongoDB with PyMongo
- Authentication: JWT (PyJWT) with bcrypt encryption
- AI Integration: Google Generative AI (Gemini)
- File Processing: PyMuPDF for PDF parsing, Tesseract OCR for text extraction
- Image Processing: Pillow for image manipulation
- CORS: django-cors-headers for cross-origin requests
- Framework: React 19.0.0 with Create React App
- Routing: React Router DOM 7.1.5
- Styling: TailwindCSS 3.2.4 with responsive design
- State Management: React Hooks (useState, useEffect)
- HTTP Client: Fetch API with cookie-based authentication
- UI Components: React Icons, React Toastify for notifications
- Cookie Management: js-cookie for token storage
- Package Managers: npm (Frontend), pip (Backend)
- Bundling: Webpack (via Create React App)
- PostCSS: Autoprefixer and TailwindCSS processing
- Build Tools: Django Extensions, Gunicorn for production
APNA/
├── Backend/ # Django Backend Application
│ ├── manage.py # Django management script
│ ├── requirements.txt # Python dependencies
│ ├── db.sqlite3 # SQLite database (development)
│ ├── backend/ # Main Django project configuration
│ │ ├── settings.py # Django settings and CORS configuration
│ │ ├── urls.py # Main URL routing
│ │ ├── wsgi.py # WSGI configuration
│ │ └── asgi.py # ASGI configuration
│ ├── apna/ # Main Django application
│ │ ├── models.py # Database models (using MongoDB)
│ │ ├── candidate_views.py # Candidate-related API endpoints
│ │ ├── hr_views.py # HR-related API endpoints
│ │ ├── urls.py # Application URL patterns
│ │ ├── admin.py # Django admin configuration
│ │ └── migrations/ # Database migrations
│ └── uploads/ # Resume file storage
│ ├── user@email.com/ # User-specific upload directories
│ └── ...
├── Frontend/ # React Frontend Application
│ ├── package.json # NPM dependencies and scripts
│ ├── tailwind.config.js # TailwindCSS configuration
│ ├── postcss.config.js # PostCSS configuration
│ ├── public/ # Static assets
│ │ ├── index.html # Main HTML template
│ │ ├── favicon.ico # Application icon
│ │ └── manifest.json # PWA manifest
│ └── src/ # React source code
│ ├── App.js # Main application component with routing
│ ├── index.js # React entry point
│ ├── components/ # Reusable UI components
│ │ ├── HrNavbar.js # HR navigation component
│ │ ├── ApplicantNavbar.js # Candidate navigation component
│ │ └── PasswordStrengthBar.js # Password validation component
│ └── pages/ # Page components
│ ├── Landing.js # Homepage
│ ├── Candidate/ # Candidate-specific pages
│ │ ├── CandidateLogin.js
│ │ ├── CandidateRegister.js
│ │ ├── CandidateDashboard.js
│ │ ├── CandidateProfile.js
│ │ ├── CandidateResumeUpload.js
│ │ ├── Jobs.js
│ │ ├── JobsForYou.js
│ │ └── JobPreview.js
│ └── HR/ # HR-specific pages
│ ├── Login.js
│ ├── Register.js
│ ├── HrDashboard.js
│ ├── HRProfile.js
│ ├── PostJob.js
│ └── CandidateDetails.js
└── README.md # Project documentation
- Python 3.8+ with pip
- Node.js 14+ with npm
- MongoDB Atlas account or local MongoDB installation
- Google AI API key (for Gemini integration)
- Tesseract OCR (for resume text extraction)
-
Clone the repository
git clone https://github.com/Hariharanpugazh/APNA.git cd APNA/Backend -
Create virtual environment
python -m venv venv # Windows venv\Scripts\activate # Linux/Mac source venv/bin/activate
-
Install dependencies
pip install -r requirements.txt
-
Install Tesseract OCR
- Windows: Download from GitHub Tesseract
- Linux:
sudo apt-get install tesseract-ocr - Mac:
brew install tesseract
-
Configure environment variables Update
backend/settings.pywith your MongoDB connection string and Google AI API key incandidate_views.py -
Run the development server
python manage.py runserver
The backend will be available at
http://localhost:8000
-
Navigate to frontend directory
cd ../Frontend -
Install dependencies
npm install
-
Start the development server
npm start
The frontend will be available at
http://localhost:3000
The application uses MongoDB for data storage. Update the connection string in both view files:
client = MongoClient('mongodb+srv://username:password@cluster.mongodb.net/')Configure Google Gemini AI in candidate_views.py:
genai.configure(api_key="your-google-ai-api-key")The backend is configured to allow requests from the React frontend. Update CORS_TRUSTED_ORIGINS in settings.py if needed.
{
_id: ObjectId,
name: String,
email: String,
password: String (hashed),
otp: Number,
otp_expiry: DateTime,
resume_skills: [String],
work_experience: [String],
projects: [String],
generated_questions: [{
question: String,
keyword: String/Array
}],
profile_status: String // "Pending" | "Verified"
}{
_id: ObjectId,
name: String,
email: String,
password: String (hashed),
otp: Number,
otp_expiry: DateTime
}{
_id: ObjectId,
hr_id: ObjectId,
job_title: String,
company_name: String,
job_description: String,
contact_email: String,
application_deadline: String,
work_type: String,
job_location: String,
category: String,
skills_required: String/Array,
salary: Number,
experience: Number,
pass_percentage: Number,
hr_questions: [{
question: String,
keyword: String/Array
}],
selected_candidates: [Object],
applied_candidates: [Object]
}POST /apna/register/- Candidate registrationPOST /apna/login/- Candidate loginPOST /apna/forgot-password/- Password reset requestPOST /apna/reset-password/- Password reset confirmation
POST /apna/hr_register/- HR registrationPOST /apna/hr_login/- HR loginPOST /apna/hr_forgot-password/- HR password reset requestPOST /apna/hr_reset-password/- HR password reset confirmation
GET /apna/candidate_profile/- Get candidate profileGET /apna/get_all_jobs/- Fetch all available jobsGET /apna/get_job_details/<job_id>/- Get specific job detailsPOST /apna/apply_job/- Apply for a job with test submissionGET /apna/check_application_status/<job_id>/- Check application statusGET /apna/get_applied_jobs/- Get candidate's applied jobsPOST /apna/upload_resume/- Upload and analyze resumePOST /apna/candidate_test/- Submit profile verification testGET /apna/get_matched_jobs/- Get AI-matched job recommendations
GET /apna/get_hr_profile/- Get HR profilePOST /apna/post_job/- Create new job postingGET /apna/get_jobs/- Get HR's posted jobsGET /apna/get_selected_candidates/<job_id>/- Get candidates for a jobGET /apna/candidate/<email>- Get specific candidate detailsDELETE /apna/delete_job/<job_id>/- Delete job posting
cd Backend
python manage.py testcd Frontend
npm testpip install gunicorn
gunicorn backend.wsgi:application --bind 0.0.0.0:8000npm run build
# Serve the build folder using a web server- Set
DEBUG = Falsein Django settings - Configure proper
ALLOWED_HOSTS - Use environment variables for sensitive data
- Set up proper CORS origins
- Configure MongoDB with authentication
- Password Hashing: bcrypt encryption for all passwords
- JWT Authentication: Secure token-based authentication
- CORS Protection: Configured cross-origin request handling
- Input Validation: Server-side validation for all inputs
- File Upload Security: Restricted file types and size limits
- SQL Injection Prevention: MongoDB parameterized queries
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Developer: Hariharan Pugazh , Kavin-Bakyaraj
- Repository: GitHub - APNA
- Resume OCR processing may require Tesseract path configuration on Windows
- Large PDF files may take longer to process
- MongoDB connection needs proper network access configuration
- Real-time chat between candidates and HR
- Video interview integration
- Advanced analytics dashboard
- Mobile application development
- Integration with LinkedIn and other job platforms
- Machine learning model improvements
- Multi-language support
- Email notification system
- Calendar integration for interviews
For support and questions, please create an issue in the GitHub repository or contact the development team.
Built with ♥ using Django, React, and AI technologies