An elegant, automated platform designed for educational institutions, placement cells, and coding clubs to track, analyze, and gamify students' LeetCode progress in real-time.
- Real-time Leaderboard: Automatically ranks students based on total problems solved, with secondary rankings for Easy, Medium, Hard solves, Streaks, and Today's Solves.
- On-Demand Dynamic Sync: Automatically triggers a profile scraper fetch when a student loads or refreshes any main page if their profile data is more than 2 minutes stale.
- Daily Classroom Tasks: Admins can assign multiple LeetCode problems daily. Assigned tasks appear as a dynamic ordered checklist on the student dashboard and automatically reset at midnight IST.
- Secure Admin Controls: Protected workspace login using tab-bound
sessionStorageauthentication, allowing admins to manage student rosters, assign/delete daily tasks, and run database scanners. - Format-Free Exporting: One-click Excel spreadsheet and print-friendly PDF report generation for the entire classroom roster without requesting login credentials.
- Visual Performance Badges: High-contrast, clean status pills indicating student difficulty breakdowns (Easy, Medium, Hard solves) and active solving streaks.
- Backend API: Python, Flask, Flask-SQLAlchemy (PostgreSQL / Supabase integration).
- Frontend Dashboard: Vanilla HTML5, CSS3, JavaScript, Bootstrap 5 (Responsive glassmorphism styling).
- Scraper Core: LeetCode GraphQL API wrapper with asynchronous HTTP requests and automated timezone handling (IST alignment).
Ensure you have Python 3.10+ installed.
git clone https://github.com/mdhalid888/leetcode-classroom-tracker.git
cd leetcode-classroom-trackerpython -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activatepip install -r requirements.txtCreate a .env file in the root directory (or set them in your terminal session):
DATABASE_URL=postgresql://username:password@host:port/database
PORT=5000If initializing the database for the first time:
python seed_db.pypython app.pyThe application will run locally at http://127.0.0.1:5000.
- Backend API Hosting: Render (using WSGI server).
- Frontend Static Hosting: Vercel (routing dynamic calls to the Render API endpoint via
vercel.jsonrewrite paths).