Focus your interview prep, fast.
PrepBuddy is an open-source dashboard for tracking company-prioritized LeetCode problems, monitoring your progress, surfacing difficulty trends, and benchmarking against peersβall from a single interface.
- π’ Company-Focused Collections - Browse curated problem sets from top tech companies
- π Progress Tracking - Track completed problems with Firebase sync across devices
- π Visual Analytics - Difficulty breakdowns, frequency distributions, and topic intensity charts
- π Live Leaderboard - Compete with other PrepBuddy users in real-time
- π Advanced Filtering - Search by company, timeframe, difficulty, and topic
- π¨ Beautiful UI - Glass-morphism inspired design with dark mode
- β‘ Performance Optimized - Virtual scrolling for smooth handling of large datasets
- π Google Authentication - Secure sign-in with Firebase Auth
We'd love your help making PrepBuddy the ultimate interview prep resource! Here's how you can contribute:
- β New company problem sets - Add questions from companies not yet covered
- β Additional questions - Expand existing company datasets
- β Data corrections - Fix errors in problem titles, links, or difficulty ratings
- β Bug fixes - Help squash bugs you encounter
π‘ Note: Feature development is currently paused while we focus on expanding our question database.
- Fork the repository
- Add your data following the format in Adding New Company Data
- Commit your changes (
git commit -m 'Add [Company] questions') - Push to your fork (
git push origin main) - Open a Pull Request
Every contribution helps thousands of developers prepare for their dream jobs at top tech companies!
- Node.js 18+ and npm
- Firebase project (for authentication and Firestore)
-
Clone the repository
git clone https://github.com/kiranpuli/prepbuddy.git cd prepbuddy -
Install dependencies
npm install
-
Configure Firebase
Create
src/config/firebase.tswith your Firebase credentials:import { initializeApp } from 'firebase/app'; import { getAnalytics, isSupported, type Analytics } from 'firebase/analytics'; import { browserLocalPersistence, getAuth, GoogleAuthProvider, setPersistence, type Auth, } from 'firebase/auth'; import { getFirestore, type Firestore } from 'firebase/firestore'; const firebaseConfig = { apiKey: 'YOUR_API_KEY', authDomain: 'YOUR_AUTH_DOMAIN', projectId: 'YOUR_PROJECT_ID', storageBucket: 'YOUR_STORAGE_BUCKET', messagingSenderId: 'YOUR_MESSAGING_SENDER_ID', appId: 'YOUR_APP_ID', measurementId: 'YOUR_MEASUREMENT_ID', }; const app = initializeApp(firebaseConfig); let analytics: Analytics | undefined; if (typeof window !== 'undefined') { void isSupported().then((supported) => { if (supported) { analytics = getAnalytics(app); } }); } const auth: Auth = getAuth(app); const googleProvider = new GoogleAuthProvider(); void setPersistence(auth, browserLocalPersistence).catch(() => { // Fallback to default persistence }); const db: Firestore = getFirestore(app); export { app, analytics, auth, googleProvider, db };
-
Set up Firestore security rules
Deploy the included
firestore.rules:firebase deploy --only firestore:rules
-
Start development server
npm run dev
-
Build for production
npm run build
prepbuddy/
βββ data/ # Company-wise problem CSV files
β βββ Amazon/
β βββ Google/
β βββ ...
βββ src/
β βββ components/ # React components
β βββ pages/ # Page components
β βββ store/ # Zustand state management
β βββ services/ # Firebase & API services
β βββ utils/ # Utility functions
β βββ config/ # Configuration files (gitignored)
βββ firestore.rules # Firestore security rules
βββ firebase.json # Firebase hosting config
βββ package.json
- Frontend: React 18, TypeScript, Vite
- Styling: Tailwind CSS
- State Management: Zustand
- Data Visualization: Recharts
- Authentication: Firebase Auth
- Database: Cloud Firestore
- Hosting: Firebase Hosting
- Virtualization: TanStack React Virtual
- CSV Parsing: PapaParse
To add problems for a new company:
- Create a folder under
data/with the company name - Add CSV files following the naming convention:
1. Thirty Days.csv,2. Three Months.csv, etc. - Ensure CSV has columns:
Title,Difficulty,Frequency,Acceptance Rate,Link,Topics - The data will be automatically loaded by the app
For GitHub Actions deployment, set these secrets in your repository:
FIREBASE_SERVICE_ACCOUNT: Firebase service account JSONVITE_FIREBASE_API_KEY: Firebase API keyVITE_FIREBASE_AUTH_DOMAIN: Firebase auth domainVITE_FIREBASE_PROJECT_ID: Firebase project IDVITE_FIREBASE_STORAGE_BUCKET: Firebase storage bucketVITE_FIREBASE_MESSAGING_SENDER_ID: Firebase messaging sender IDVITE_FIREBASE_APP_ID: Firebase app IDVITE_FIREBASE_MEASUREMENT_ID: Firebase measurement ID
This project is licensed under the MIT License - see the LICENSE file for details.
- LeetCode for providing the platform that inspired this tool
- All contributors who help make PrepBuddy better
For questions, feedback, or support, please open an issue on GitHub.
PrepBuddy - Made with β€οΈ for the coding interview prep community