An intelligent, AI-powered career platform that revolutionizes the job hunting experience through automated resume enhancement, intelligent job matching, AI mock interviews, corporate fellowships, and community-driven networking.
Live Demo β’ Features β’ Tech Stack β’ Getting Started β’ API Reference β’ Architecture β’ Contributing
- Overview
- Problem Statement
- Our Solution
- Features
- Tech Stack
- Getting Started
- Project Structure
- API Routes
- Feature Details
- Deployment
- Documentation
- Real-World Use Cases
- Contributing
- License
The AI Resume Builder & Career Platform is a comprehensive full-stack application designed to streamline and enhance the job search process. By leveraging cutting-edge AI technology (Google Gemini 2.5), real-time communication via Socket.IO, and intelligent automation through BullMQ job queues, this platform provides job seekers with powerful tools to:
- Create ATS-optimized resumes tailored to specific job roles
- Receive personalized job alerts based on custom preferences
- Track job applications through an intuitive pipeline interface
- Connect with fellow job seekers through a real-time community platform
- Get AI-powered insights and improvement suggestions
-
Resume Optimization Struggles: Job seekers spend countless hours formatting resumes without knowing if they'll pass Applicant Tracking Systems (ATS)
-
Information Overload: With thousands of job postings across multiple platforms, finding relevant opportunities is overwhelming
-
Application Tracking Chaos: Managing applications across different companies leads to missed follow-ups and forgotten deadlines
-
Isolation in Job Search: The job hunting process is often lonely, with limited access to peer support and shared experiences
-
Skill Gap Identification: Difficulty understanding what skills to highlight or develop for target roles
-
Time-Consuming Process: Manual job searching, resume customization, and application tracking consumes significant time
| Challenge | Solution |
|---|---|
| Resume Optimization | AI-powered resume enhancement using Google Gemini 2.5 with ATS scoring and Harvard-format templates |
| Information Overload | Smart job alerts with customizable filters (keywords, location, salary, employment type) |
| Application Tracking | Visual Kanban-style job tracker with status management (Saved β Applied β Interviewing β Offered) |
| Isolation | Real-time community platform with channels, posts, direct messaging, and presence indicators |
| Skill Gaps | AI-generated improvement suggestions and professional summary generation |
| Time Consumption | Automated job fetching, bulk processing via queues, and one-click resume downloads |
- Smart Resume Enhancement: Transform ordinary resumes into ATS-optimized documents
- Professional Summary Generation: AI-crafted summaries tailored to target roles
- Improvement Suggestions: Actionable recommendations to strengthen your resume
- ATS Score Analysis: Get compatibility scores with detailed feedback
- Harvard Template Formatting: Industry-standard resume formatting
- PDF Upload & Parsing: Extract text from uploaded PDF resumes
- Multiple Resume Support: Manage different versions for various roles
- PDF Download: Export enhanced resumes as professional PDFs
- Version History: Track original and enhanced versions
- Custom Alert Creation: Set preferences for keywords, location, salary range
- Remote Work Filters: Find remote-only opportunities
- Employment Type Selection: Full-time, Part-time, Contract, Internship
- Email Notifications: Receive new job matches directly in your inbox
- Real-time Socket Updates: Instant in-app notifications when new jobs match
Note: By default, job alerts use the cron schedule
0 0 */2 * *to reduce API costs. This means they run at midnight on every other day of the month (a day-of-month step), not on a strict 48-hour interval, so behavior can differ around month boundaries. You can override this schedule with theALERT_CRON_SCHEDULEenvironment variable.
- Visual Pipeline: Kanban-style board for application status
- Status Management: Track from Saved β Applied β Interviewing β Offered β Rejected
- Notes & Comments: Add personal notes to each application
- Statistics Dashboard: Overview of application metrics
- Quick Actions: Easy status updates and job removal
- Real-time Channels: Topic-based discussion channels
- Posts & Feed: Share experiences, tips, and opportunities
- Comments & Reactions: Engage with community content
- Direct Messaging: Private conversations with other members
- Presence Indicators: See who's online in real-time
- Member Discovery: Find and connect with fellow job seekers
- Corporate Challenges: Companies post real-world challenges for students
- Student Proposals: Students submit proposals with cover letters and pricing
- Proposal Review: Companies review, accept, or reject proposals
- Escrow Payments: Razorpay integration for secure payments
- Real-time Chat: Direct messaging between corporate and students
- Challenge Completion: Fund release upon satisfactory completion
- Student Verification: Academic email verification system
- Mock Interviews: AI-powered interview simulations
- Role-Specific Questions: Tailored questions based on target role
- Real-time Feedback: Instant AI evaluation of responses
- Performance Scoring: Detailed scoring with improvement suggestions
- Interview History: Track progress across multiple sessions
- Multi-Round Support: Technical, behavioral, and HR round simulations
- Secure Payments: PCI-DSS compliant payment processing
- Multiple Payment Methods: UPI, Cards, NetBanking, Wallets, QR Code
- Escrow System: Funds held securely until work completion
- Fund Release: One-click release when satisfied with deliverables
- Payment History: Complete transaction tracking
- Firebase Authentication: Secure email/password and Google OAuth
- JWT Token Verification: Protected API endpoints
- Rate Limiting: Protection against abuse
- Helmet Security Headers: Enhanced HTTP security
| Technology | Purpose |
|---|---|
| React 19 | UI library with latest features |
| Vite 7 | Fast build tool and dev server |
| TailwindCSS 4 | Utility-first CSS framework |
| Framer Motion | Animation library |
| React Router 7 | Client-side routing |
| Socket.IO Client | Real-time communication |
| Firebase SDK | Authentication & client services |
| Zustand | State management |
| React Hook Form | Form handling |
| Lucide React | Icon library |
| Technology | Purpose |
|---|---|
| Node.js 18+ | JavaScript runtime |
| Express.js | Web framework |
| Socket.IO | WebSocket server |
| Firebase Admin SDK | Server-side Firebase services |
| MongoDB + Mongoose | Database & ODM |
| BullMQ + IORedis | Job queue for background tasks |
| Google Gemini AI | AI/ML for resume enhancement & interviews |
| Razorpay | Payment processing & escrow |
| Nodemailer | Email notifications |
| PDFKit | PDF generation |
| Node-Cron | Scheduled tasks |
| Technology | Purpose |
|---|---|
| Firebase | Auth, Firestore, Storage |
| MongoDB Atlas | Cloud database |
| Redis | Queue backend |
| RapidAPI | Job search integration |
- Node.js 18.0 or higher
- npm or yarn
- MongoDB instance (local or Atlas)
- Redis instance (for job queue)
- Firebase project with Firestore enabled
- Google Gemini API key
- RapidAPI key (for job fetching)
# Server
PORT=5000
NODE_ENV=development
FRONTEND_URL=http://localhost:5173
# MongoDB
MONGODB_URI=mongodb://localhost:27017/career-pilot
# Firebase Admin
FIREBASE_PROJECT_ID=your-project-id
FIREBASE_STORAGE_BUCKET=your-bucket.appspot.com
FIREBASE_SERVICE_ACCOUNT={"type":"service_account",...}
# AI
GEMINI_API_KEY=your-gemini-api-key
# Redis (for BullMQ)
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=optional-password
# RapidAPI (Job Search)
RAPID_API_KEY=your-rapidapi-key
RAPID_API_HOST=jsearch.p.rapidapi.com
# Email (Nodemailer)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
# Rate Limiting
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100
# Razorpay (Payment Gateway)
RAZORPAY_KEY_ID=rzp_test_xxxxxxxxxxxxx
RAZORPAY_KEY_SECRET=your-razorpay-secretVITE_API_URL=http://localhost:5000
VITE_FIREBASE_API_KEY=your-api-key
VITE_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your-project-id
VITE_FIREBASE_STORAGE_BUCKET=your-bucket.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=your-sender-id
VITE_FIREBASE_APP_ID=your-app-id- Clone the repository
git clone https://github.com/ishwari418/career-pilot.git
cd career-pilot- Install backend dependencies
cd backend
npm install- Install frontend dependencies
cd ../frontend
npm install- Set up environment variables
# Create .env files in both backend and frontend directories
# Use the templates above- Start the development servers
Backend:
cd backend
npm run devFrontend:
cd frontend
npm run dev- Access the application
- Frontend: http://localhost:5173
- Backend API: http://localhost:5000
- Health Check: http://localhost:5000/health
career-pilot/
βββ backend/
β βββ package.json
β βββ src/
β βββ index.js # Server entry point
β βββ config/
β β βββ firebase.js # Firebase Admin initialization
β β βββ langchain.js # AI/Gemini configuration
β β βββ socket.js # Socket.IO setup
β βββ controllers/
β β βββ communityFirebaseController.js # Community features
β β βββ jobFetch.js # Job fetching logic
β βββ middleware/
β β βββ auth.js # JWT verification
β β βββ errorHandler.js # Global error handling
β β βββ socketAuth.js # Socket authentication
β β βββ upload.js # File upload handling
β βββ models/
β β βββ Job.model.js # Job schema
β β βββ JobAlert.model.js # Alert preferences
β β βββ JobListing.model.js # Fetched jobs
β β βββ NotificationLog.model.js # Email logs
β β βββ Resume.model.js # User resumes
β β βββ TrackedJob.model.js # Application tracking
β β βββ User.model.js # User profiles
β βββ routes/
β β βββ auth.js # Authentication
β β βββ community.js # Community features
β β βββ enhance.js # AI enhancement
β β βββ fellowships.js # Fellowship challenges & proposals
β β βββ interview.js # AI mock interviews
β β βββ jobAlerts.js # Job alerts CRUD
β β βββ jobsRoute.js # Job search
β β βββ jobTracker.js # Application tracking
β β βββ payments.js # Razorpay payments & escrow
β β βββ resume.js # Resume management
β β βββ upload.js # File uploads
β βββ services/
β β βββ firebaseDataService.js # Firebase operations
β β βββ interviewService.js # AI interview logic
β β βββ jobAlertQueue.js # BullMQ queue
β β βββ jobAlertSocket.js # Real-time notifications
β β βββ jobFetcher.js # Automated job fetching
β β βββ mailService.js # Email sending
β β βββ notificationServices.js # Push notifications
β β βββ paymentService.js # Razorpay integration
β β βββ presenceService.js # User presence
β β βββ rapidApiService.js # Job API integration
β β βββ socketServiceFirebase.js # Socket handlers
β βββ utils/
β βββ jobSearch.js # Search utilities
β βββ queueManager.js # Queue management
βββ frontend/
β βββ package.json
β βββ vite.config.js
β βββ index.html
β βββ src/
β βββ App.jsx # Root component
β βββ main.jsx # Entry point
β βββ index.css # Global styles
β βββ components/
β β βββ Button.jsx # Reusable button
β β βββ Card.jsx # Card component
β β βββ FileUpload.jsx # Drag & drop upload
β β βββ Input.jsx # Form input
β β βββ JobAlertModal.jsx # Alert creation modal
β β βββ JobAlertsList.jsx # Alerts display
β β βββ Layout.jsx # Page layout
β β βββ Navbar.jsx # Navigation bar
β β βββ community/ # Community components
β β β βββ ChannelList.jsx
β β β βββ ChatWindow.jsx
β β β βββ DirectMessages.jsx
β β β βββ MembersList.jsx
β β β βββ MessageBubble.jsx
β β β βββ MessageInput.jsx
β β β βββ PostCard.jsx
β β β βββ PostEditor.jsx
β β β βββ PostsFeed.jsx
β β βββ ui/ # UI components
β β βββ AnimatedText.jsx
β β βββ CTASection.jsx
β β βββ FeaturesSection.jsx
β β βββ Footer.jsx
β β βββ Globe.jsx
β β βββ HeroSection.jsx
β β βββ WorldMap.jsx
β βββ config/
β β βββ firebase.js # Firebase client config
β βββ context/
β β βββ AuthContext.jsx # Auth state management
β β βββ SocketContext.jsx # Socket.IO context
β βββ hooks/
β β βββ usePresence.js # User presence hook
β β βββ useSocket.js # Socket hook
β βββ lib/
β β βββ utils.js # Utility functions
β βββ pages/
β β βββ Community.jsx # Community page
β β βββ Dashboard.jsx # Main dashboard
β β βββ Enhance.jsx # Resume enhancement
β β βββ Home.jsx # Landing page
β β βββ InterviewPrep.jsx # AI mock interviews
β β βββ JobAlerts.jsx # Alerts management
β β βββ JobSearch.jsx # Job search page
β β βββ JobTracker.jsx # Application tracker
β β βββ Login.jsx # Login page
β β βββ Register.jsx # Registration page
β β βββ ResumeView.jsx # Resume display
β β βββ Upload.jsx # Resume upload
β β βββ fellowship/ # Fellowship feature
β β βββ ChallengeDetail.jsx
β β βββ ChallengeProposals.jsx
β β βββ Challenges.jsx
β β βββ CreateChallenge.jsx
β β βββ FellowshipChat.jsx
β β βββ FellowshipLayout.jsx
β β βββ FellowshipMessages.jsx
β β βββ MyChallenges.jsx
β β βββ MyProposals.jsx
β β βββ Onboarding.jsx
β β βββ Verify.jsx
β βββ services/
β βββ api.js # API service layer
β βββ socket.js # Socket client
βββ firebase/
βββ firestore.indexes.json # Firestore indexes
βββ firestore.rules # Security rules
βββ storage.rules # Storage security
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/auth/verify |
Verify Firebase token |
GET |
/api/auth/profile |
Get user profile |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/upload |
Upload and parse PDF resume |
POST |
/api/upload/extract-text |
Extract text from PDF |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/resumes |
Get all user resumes |
GET |
/api/resumes/:resumeId |
Get specific resume |
POST |
/api/resumes |
Create new resume |
PUT |
/api/resumes/:resumeId |
Update resume |
DELETE |
/api/resumes/:resumeId |
Delete resume |
GET |
/api/resumes/:resumeId/download |
Download as PDF |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/enhance |
Enhance resume with AI |
POST |
/api/enhance/summary |
Generate professional summary |
POST |
/api/enhance/suggestions |
Get improvement suggestions |
POST |
/api/enhance/ats-analysis |
Analyze ATS compatibility |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/fetchjobs |
Search for jobs |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/job-alerts |
Get all alerts |
GET |
/api/job-alerts/stats/summary |
Get alert statistics |
GET |
/api/job-alerts/:id |
Get specific alert |
POST |
/api/job-alerts |
Create new alert |
PUT |
/api/job-alerts/:id |
Update alert |
DELETE |
/api/job-alerts/:id |
Delete alert |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/job-tracker |
Get all tracked jobs |
GET |
/api/job-tracker/stats |
Get tracking statistics |
POST |
/api/job-tracker |
Track new job |
PUT |
/api/job-tracker/:trackerId |
Update job status |
DELETE |
/api/job-tracker/:trackerId |
Remove tracked job |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/community/channels |
Get all channels |
POST |
/api/community/channels |
Create channel |
GET |
/api/community/channels/:channelId/messages |
Get channel messages |
GET |
/api/community/posts |
Get all posts |
POST |
/api/community/posts |
Create post |
POST |
/api/community/posts/:postId/like |
Toggle like |
GET |
/api/community/posts/:postId/comments |
Get comments |
POST |
/api/community/posts/:postId/comments |
Add comment |
GET |
/api/community/conversations |
Get DM conversations |
GET |
/api/community/online-users |
Get online users |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/fellowship/profile |
Get fellowship profile |
POST |
/api/fellowship/profile |
Create/update profile |
POST |
/api/fellowship/verify/send-email |
Send verification email |
POST |
/api/fellowship/verify/confirm |
Confirm verification code |
GET |
/api/fellowship/challenges |
Get all challenges |
POST |
/api/fellowship/challenges |
Create challenge (Corporate) |
GET |
/api/fellowship/challenges/:id |
Get challenge details |
DELETE |
/api/fellowship/challenges/:id |
Delete challenge |
POST |
/api/fellowship/challenges/:id/apply |
Apply to challenge (Student) |
GET |
/api/fellowship/challenges/:id/proposals |
Get proposals for challenge |
PUT |
/api/fellowship/proposals/:id/status |
Accept/reject proposal |
GET |
/api/fellowship/my-challenges |
Get my challenges (Corporate) |
GET |
/api/fellowship/my-proposals |
Get my proposals (Student) |
GET |
/api/fellowship/chat/rooms |
Get chat rooms |
GET |
/api/fellowship/chat/rooms/:roomId |
Get chat room details |
GET |
/api/fellowship/chat/rooms/:roomId/messages |
Get messages |
POST |
/api/fellowship/chat/rooms/:roomId/messages |
Send message |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/interview/start |
Start mock interview |
POST |
/api/interview/:id/answer |
Submit answer |
POST |
/api/interview/:id/complete |
Complete interview |
GET |
/api/interview/:id |
Get interview details |
GET |
/api/interview/history |
Get interview history |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/payments/create-order |
Create Razorpay order |
POST |
/api/payments/verify-payment |
Verify payment & accept proposal |
POST |
/api/payments/release-funds/:roomId |
Release escrow funds |
GET |
/api/payments/status/:roomId |
Get payment status |
π For complete API documentation, see API_DOCS/README.md
- Upload: User uploads PDF resume
- Extraction: pdf-parse extracts text content
- Analysis: Text sent to Gemini AI with job role preferences
- Enhancement: AI generates optimized Harvard-format resume
- Storage: Enhanced resume saved to MongoDB
- Download: User can download as formatted PDF
- Alert Creation: User sets keywords, location, salary filters
- Queue Processing: BullMQ handles alerts in background
- Job Fetching: RapidAPI JSearch finds matching jobs
- Deduplication: New jobs compared against notification history
- Notification: Email sent + real-time socket notification
- Logging: All notifications tracked for analytics
- Socket Connection: User connects with authenticated token
- Channel Join: User subscribes to channel rooms
- Message Flow: Messages broadcast to channel members
- Presence: Online/offline status tracked
- DMs: Private conversations via personal rooms
- Challenge Creation: Corporate creates challenge with requirements and price
- Student Application: Students submit proposals with cover letter and pricing
- Proposal Review: Corporate reviews and selects proposal
- Payment: On acceptance, Razorpay checkout opens for escrow payment
- Chat Room: After payment, chat room created with "In Escrow" status
- Collaboration: Student and corporate discuss and work on challenge
- Completion: Corporate releases funds when satisfied
- Challenge Closed: Challenge marked complete, chat archived
- Configuration: User selects role, difficulty, and interview type
- Question Generation: Gemini AI generates role-specific questions
- Response Capture: User answers questions in real-time
- AI Evaluation: Each answer scored with detailed feedback
- Final Report: Comprehensive performance analysis and suggestions
# Build for production
cd frontend
npm run build
# Preview build locally
npm run previewEnvironment Variables to Set:
- All
VITE_*variables from frontend .env
# Production start
cd backend
npm startEnvironment Variables to Set:
- All variables from backend .env
- Ensure
NODE_ENV=production
- Create Firebase project
- Enable Authentication (Email/Password + Google)
- Create Firestore database
- Set up Storage bucket
- Download service account JSON
- Configure security rules
MongoDB Atlas:
- Create cluster
- Add database user
- Whitelist IP addresses
- Get connection string
Redis (Upstash/Redis Cloud):
- Create Redis instance
- Get connection credentials
- Configure BullMQ
| Document | Description |
|---|---|
| Architecture | System architecture, data flows, database schemas |
| API Reference | Complete API documentation |
| Real-World Use Cases | Success stories and applications |
| Contributing Guide | How to contribute to the project |
See Real_life_usecase.md for detailed success stories including:
- Fresh Graduates: First job seekers optimizing resumes for entry-level positions
- Career Changers: Professionals transitioning to new industries
- Job Seeker Networks: Building communities for mutual support
- Recruitment Agencies: Bulk resume processing and matching
- University Career Centers: Student resume workshops and tracking
If you encounter issues while setting up or running the project locally, try the following common fixes before creating a new issue.
MongoServerSelectionError- Verify your
MONGODB_URIin backend.env - Ensure MongoDB service is running
- Check internet connection if using MongoDB Atlas
- Restart backend server after updating environment variables
ECONNREFUSED 127.0.0.1:6379- Ensure Redis server is installed and running
- Verify
REDIS_HOSTandREDIS_PORT - Restart Redis service
- Check firewall restrictions
FirebaseAppError- Verify Firebase credentials in
.env - Ensure service account JSON is valid
- Check
FIREBASE_PROJECT_ID - Restart backend server after changes
EADDRINUSE- Change the
PORTvalue in.env - Stop other applications using the same port
- Restart your terminal and development server
Dependencies fail during installation.
Run:
npm installIf the issue persists:
npm cache clean --forceThen reinstall dependencies:
npm installFrontend server does not run properly.
- Ensure frontend
.envexists - Verify all
VITE_*variables are correct - Run:
npm run devinside the frontend directory.
Backend crashes during startup.
- Ensure backend
.envis configured - Verify MongoDB and Redis are running
- Run:
npm run devinside the backend directory.
- Never commit
.envfiles - Double-check all API keys
- Restart servers after changing environment variables
- Ensure no extra spaces are added in
.env
We welcome contributions! Please see our CONTRIBUTION.md for:
- Code of Conduct
- Development Setup
- Pull Request Process
- Coding Standards
- Issue Guidelines
This project is licensed under the MIT License - see the LICENSE file for details.
This project exists thanks to all the people who contribute. Become a contributor!
- Google Gemini AI for resume enhancement capabilities
- Firebase for authentication and real-time database
- JSearch API for job listings
- The open-source community for amazing tools