CodeCrux, CompeCompetitive Programming Portal is a customized full-stack web application that brings together competitive programming features in a single platform. From personalized problem recommendations to daily streaks and calendar-synced contests, it integrates multiple services like Codeforces, AtCoder, LeetCode, and Clist.by into a single competitive programming hub.
- User Authentication: Secure login system to track individual user progress and preferences.
- Contest Aggregation: Displays upcoming contests from various platforms (Codeforces, AtCoder, LeetCode, CodeChef, GeeksForGeeks) using APIs like Clist.by.
- Google Calendar Integration: Allows users to add contest reminders directly to their Google Calendar.
- Personalized Problem Lists: Shows unsolved problems tailored to the user.
- Problem Search & Filtering:
- Search by problem title or ID.
- Filter problems by tags (e.g., dynamic programming, graphs, data structures).
- Filter problems by difficulty level.
- Favorites List: Users can add preferred problems and contests to a dedicated favorites list.
- Daily Problem Streak:
- Suggests a random problem daily to logged-in users.
- Solving the daily problem maintains the user's streak.
- The streak resets to 0 if the daily problem isn't solved by the end of the day.
- Links to Original Problems: Provides direct links to problems on their respective host sites.
- Frontend: React.js
- Backend: Node.js, Express.js
- Database: MongoDB with Mongoose
- APIs:
- Clist.by API (for contest aggregation)
- Official APIs from Codeforces, AtCoder, LeetCode, CodeChef, GeeksForGeeks (where available)
- Package Managers: npm or yarn
The project is organized into two main directories: backend_ and front_end.
CP_PORTAL/
βββ backend/
β βββ controllers/
β β βββ authController.js
β β βββ contestController.js
β β βββ dailyChallengeController.js
β β βββ dashController.js
β β βββ favoritesController.js
β β βββ problemListController.js
β β βββ syncController.js
β βββ middleware/
β β βββ authMiddleware.js
β β βββ errorHandler.js
β βββ models/
β β βββ user.js
β β βββ contest.js
β β βββ dailyChallenge.js
β β βββ favorites.js
β β βββ problemList.js
β β βββ solvedProblem.js
β βββ routes/
β β βββ authRoutes.js
β β βββ contestRoutes.js
β β βββ dailyChallengeRoutes.js
β β βββ dashboardRoutes.js
β β βββ favoritesRoutes.js
β β βββ problemListRoutes.js
β β βββ syncRoutes.js
β βββ services/
β βββ scripts/
β βββ utils/
β βββ config/
β βββ server.js
β βββ .env
β
βββ frontend/
β βββ public/
β β βββ index.html
β βββ src/
β β βββ api/
β β β βββ apiService.js
β β βββ assets/
β β βββ components/
β β β βββ ContestCard/
β β β β βββ ContestCard.jsx
β β β β βββ ContestCard.css
β β β βββ Navbar/
β β β β βββ Navbar.jsx
β β β β βββ Navbar.css
β β β βββ ProblemCard/
β β β β βββ ProblemCard.jsx
β β β β βββ ProblemCard.css
β β β βββ StreakCard/
β β β β βββ StreakCard.jsx
β β β β βββ StreakCard.css
β β β βββ ProtectedRoute.jsx
β β βββ context/
β β β βββ AuthContext.jsx
β β βββ pages/
β β β βββ Auth/
β β β β βββ AuthPage.jsx
β β β β βββ AuthPage.css
β β β βββ Contests/
β β β β βββ Contests.jsx
β β β β βββ Contests.css
β β β βββ DailyChallenge/
β β β β βββ DailyChallenge.jsx
β β β β βββ DailyChallenge.css
β β β βββ Dashboard/
β β β β βββ Dashboard.jsx
β β β β βββ Dashboard.css
β β β βββ Favorite/
β β β β βββ Favorites.jsx
β β β β βββ Favorites.css
β β β β βββ sampleData.js
β β β βββ ProblemList/
β β β β βββ ProblemList.jsx
β β β β βββ ProblemList.css
β β β βββ Profile/
β β β β βββ ProfilePage.jsx
β β β β βββ ProfilePage.css
β β βββ styles/
β β β βββ index.css
β β βββ utils/
β β βββ App.jsx
β β βββ App.css
β β βββ index.jsx
β βββ .env
β βββ package.json
β βββ yarn.lock
-
Clone the repository:
git clone <repository-url> cd <repository-name>
-
Backend Setup:
cd backend_ npm install # or yarn install # Create a .env file based on .env.example (if provided) and fill in necessary environment variables (API keys, database URI, etc.) npm start # or yarn start (or npm run dev / yarn dev depending on package.json scripts)
-
Frontend Setup:
cd ../front_end npm install # or yarn install # Create a .env file if needed for frontend environment variables (e.g., backend API URL) npm start # or yarn start
-
Open your browser and navigate to
http://localhost:3000(or the port specified for the frontend).
###π§Ύ User Registration & Authentication:
β’ Users can securely register and log in to create their personalized programming workspace.
β’ Authenticated sessions are managed using JWT tokens, ensuring secure and persistent access.
β’ Navigate to the "Contests" section to explore upcoming contests from Codeforces, AtCoder, LeetCode, CodeChef, and GFG, aggregated using the Clist.by API.
β’ Apply advanced filters like contest duration, platform, and start time.
β’ One-click integration with Google Calendar lets users set personalized contest reminders.
β’ Access a curated list of unsolved problems tailored to your skill level and previous activity.
β’ Use powerful filtering options:
β’ By tags: e.g., dynamic programming, greedy, graph, trees.
β’ By difficulty level, platform, or problem status (solved/unsolved).
β’ By title keyword or problem ID.
β’ Receive a daily problem based on your performance and tag preferences.
β’ Track your daily streak visually on the dashboard.
β’ Failure to solve the daily problem by midnight resets the streak.
β’ The portal maintains a history of all solved and attempted problems.
β’ Users can revisit:
β’ All solved problems.
β’ Unsolved or skipped problems.
β’ Favorite problems they marked for later.
β’ Bookmark problems or contests to revisit later.
β’ Favorites are stored per user and displayed on the dashboard for quick access.
β’ View your current streak, problem-solving stats, and platform usage breakdown.
β’ Monitor your growth over time with a progress indicator.
β’ Each userβs data (solved problems, streaks, favorites, preferences) is securely stored and persists across sessions.
β’ Users can update profile information and view all interactions in one centralized profile view.
- Clist.by: For aggregating contest information from multiple platforms.
- Platform Specific APIs: (e.g., Codeforces API, etc.) for fetching problem details, user-specific data if available and permissible.














