A full-stack MERN-based web application to track upcoming and past coding contests from multiple platforms, featuring Google Calendar integration and secure user authentication.
Contest Tracker solves a common problem for competitive programmers: keeping track of coding contests spread across multiple websites. This application aggregates contest data from Codeforces, LeetCode, HackerEarth, and TopCoder into a single, clean interface. Users can log in with their Google account to save contests, add events directly to their Google Calendar, and find YouTube solutions for past contests automatically.
- ✅ Multi-Platform Aggregation: View contests from Codeforces, LeetCode, HackerEarth, and TopCoder.
- ✅ Secure Google OAuth 2.0: Users can sign up and log in securely with their Google account.
- ✅ Google Calendar Integration: Add any upcoming contest to your personal Google Calendar with a single click.
- ✅ Bookmark Contests: Save contests for later and view them in a dedicated bookmarks page.
- ✅ Automated Solution Finder: The backend automatically searches for YouTube video solutions for past contests.
- ✅ "Today's Contests" View: Quickly see all contests happening on the current day.
- ✅ Search & Filter: Easily search for contests by name and filter by platform.
- ✅ Dark/Light Mode: A sleek, modern UI with theme-switching capability.
- ✅ Fully Responsive: Designed to work beautifully on all devices, from desktops to mobile phones.
This project was built using a modern MERN-stack architecture within a monorepo.
-
Frontend:
- React (with Vite)
- Tailwind CSS
- React Hooks for State Management
- Axios for API Calls
-
Backend:
- Node.js
- Express.js
- MongoDB (with Mongoose)
- Passport.js for Google OAuth 2.0
express-sessionfor Session Management
-
APIs:
- Google Calendar API
- YouTube Data API
-
Deployment:
- Frontend: Vercel
- Backend: Render
- CI/CD pipeline managed from a single GitHub monorepo.
To get a local copy up and running, follow these simple steps.
- Node.js (v18 or later)
- npm
- Git
-
Clone the repository:
git clone [https://github.com/your-username/contest-tracker.git](https://github.com/your-username/contest-tracker.git) cd contest-tracker -
Setup the Backend (
/server):- Navigate to the server directory:
cd server - Install NPM packages:
npm install
- Create a
.envfile in the/serverdirectory and add the required environment variables (see below). - Start the server:
node index.js
- Navigate to the server directory:
-
Setup the Frontend (
/contest-tracker):- From the root directory, navigate to the frontend directory:
cd contest-tracker - Install NPM packages:
npm install
- Create a
.envfile in the/contest-trackerdirectory and addVITE_API_BASE_URL. - Start the client:
npm run dev
- From the root directory, navigate to the frontend directory:
You will need to create two .env files for this project to run locally.
1. Backend (/server/.env):
MONGO_URI=your_mongodb_connection_string
SESSION_SECRET=a_super_secret_random_string
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
YOUTUBE_API_KEY=your_youtube_api_key
FRONTEND_URL=http://localhost:5173
GOOGLE_CALLBACK_URL=http://localhost:5000/auth/google/callback