Your ultimate companion for crushing technical interviews with AI-powered questions, real-time feedback, and comprehensive preparation tools.
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
"Your success is our mission. Every question you solve is one step closer to your dream job." 🎯
We welcome contributions from the community!
Please read the Contributing Guidelines before submitting a Pull Request.