Your ultimate companion for crushing technical interviews with AI-powered questions, real-time feedback, and comprehensive preparation tools.
π Live Demo β’ π Documentation β’ π Report Bug β’ π‘ Request Feature
PrepPilot is a comprehensive full-stack web application designed to transform your interview preparation journey. Leveraging cutting-edge AI technology and an intuitive interface, PrepPilot generates role-specific interview questions, provides detailed explanations, and helps you track your progress in real-time.
Whether you're preparing for your dream job or sharpening your technical skills, PrepPilot provides all the tools you need to succeed.
| Feature | Description |
|---|---|
| π€ AI-Powered Question Generation | Generate unlimited role-specific interview questions using Google's Gemini AI |
| π Curated Question Banks | Access DSA sheets, aptitude questions, and problem-solving challenges |
| π» Built-in Code Compiler | Write, test, and execute code directly in the browser with Monaco Editor |
| π― Skill Assessment | Evaluate your technical proficiency with interactive skill tests |
| π Reference Books Library | Access a comprehensive collection of interview preparation books |
| π Resume Builder | Create professional resumes with customizable templates |
| π Interview Experiences | Read and share real interview experiences from the community |
| π‘ Project Ideas | Explore curated project ideas to enhance your portfolio |
| π Open Source Resources | Contribute and learn from open-source projects |
| π Progress Dashboard | Track your preparation metrics and identify weak areas |
| π Secure Authentication | JWT-based authentication with encrypted passwords |
| π± Fully Responsive | Seamless experience across desktop, tablet, and mobile devices |
| π¨ Modern Dark Mode | Beautiful UI with theme toggle for comfortable viewing |
| β‘ Real-time Feedback | Instant AI-powered explanations and answer evaluations |
React 18 (Hooks & Functional Components)
βββ Vite (Lightning-fast build tool)
βββ Tailwind CSS (Utility-first styling)
βββ React Router DOM (Client-side routing)
βββ Framer Motion (Smooth animations)
βββ Monaco Editor (Advanced code editing)
βββ React Markdown (Rich content rendering)
βββ Axios (HTTP client for API calls)
Node.js + Express.js
βββ MongoDB + Mongoose (Data persistence)
βββ JWT & Bcryptjs (Security & authentication)
βββ Google Gemini API (AI intelligence)
βββ Multer (File uploads)
βββ PDF-Parse (Document processing)
βββ Express Rate Limit (API protection)
βββ Joi (Input validation)
ESLint Code quality & linting
Git Version control
Nodemon Auto-reload during development
Frontend Dependencies:
React 18 β’ Vite β’ Tailwind CSS β’ React Router β’ Axios β’ Framer Motion β’ Monaco Editor β’ Lucide React β’ React Icons β’ React Markdown β’ React Syntax Highlighter β’ React Hot Toast β’ React Split β’ Moment.js
Backend Dependencies:
Express.js β’ MongoDB β’ Mongoose β’ JWT β’ Bcryptjs β’ Google Generative AI β’ Axios β’ Multer β’ PDF-Parse β’ Joi β’ CORS β’ Express Rate Limit β’ Dotenv
Before getting started, ensure you have the following installed:
- Node.js (v16 or higher) - Download
- npm or yarn (v7 or higher)
- MongoDB instance (Local or MongoDB Atlas - Free tier available)
- Google Gemini API Key - Get it free at Google AI Studio
git clone https://github.com/yourusername/PrepPilot.git
cd PrepPilotcd backend
npm installcd ../frontend
npm installCreate a .env file in the backend/ directory with the following variables:
# MongoDB Configuration
MONGO_URI=mongodb+srv://username:password@cluster.mongodb.net/preppilot
# JWT Secret (generate a strong random string)
JWT_SECRET=your_super_secret_jwt_key_here_generate_a_strong_one
# Google Gemini API
GEMINI_API_KEY=your_gemini_api_key_from_ai_studio
GEMINI_MODEL=gemini-1.5-flash
# Server Configuration
PORT=8000
NODE_ENV=development
# Frontend Origin (for CORS)
FRONTEND_ORIGIN=http://localhost:5173
# Optional: Additional configurations
RATE_LIMIT_WINDOW_MS=15000000
RATE_LIMIT_MAX_REQUESTS=100Terminal 1 - Backend:
cd backend
npm run dev
# Server runs on http://localhost:8000Terminal 2 - Frontend:
cd frontend
npm run dev
# Frontend runs on http://localhost:5173Open your browser and navigate to:
http://localhost:5173
# Build and run with Docker Compose
docker-compose up --buildPrepPilot/
β
βββ π backend/ # Express.js REST API Server
β βββ π config/ # Database & environment configuration
β βββ π controllers/ # Business logic & request handlers
β β βββ aiController.js # AI/Gemini API integration
β β βββ authController.js # Authentication logic
β β βββ questionController.js # Question management
β β βββ resumeController.js # Resume operations
β β βββ sessionController.js # Session management
β β βββ userSheetProgressController.js # Progress tracking
β β
β βββ π middlewares/ # Express middlewares
β β βββ authMiddleware.js # JWT verification
β β βββ rateLimiter.js # API rate limiting
β β βββ uploadMiddleware.js # File upload handling
β β βββ sanitizeAiPrompt.js # Input sanitization
β β βββ validateAiPrompt.js # Prompt validation
β β
β βββ π models/ # MongoDB Mongoose schemas
β β βββ User.js # User profile & credentials
β β βββ Question.js # Interview questions
β β βββ Resume.js # Resume documents
β β βββ Session.js # Practice sessions
β β βββ Sheet.js # Question sheets (DSA, etc.)
β β βββ Book.js # Reference books
β β βββ UserSheetProgress.js # User progress tracking
β β
β βββ π routes/ # API endpoints
β β βββ authRoutes.js # Auth endpoints
β β βββ aiRoutes.js # AI generation endpoints
β β βββ questionRoutes.js # Question endpoints
β β βββ resumeRoutes.js # Resume endpoints
β β βββ sessionRoutes.js # Session endpoints
β β βββ booksRoutes.js # Books endpoints
β β βββ AptitudeQuestions.js # Aptitude test endpoints
β β βββ sheetJsonUpload.js # Sheet upload
β β βββ userSheetProgressRoutes.js# Progress endpoints
β β
β βββ π utils/ # Utility functions
β β βββ prompts.js # AI prompt templates
β β
β βββ π validation/ # Input validation schemas
β β βββ aiPromptSchema.js # Joi validation schemas
β β
β βββ π scripts/ # Utility scripts
β β βββ importBooks.js # Import books to DB
β β βββ exportBooks.js # Export books from DB
β β βββ uploadSheets.js # Upload question sheets
β β
β βββ π sheets/ # JSON question sheets
β β βββ Arrays.json
β β βββ gfg-must-know-dsa.json
β β βββ neetcode-150.json
β β βββ striver-sde-sheet.json
β β βββ love-babbar-dsa-sheet.json
β β
β βββ π uploads/ # User-uploaded files storage
β βββ server.js # Express server entry point
β βββ package.json
β βββ .env.example
β
βββ π frontend/ # React + Vite Frontend Application
β βββ π public/ # Static assets
β βββ π src/
β β βββ π components/ # Reusable UI components
β β β βββ AIHelper.jsx # AI question generator
β β β βββ Compiler.jsx # Code editor & executor
β β β βββ SkillAssessment.jsx # Skill tests
β β β βββ SheetList.jsx # Question sheets list
β β β βββ SheetDetailsPage.jsx # Sheet details view
β β β βββ ThemeToggle.jsx # Dark/Light mode
β β β βββ Drawer.jsx # Navigation drawer
β β β β
β β β βββ π Cards/ # Card components
β β β β βββ QuestionCard.jsx
β β β β βββ AptitudeQuestionCard.jsx
β β β β βββ TopicCard.jsx
β β β β βββ SummaryCard.jsx
β β β β
β β β βββ π Inputs/ # Form input components
β β β β βββ Input.jsx
β β β β βββ ProfilePhotoSelector.jsx
β β β β
β β β βββ π Layouts/ # Layout components
β β β β
β β β βββ π Loader/ # Loading spinners
β β β β
β β β βββ π animations/ # Animation components
β β β β βββ PageTransition.jsx
β β β β
β β β βββ ServicesMarquee.jsx # Service showcase
β β β
β β βββ π context/ # React Context API providers
β β β βββ userContext.jsx # User state management
β β β βββ themeContext.jsx # Theme state management
β β β
β β βββ π pages/ # Page components (route-based)
β β β βββ π Auth/ # Login/Signup pages
β β β βββ π Home/ # Home/Dashboard
β β β βββ π InterviewPrep/ # Interview preparation
β β β βββ π InterviewExperiences/ # Shared experiences
β β β βββ π ResumeBuilder/ # Resume builder
β β β βββ π NotesBooks/ # Reference books
β β β βββ π ProjectIdeas/ # Project ideas
β β β βββ π OpenSource/ # Open source resources
β β β
β β βββ π utils/ # Utility functions
β β β βββ apiPaths.js # API endpoints
β β β βββ axiosInstance.js # Axios configuration
β β β βββ animations.js # Animation utilities
β β β βββ helper.js # General helpers
β β β βββ uploadimage.js # Image upload utility
β β β βββ data.js # Static data
β β β
β β βββ π assets/ # Images, icons, media
β β βββ App.jsx # Main App component
β β βββ main.jsx # React entry point
β β βββ App.css # Global styles
β β βββ index.css # Base styles
β β
β βββ vite.config.js # Vite configuration
β βββ eslint.config.js # ESLint rules
β βββ tailwind.config.js # Tailwind CSS config
β βββ package.json
β βββ index.html
β
βββ .gitignore # Git ignore rules
βββ LICENSE # MIT License
βββ README.md # This file
We love contributions from the community! PrepPilot is better because of talented developers like you. Here's how you can help:
-
Fork the repository on GitHub
# Fork via GitHub UI, then: git clone https://github.com/YOUR_USERNAME/PrepPilot.git cd PrepPilot
-
Create a feature branch with a descriptive name
git checkout -b feature/add-amazing-feature # or git checkout -b fix/resolve-critical-bug -
Make your changes following our code style
- Write clean, readable code
- Add comments for complex logic
- Keep components modular and reusable
- Follow existing naming conventions
-
Test thoroughly
# Test your changes locally npm run dev # Frontend npm run test # If tests exist
-
Commit with clear messages using conventional commits
git commit -m "feat: add new AI model integration" git commit -m "fix: resolve authentication timeout issue" git commit -m "docs: update API documentation"
-
Push and create a Pull Request
git push origin feature/add-amazing-feature
| Type | Examples | Priority |
|---|---|---|
| π Bug Fixes | Fix crashes, errors, or unexpected behaviors | High |
| β¨ Features | New tools, integrations, or functionality | Medium |
| π Documentation | README updates, API docs, code comments | Medium |
| π¨ UI/UX | Design improvements, accessibility fixes | Medium |
| β‘ Performance | Optimize queries, reduce load time | High |
| π§ͺ Tests | Add unit tests, integration tests | Medium |
Before submitting your PR, ensure:
- Code follows the project's style guide
- You've tested your changes locally
- You've updated relevant documentation
- Your PR title clearly describes the change
- Your PR description explains what and why
- You've linked any related issues
- No console errors or warnings
- You've added/updated tests if applicable
Frontend (React/JavaScript):
// Use functional components with hooks
const MyComponent = ({ prop1, prop2 }) => {
return <div>{prop1}</div>;
};
// Use meaningful variable names
const userAuthToken = localStorage.getItem('authToken');
// Add JSDoc comments for complex functions
/**
* Fetches interview questions for a specific role
* @param {string} role - The job role
* @returns {Promise<Array>} Array of questions
*/
const fetchQuestions = async (role) => { ... };Backend (Node.js/Express):
// Use async/await
const getUser = async (req, res) => {
try {
const user = await User.findById(req.params.id);
res.json(user);
} catch (error) {
res.status(500).json({ error: error.message });
}
};
// Use meaningful error messages
throw new Error("User not found with the provided email");- Check existing issues to avoid duplicates
- Create a new issue with:
- Clear, descriptive title
- Step-by-step reproduction instructions
- Expected vs actual behavior
- Screenshots/screencasts if applicable
- Your environment (OS, Browser, Node version)
- Use the discussion section or create an issue
- Describe the problem the enhancement solves
- Provide examples of how it would work
- Explain the benefits to users
- π¬ Open a discussion for questions
- π Create an issue for bugs
- π§ Contact maintainers for sensitive issues
- π€ Check our FAQ section (coming soon)
| Issue | Cause | Solution |
|---|---|---|
| 401 Unauthorized Error | Invalid or expired JWT token | Clear browser localStorage and re-login |
| CORS Error | Frontend & backend origins mismatch | Verify FRONTEND_ORIGIN matches exactly |
| 404 API Not Found | Incorrect API base URL | Check VITE_BACKEND_URL in env file |
| MongoDB Connection Failed | Invalid connection string | Verify MONGO_URI and IP whitelist |
| Gemini API Error | Invalid or missing API key | Check GEMINI_API_KEY in .env |
| Port Already in Use | Another process using the port | Change PORT in .env or kill existing process |
| Mixed Content Warning | HTTP frontend accessing HTTPS backend | Use HTTPS for both in production |
| Nodemon not reloading | File watch issue | Delete node_modules and reinstall |
# Check Node version
node --version
# Check npm version
npm --version
# Test MongoDB connection
mongosh "your_connection_string"
# View backend logs
npm run dev # Shows server logs
# Clear npm cache if installation fails
npm cache clean --force
npm installPOST /api/auth/register - Register new user
POST /api/auth/login - Login user
POST /api/auth/logout - Logout user
GET /api/auth/profile - Get user profile
PUT /api/auth/profile - Update user profile
POST /api/ai/generate - Generate interview questions
POST /api/ai/explain - Get detailed explanations
POST /api/ai/evaluate - Evaluate user answer
GET /api/questions - Get all questions
GET /api/questions/:id - Get single question
POST /api/questions - Create question (admin)
PUT /api/questions/:id - Update question (admin)
DELETE /api/questions/:id - Delete question (admin)
GET /api/resume - Get user resumes
POST /api/resume - Create resume
PUT /api/resume/:id - Update resume
DELETE /api/resume/:id - Delete resume
For detailed API documentation, see API.md (if available)
# Install Heroku CLI
npm install -g heroku
# Login to Heroku
heroku login
# Create new app
heroku create your-app-name
# Set environment variables
heroku config:set MONGO_URI=your_mongodb_url
heroku config:set JWT_SECRET=your_jwt_secret
heroku config:set GEMINI_API_KEY=your_api_key
# Deploy
git push heroku main# Install Vercel CLI
npm install -g vercel
# Deploy
vercel# Build and push to Docker Hub
docker build -t username/preppilot:latest .
docker push username/preppilot:latest
# Pull and run on server
docker pull username/preppilot:latest
docker run -p 8000:8000 --env-file .env username/preppilot:latestThis project is licensed under the MIT License - see the LICENSE file for details.
The MIT License is a permissive open-source license that allows you to:
- β Use for personal or commercial purposes
- β Modify the source code
- β Distribute copies
- β Include the license in distributions
Conditions:
- Include the license and copyright notice
This project stands on the shoulders of amazing open-source projects and communities:
- Google Gemini API - Powering intelligent question generation and explanations
- React Team - For the revolutionary UI library and amazing community
- Vite Team - Lightning-fast build tool that transformed frontend development
- Tailwind Labs - Beautiful utility-first CSS framework
- Express.js - Elegant web framework for Node.js
- MongoDB - Flexible and scalable NoSQL database
- Mongoose - Beautiful MongoDB object modeling
- Monaco Editor - Incredible code editor from VS Code
- Framer Motion - Production-ready animation library
- Community Contributors - Everyone who reported bugs and suggested features
- Open Source Community - For continuous inspiration and support
- Developers & Educators - Who shared knowledge and best practices
- DSA Resources - Striver's SDE Sheet
- NeetCode - Curated DSA problems
- GeeksforGeeks - Educational content
- Real-time collaboration features
- Video interview simulation
- Advanced analytics dashboard
- Mobile app (React Native)
- Community forums
- Multi-language support
- Spaced repetition system
- Integration with LeetCode
- Machine learning-based recommendations
- Interview experience matching
- Premium tier with advanced features
- Mentorship marketplace
- Career path recommendations
- Real interview connections
- Job board integration
- Company-specific preparation
- π Email: contact@preppilot.com
- π¦ Twitter: @PrepPilot
- π» GitHub Issues: Report bugs here
- π¬ Discussions: Ask questions here
- π€ Discord: Join our community
If PrepPilot helped you land that dream job or ace your interview, consider:
- β Star this repository - It helps more people discover PrepPilot
- π’ Share with others - Tell your friends and colleagues
- π Report bugs - Help us improve the platform
- π‘ Suggest features - Your ideas shape the future
- π€ Contribute code - Help develop new features
- β Buy me a coffee - Support ongoing development