- Check out the demo video here π Project Demo - Loom
NOTE: sometime it will take 1 or 2 min to start as it is a free service from render --- --- -- ---
Backend Deployment Link: https://assignment-qh3o.onrender.com
Frontend Deployment Link: https://assignment-psi-ivory.vercel.app/
- This project is a contest tracker web application that helps users stay updated with coding contests from platforms like Codeforces, CodeChef, and LeetCode.
- View upcoming and past contests
- Bookmark contests
- Filter contests by platform
- Watch video solutions
- Admins can manually add solution videos
- Automated YouTube video solution fetcher via a backend cron job
- β€οΈβ€οΈI am not scrapping the data instead of that i am fetching the data from offical API's which reduce the latency and increase efficiency.β€οΈβ€οΈ
- Frontend: React, Next.js, Tailwind CSS, Next UI
- Backend: Node.js, Express, REST APIs
- Database: MongoDB
- Others: Docker, Google OAuth, YouTube API, Cron Jobs, Recoil
- β Fetch contests from multiple platforms
- β View upcoming and past contests
- β Google Authentication (Login)
- β Automatic YouTube video fetcher
- β Bookmark contests
- β Pagination support
- β Responsive UI
- β Admin functionality to add video solutions manually
- Check out the demo video here π Project Demo - Loom
- Platform filter bar, User login with Google



- Displays logged-in user details
- Admin badge for admin users

- Watch video solution
- Navigate to the contest platform
- Admin-only manual video upload option

- Automatic YouTube video fetch at 8 AM daily
- Updates contest video solutions





- Add contest reminders/notifications
- Enhance authentication features
- Integrate more competitive programming platforms
git clone <your-repo-link>
cd <project-folder>
PORT=
MONGO_URI=""
YOUTUBE_API=""
cd backend
npm install
tsc -b
node dist/index.js
cd frontend
npm install
npm run dev
This document outlines the API endpoints and system architecture for the contest tracking and management application.
/contests/upcoming_contest
(GET)- Fetches upcoming contests from CodeChef, LeetCode, and Codeforces.
- Response: JSON array of contest objects.
/contests/past_contest
(GET)- Fetches past contests from CodeChef, LeetCode, and Codeforces.
- Response: JSON array of contest objects.
/contests/upload_solution
(POST)- Allows administrators to manually upload contest solutions.
- Request: JSON payload containing solution details.
- Authentication: Requires administrator privileges.
/user/profile
(GET)- Retrieves the current user's profile information.
- Authentication: Requires user authentication.
- Response: JSON object containing user profile data.
/user/bookmarks
(GET)- Retrieves all bookmarked contests for the logged-in user.
- Authentication: Requires user authentication.
- Response: JSON array of bookmarked contest objects.
/user/bookmarks
(POST)- Adds a selected contest to the user's bookmarks.
- Request: JSON payload containing the contest identifier.
- Authentication: Requires user authentication.
/auth/google
(POST)- Handles Google OAuth authentication.
- Request: Google OAuth token.
- Response: User authentication token.
- Daily Contest Update (8:00 AM)
- Scheduled cron job that runs daily at 8:00 AM.
- Fetches and updates contest information from CodeChef, LeetCode, and Codeforces.
- Can be configured to run hourly.
- Testing Cron Job (Instant)
- On demand execution of the contest data fetching logic, for testing purposes.
- The system utilizes a backend API to manage contest data, user profiles, and authentication.
- Contest data is fetched from external platforms (CodeChef, LeetCode, Codeforces) using web scraping or official APIs (if available).
- User authentication is handled via Google OAuth.
- A database stores contest information, user profiles, and bookmarks.
- Cron jobs automate the process of updating contest data.
π¦ Project Root
βββ π backend
β βββ π src
β β βββ π controllers
β β βββ π cron
β β βββ π middleware
β β βββ π models
β β βββ π routers
β β βββ π types
β β βββ index.ts
β β βββ .env
β β βββ docker-compose.yml
β
βββ π frontend
β βββ π public
β βββ π src
β β βββ π assets
β β βββ π components
β β β βββ π common
β β β βββ π providers
β β β β βββ authprovider.tsx
β β β β βββ recoilprovider.tsx
β β β βββ π ui
β β βββ π hooks
β β β βββ useMyContests.tsx
β β β βββ usePastContests.tsx
β β β βββ useUpcomingContests.tsx
β β βββ π lib
β β βββ π pages
β β β βββ Bookmarks.tsx
β β β βββ Home.tsx
β β β βββ Profile.tsx
β β βββ π store
β β β βββ user_atom.ts
β β βββ π types
β β β βββ contest_type.tsx
β β βββ π utils
β β β βββ format_time.tsx
β β β βββ platform_color.tsx
β β βββ app.tsx
β β βββ index.css
β β βββ main.tsx
β βββ .gitignore