🚀 Status: Live & Deployed
📱 Frontend: https://resumatch-front-4nts.vercel.app
🔧 Backend: https://resumatch-backend-q5qo.onrender.com
🗄️ Database: MongoDB Atlas
Frontend: https://resumatch-front-4nts.vercel.app
- Student Experience:
- Create account → Upload resume → Get AI matches → Apply to jobs → Chat with recruiters
- Recruiter Experience:
- Create account → Post jobs → Review applications → Chat with candidates
- AI Features:
- Resume analysis with skill extraction
- Job matching algorithm
- Mock interview questions
Backend API: https://resumatch-backend-q5qo.onrender.com
- Health Check: /healthz
- Interactive Docs: /docs
- OpenAPI Schema: /openapi.json
- Overview
- Features
- Technology Stack
- Project Structure
- Setup & Installation
- Environment Variables
- API Documentation
- Deployment Guide
- User Workflows
- Contributing
ResuMatch is an intelligent platform that connects students and recruiters through AI-powered resume analysis and job matching. The platform uses Google Gemini AI to analyze resumes, match candidates with suitable jobs, and conduct mock interviews to help students prepare for real interviews.
- Frontend Application: https://resumatch-frontend-hazel.vercel.app
- Backend API: https://resumatch-backend-q5qo.onrender.com
- API Health Check: https://resumatch-backend-q5qo.onrender.com/healthz
- API Documentation: https://resumatch-backend-q5qo.onrender.com/docs
- Visit the live application
- Sign up as a Student or Recruiter
- Students: Upload your resume and get AI-powered job matches
- Recruiters: Post jobs and find qualified candidates
- Use real-time chat to communicate with each other
- 📄 Smart Resume Analysis: Upload PDF resumes and get AI-powered analysis with skill extraction
- 🎯 Job Matching: Get top 3 job recommendations based on resume analysis and skills
- 💬 Real-time Chat: Communicate with recruiters through Socket.IO powered messaging
- 🎤 Mock Interviews: Practice with AI-generated interview questions tailored to your profile
- 📊 Application Tracking: Track job applications and their status
- 📝 Job Posting: Create and manage job listings with detailed requirements
- 👥 Candidate Management: View and manage job applicants
- 💬 Direct Communication: Chat with potential candidates in real-time
- 🔍 Resume Screening: AI-assisted candidate evaluation and matching
- 🔐 Secure Authentication: JWT-based auth with role-based access control
- 🌓 Dark/Light Mode: Toggle between themes for better user experience
- 📱 Responsive Design: Works seamlessly across desktop and mobile devices
- ⚡ Real-time Updates: Live notifications and messaging with Socket.IO
- FastAPI - Modern Python web framework for building APIs
- Socket.IO - Real-time bidirectional communication
- MongoDB Atlas - Cloud database for storing user data, jobs, and messages
- Google Gemini AI - AI model for resume analysis and interview questions
- JWT - Secure authentication and authorization
- PyPDF2 - PDF processing for resume text extraction
- Uvicorn - ASGI server for FastAPI
- React 18 - Modern UI library with hooks and context
- TypeScript - Type-safe JavaScript for better development experience
- Vite - Fast build tool and development server
- Tailwind CSS - Utility-first CSS framework for styling
- Socket.IO Client - Real-time communication with backend
- Axios - HTTP client for API calls
- React Router - Client-side routing
- Render - Backend hosting platform
- Vercel - Frontend hosting platform
- GitHub - Version control and CI/CD
- Environment Variables - Secure configuration management
resumatch/
├── backend/ # FastAPI Backend
│ ├── auth/ # Authentication & JWT handling
│ │ ├── auth_utils.py # Password hashing, verification
│ │ ├── dependencies.py # Auth dependencies for routes
│ │ └── jwt_handler.py # JWT token creation/validation
│ ├── database/ # Database connections
│ │ └── mongo.py # MongoDB connection & collections
│ ├── models/ # Pydantic data models
│ │ ├── user.py # User model (Student/Recruiter)
│ │ ├── job.py # Job posting model
│ │ └── message.py # Chat message model
│ ├── routes/ # API route handlers
│ │ ├── auth_routes.py # Login, signup, logout
│ │ ├── student_routes.py # Resume upload, job matching
│ │ ├── recruiter_routes.py # Job posting, applicant management
│ │ ├── job_routes.py # Job search, application
│ │ └── chat_routes.py # Message history endpoints
│ ├── services/ # Business logic
│ │ └── chat_service.py # Chat management service
│ ├── sockets/ # Socket.IO handlers
│ │ ├── chat_server.py # Real-time chat implementation
│ │ ├── chat_client.py # Socket client for testing
│ │ └── chat_example.py # Usage examples
│ ├── utils/ # Utility functions
│ │ ├── password.py # Password utilities
│ │ └── parser/ # AI & parsing utilities
│ │ ├── gemini_client.py # Google Gemini AI integration
│ │ ├── resume_parser.py # PDF text extraction
│ │ └── job_matcher.py # Job matching algorithm
│ ├── scripts/ # Setup scripts
│ │ ├── setup_mongodb.py # Database initialization
│ │ └── setup_admin.py # Admin user creation
│ ├── main.py # FastAPI application entry point
│ ├── config.py # Configuration settings
│ └── requirements.txt # Python dependencies
│
├── frontend/ # React Frontend
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ │ ├── Layout.tsx # Main app layout
│ │ │ ├── LoadingSpinner.tsx # Loading indicator
│ │ │ ├── ErrorBoundary.tsx # Error handling
│ │ │ └── DarkModeToggle.tsx # Theme switcher
│ │ ├── pages/ # Page components
│ │ │ ├── LoginPage.tsx # User authentication
│ │ │ ├── SignupPage.tsx # User registration
│ │ │ ├── StudentDashboard.tsx # Student main page
│ │ │ ├── RecruiterDashboard.tsx # Recruiter main page
│ │ │ ├── ResumeUploadPage.tsx # Resume analysis
│ │ │ ├── JobListPage.tsx # Job search & browsing
│ │ │ ├── JobDetailsPage.tsx # Individual job details
│ │ │ ├── ChatPage.tsx # Real-time messaging
│ │ │ ├── MockInterviewPage.tsx # AI interview practice
│ │ │ ├── PostJobPage.tsx # Job creation (recruiters)
│ │ │ └── MyJobsPage.tsx # Job management
│ │ ├── services/ # API communication
│ │ │ ├── api.ts # Axios configuration
│ │ │ ├── authService.ts # Authentication API
│ │ │ ├── studentService.ts # Student-specific API
│ │ │ ├── recruiterService.ts # Recruiter-specific API
│ │ │ ├── jobService.ts # Job-related API
│ │ │ ├── resumeService.ts # Resume analysis API
│ │ │ └── chatService.ts # Chat/messaging API
│ │ ├── context/ # React Context providers
│ │ │ ├── AuthContext.tsx # Authentication state
│ │ │ ├── ThemeContext.tsx # Dark/light mode
│ │ │ └── ChatContext.tsx # Chat state management
│ │ ├── hooks/ # Custom React hooks
│ │ │ ├── useApi.ts # API calling hook
│ │ │ ├── useLoading.ts # Loading state hook
│ │ │ └── useJobs.ts # Job data hook
│ │ ├── types/ # TypeScript type definitions
│ │ │ └── index.ts # All type definitions
│ │ └── utils/ # Utility functions
│ │ ├── auth.ts # Auth helper functions
│ │ └── helpers.ts # General utilities
│ ├── public/ # Static assets
│ ├── package.json # Node.js dependencies
│ ├── vite.config.ts # Vite configuration
│ ├── tailwind.config.js # Tailwind CSS configuration
│ └── tsconfig.json # TypeScript configuration
│
├── .gitignore # Git ignore rules
└── README.md # This file
- MongoDB Atlas account (free tier available)
- Google Cloud account (for Gemini AI API)
- Render account (for backend deployment)
- Vercel account (for frontend deployment)
git clone https://github.com/bipaulr/ResuMatch.git
cd ResuMatch- Connect this repository to Render
- Create Web Service with these settings:
- Root Directory:
backend - Build Command:
pip install -r requirements.txt - Start Command:
uvicorn main:api --host 0.0.0.0 --port $PORT
- Root Directory:
- Add environment variables:
MONGODB_URI=your_mongodb_atlas_connection_string JWT_SECRET=your_secure_random_secret GOOGLE_API_KEY=your_google_gemini_api_key ALLOWED_ORIGINS=https://your-frontend.vercel.app
- Connect this repository to Vercel
- Set root directory to
frontend - Add environment variables:
VITE_API_BASE_URL=https://your-backend.onrender.com VITE_SOCKET_PATH=/ws/socket.io
- Create free M0 cluster
- Create database user
- Add network access (0.0.0.0/0 for deployment)
- Get connection string
- Visit Google AI Studio
- Create API key
- Add to backend environment variables
# Server Configuration
ALLOWED_ORIGINS=http://localhost:5173,https://your-frontend-domain.vercel.app
JWT_SECRET=your_super_secret_jwt_key_change_this_in_production
JWT_EXPIRES_IN=86400
# Database
MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/resumatch?retryWrites=true&w=majority
# AI Configuration
GOOGLE_API_KEY=your_google_gemini_api_key
GEMINI_MODEL=gemini-1.5-flash# API Configuration
VITE_API_BASE_URL=http://localhost:8000
VITE_SOCKET_PATH=/ws/socket.ioRender (Backend):
ALLOWED_ORIGINS: Your Vercel domain(s)MONGODB_URI: MongoDB Atlas connection stringJWT_SECRET: Strong secret keyGOOGLE_API_KEY: Google Cloud API key
Vercel (Frontend):
VITE_API_BASE_URL: Your Render backend URLVITE_SOCKET_PATH:/ws/socket.io
POST /auth/signup- Register new userPOST /auth/login- User loginGET /auth/me- Get current user info
POST /student/upload-resume- Upload and analyze resumeGET /student/job-matches- Get matched jobsPOST /student/apply/{job_id}- Apply to a jobGET /student/applications- Get user's applications
POST /recruiter/jobs- Create new job postingGET /recruiter/jobs- Get recruiter's jobsGET /recruiter/jobs/{job_id}/applicants- Get job applicants
GET /jobs- Search and filter jobsGET /jobs/{job_id}- Get job details
GET /chat/messages/{room_id}- Get chat history- WebSocket:
/ws/socket.io- Real-time messaging
- Create free MongoDB Atlas account
- Create a new cluster (M0 free tier)
- Create database user with read/write permissions
- Add IP addresses to network access (0.0.0.0/0 for development)
- Get connection string and update
MONGODB_URI
- Create Google Cloud project
- Enable Gemini API
- Create API key
- Update
GOOGLE_API_KEYin environment variables
- Push code to GitHub
- Create new Web Service on Render
- Connect GitHub repository
- Set root directory to
backend - Set build command:
pip install -r requirements.txt - Set start command:
uvicorn main:api --host 0.0.0.0 --port $PORT - Add environment variables
- Deploy and test
/healthzendpoint
- Create new project on Vercel
- Connect GitHub repository
- Set root directory to
frontend - Set build command:
npm run build - Set output directory:
dist - Add environment variables
- Deploy and test the application
- Update
ALLOWED_ORIGINSin Render with your Vercel domain - Update
VITE_API_BASE_URLin Vercel with your Render domain - Test complete workflow: signup → login → resume upload → job matching → chat
- Sign Up/Login → Create account with student role
- Upload Resume → PDF analysis with AI skill extraction
- View Matches → Get top 3 recommended jobs based on skills
- Browse Jobs → Search and filter available positions
- Apply to Jobs → Submit applications with one click
- Chat with Recruiters → Real-time communication
- Mock Interview → Practice with AI-generated questions
- Track Applications → Monitor application status
- Sign Up/Login → Create account with recruiter role
- Post Jobs → Create detailed job listings with requirements
- Manage Listings → View and edit posted jobs
- Review Applicants → See candidate profiles and resumes
- Chat with Candidates → Direct communication with applicants
- Evaluate Candidates → AI-assisted matching and screening
- Authentication: JWT tokens for secure API access
- File Upload: PDF processing and text extraction
- AI Analysis: Gemini API for skill extraction and matching
- Real-time Chat: Socket.IO for instant messaging
- Data Persistence: MongoDB for all user data and relationships
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open Pull Request
This project is licensed under the MIT License.
- CORS Errors: Ensure
ALLOWED_ORIGINSincludes your frontend domain - Socket.IO Connection: Check
VITE_SOCKET_PATHmatches backend mount point - File Upload: Verify PDF files are valid and readable
- AI Responses: Check Google API key and quota limits
- Create an issue on GitHub for bugs
- Check API documentation at
/docsendpoint - Verify environment variables are correctly set
Built with ❤️ by the ResuMatch Team