Official Docs

CodeArena

A full-stack online judge and competitive programming platform โ€” built with Next.js 16, MongoDB, Redis, and Docker-sandboxed code execution.

Next.js 16
React 19
MongoDB
Redis
Docker
Firebase Auth
Socket.IO
Tailwind v4

01What is CodeArena?

CodeArena is an online competitive programming platform that allows users to browse coding problems, write and submit solutions in multiple programming languages, and compete in timed contests โ€” all from a browser-based code editor. The platform judges submitted code automatically by executing it inside isolated Docker containers and comparing its output against predefined test cases.

It is a team-built full-stack application following a monolithic Next.js architecture with a clean separation between frontend features, API controllers, business services, and database models.

Docker Sandbox Execution

Real containerized code runner. Your solutions execute in isolated, secure Docker containers with strict resource limits for fair and safe evaluations.

Multi-Verdict Judge

Beyond pass/fail. Get granular feedback with standard verdicts including ACCEPTED, TLE, MLE, and detailed RUNTIME_ERROR reports.

Firebase + JWT Auth

Real secure login system. Enterprise-grade security combining Firebase for identity and JWT for stateless session management.

Problem Browser

Search, filter, and paginate through challenges by difficulty, tags, or title to find the perfect problem for your skill level.

03Project Status

โœ… Implemented & Working

  • User authentication โ€” register, login, logout, Firebase sync, JWT cookie session
  • Problem list with search, filter, and pagination
  • Per-user solved-status lookup on problem browser
  • Problem detail page and in-browser Monaco code editor
  • Code submission and verdict evaluation pipeline
  • Docker sandboxed execution for C++, Python, Java, and JavaScript
  • Contest, participant, and leaderboard API surfaces
  • Admin log APIs
  • User profile pages with activity calendar
  • Docker Compose stack (MongoDB, Redis, app, docker-proxy)
  • Prometheus metrics endpoint

๐Ÿšง In Progress / Partial

Note

Some sections still use static/mock data on the frontend. The Practice page is a placeholder ("Coming Soon"). Real-time WebSocket UI updates are not fully wired yet, though the Socket.IO + Redis adapter server layer is present.

04System Architecture

CodeArena is a monolithic Next.js application where both the frontend and backend live in the same codebase. The App Router handles page-level rendering while /api/* routes act as a REST API. The architecture separates concerns into Controllers โ†’ Services โ†’ Models layers within that monolith.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ BROWSER / CLIENT โ”‚
โ”‚ React 19 ยท Monaco Editor ยท Framer Motion ยท Socket.IO โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ HTTPS + WSS
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ NEXT.JS 16 APP SERVER โ”‚
โ”‚ Pages (App Router) โ”‚ API Routes (/api/*) โ”‚
โ”‚ Server Components โ”‚ Controllers โ†’ Services โ”‚
โ”‚ Middleware (JWT auth) โ”‚ Mongoose Models โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ MongoDB (Mongoose)โ”‚ โ”‚ Redis (Cache + BullMQ Queue) โ”‚
โ”‚ Users ยท Problems โ”‚ โ”‚ Sessions ยท Job Queue โ”‚
โ”‚ Submissions โ”‚ โ”‚ Socket.IO Adapter โ”‚
โ”‚ Contests ยท Logs โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚ Judge Jobs
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ DOCKER EXECUTION SANDBOX โ”‚
โ”‚ dockerode โ†’ docker-socket-proxy โ†’ Docker Engine โ”‚
โ”‚ Per-submission isolated containers โ”‚
โ”‚ C++ ยท Python ยท Java ยท JavaScript images โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Request Lifecycle (Code Submission)

1
User submits code

Monaco editor POSTs to POST /api/problems/[id]/submit with language and source code.

2
Auth middleware validates JWT cookie

The request passes through middleware that verifies the user's JWT before reaching the controller.

3
Submission record created (PENDING)

The submission controller creates a MongoDB document with status PENDING and enqueues a BullMQ job.

4
Judge worker picks up the job

A BullMQ worker (backed by Redis) processes the job by calling the judge service.

5
Docker container spun up via dockerode

The judge calls POST /api/evaluation/execute which uses dockerode โ†’ docker-proxy โ†’ Docker Engine to create a sandboxed container.

6
Output compared against test cases

Stdout is compared to expected output. Timing and memory are measured. A verdict is produced.

7
Submission updated in MongoDB

The submission document is updated with the final verdict (e.g., ACCEPTED, WRONG_ANSWER) and execution stats.

8
Client polls for result

Frontend polls GET /api/evaluation/status or GET /api/submissions/[id] until the verdict is available.

05Project Structure

tree
codearena/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ app/                    # Next.js App Router
โ”‚   โ”‚   โ”œโ”€โ”€ (pages)/            # Frontend page routes
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ page.jsx        # Landing page (/)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ login/          # /login
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ signup/         # /signup
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ problems/       # /problems + /problems/[id]
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ leaderboard/    # /leaderboard
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ profile/        # /profile, /profile/[id]
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ practice/       # /practice (placeholder)
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ test-docker/    # /test-docker (dev tool)
โ”‚   โ”‚   โ””โ”€โ”€ api/                # REST API routes
โ”‚   โ”‚       โ”œโ”€โ”€ auth/           # Auth endpoints
โ”‚   โ”‚       โ”œโ”€โ”€ problems/       # Problem CRUD + submit
โ”‚   โ”‚       โ”œโ”€โ”€ submissions/    # Submission read
โ”‚   โ”‚       โ”œโ”€โ”€ evaluation/     # Judge execution endpoints
โ”‚   โ”‚       โ”œโ”€โ”€ contests/       # Contest management
โ”‚   โ”‚       โ”œโ”€โ”€ user/           # Per-user queries
โ”‚   โ”‚       โ”œโ”€โ”€ users/          # User listing/lookup
โ”‚   โ”‚       โ”œโ”€โ”€ admin/          # Admin log management
โ”‚   โ”‚       โ””โ”€โ”€ health/         # Health check
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ components/             # Shared UI components
โ”‚   โ”‚   โ”œโ”€โ”€ ui/                 # Shadcn/Radix base components
โ”‚   โ”‚   โ”œโ”€โ”€ layout/             # Header, Footer, Sidebar, Nav
โ”‚   โ”‚   โ””โ”€โ”€ shared/             # Cards, Badges, Loaders, etc.
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ features/               # Feature-scoped frontend modules
โ”‚   โ”‚   โ”œโ”€โ”€ auth/               # Login/signup forms & logic
โ”‚   โ”‚   โ”œโ”€โ”€ problems/           # Problem list, filters, workspace
โ”‚   โ”‚   โ”œโ”€โ”€ contests/           # Contest UI
โ”‚   โ”‚   โ”œโ”€โ”€ leaderboard/        # Leaderboard UI
โ”‚   โ”‚   โ””โ”€โ”€ profile/            # Profile page sections
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ controllers/            # API route handlers (thin layer)
โ”‚   โ”œโ”€โ”€ services/               # Business logic / data layer
โ”‚   โ”œโ”€โ”€ models/                 # Mongoose schemas
โ”‚   โ”œโ”€โ”€ middlewares/            # Request middleware
โ”‚   โ””โ”€โ”€ lib/                    # Utilities & infrastructure
โ”‚
โ”œโ”€โ”€ docker/                     # Docker build scripts
โ”œโ”€โ”€ redis/                      # Redis config files
โ”œโ”€โ”€ public/                     # Static assets
โ”œโ”€โ”€ Dockerfile                  # Multi-stage production build
โ”œโ”€โ”€ docker-compose.yml          # Production stack
โ””โ”€โ”€ package.json

06Data Models

User

FieldTypeDescription
_idObjectIdMongoDB document ID
uidStringFirebase UID (synced from client auth)
usernameStringUnique display name
emailStringUser email address (unique)
passwordHashStringbcryptjs-hashed password
roleStringEnum: user | admin
solvedProblemsObjectId[]References to solved Problem documents
createdAtDateAccount creation timestamp

Problem

FieldTypeDescription
_idObjectIdDocument ID
titleStringProblem title
slugStringURL-friendly identifier
difficultyStringEnum: easy | medium | hard
tagsString[]Algorithm/topic tags (e.g., "dp", "graph")
descriptionStringMarkdown problem statement (supports LaTeX via KaTeX)
inputFormatStringInput specification
outputFormatStringOutput specification
testCasesArrayArray of {input, expectedOutput} objects
timeLimitNumberTime limit in milliseconds
memoryLimitNumberMemory limit in MB
sampleTestCasesArrayPublicly visible sample cases

Submission

FieldTypeDescription
_idObjectIdDocument ID
userIdObjectIdReference to User
problemIdObjectIdReference to Problem
languageStringEnum: cpp | python | java | javascript
codeStringRaw source code
verdictStringOne of the 9 possible verdicts
executionTimeNumberRuntime in ms
memoryUsedNumberMemory consumption in KB
testCaseResultsArrayPer-test-case result details
createdAtDateSubmission timestamp

Contest

FieldTypeDescription
_idObjectIdDocument ID
titleStringContest name
descriptionStringContest description
startTimeDateContest start datetime
endTimeDateContest end datetime
problemsObjectId[]List of Problem references
participantsObjectId[]Registered user references
createdByObjectIdAdmin user reference

07Authentication System

CodeArena implements a dual-layer authentication strategy combining Firebase Auth on the client side with JWT cookies on the server side.

A
Register / Login (Native)

POST /api/auth/register or POST /api/auth/login โ€” password hashed with bcryptjs, user stored in MongoDB, JWT issued as an HttpOnly cookie.

B
Firebase Sync

POST /api/auth/sync โ€” client sends Firebase ID token; server verifies it via Firebase Admin SDK, then upserts the user in MongoDB and issues its own JWT cookie.

C
Authenticated Requests

All protected API routes run through authMiddleware.js which reads and verifies the token HttpOnly cookie using jsonwebtoken.

D
Logout

POST /api/auth/logout โ€” clears the JWT cookie on the server side.

Security Note

JWT tokens are stored as HttpOnly cookies (not localStorage), protecting them from XSS attacks. The Docker socket is also proxied through tecnativa/docker-socket-proxy to restrict container API access.

08Judge Engine

The judge is the most technically complex subsystem of CodeArena. It compiles and executes user-submitted code inside ephemeral Docker containers, measuring execution time and memory, and comparing output against expected test results.

Supported Languages

C++

Compiled with g++; fastest execution.

Python

Interpreted; python3 runtime.

Java

Compiled with javac and run on JVM.

JavaScript

Run with Node.js runtime.

10Contests

CodeArena supports timed competitive contests. Each contest has a defined start time, end time, and a set of problems. Users can register for a contest and make submissions during the contest window. A leaderboard is computed per-contest based on accepted problems and penalty time.

Contest States

  • Upcoming โ€” Before startTime; registration is open.
  • Active โ€” Between startTime and endTime; submissions accepted.
  • Ended โ€” After endTime; read-only, final leaderboard visible.

11Leaderboard

The platform maintains both a global leaderboard and per-contest leaderboards. Rankings are computed by the leaderboard service from submission data stored in MongoDB. The global leaderboard is accessible at /leaderboard and via GET /api/contests/[id]/leaderboard for contest-specific rankings.

12API Reference โ€” Auth

MethodEndpointAuthDescription
POST
/api/auth/registerNoneCreate a new account. Body: {username, email, password}. Sets JWT cookie.
POST
/api/auth/loginNoneAuthenticate with email/password. Sets JWT cookie on success.
POST
/api/auth/logoutJWTClears the JWT cookie. Logs out the session.
POST
/api/auth/syncFirebase TokenSyncs a Firebase-authenticated user to MongoDB. Issues JWT cookie.

13API Reference โ€” Problems

MethodEndpointAuthDescription
GET
/api/problemsOptionalList problems with search (?q=), tag filter, difficulty filter, and pagination (?page=&limit=). Returns solved status if authenticated.
GET
/api/problems/[id]OptionalGet a single problem by ID, including description, sample test cases, time/memory limits.
POST
/api/problems/[id]/submitJWT RequiredSubmit code for a problem. Body: {language, code}. Returns submission ID immediately; judging is async.

14API Reference โ€” Evaluation

MethodEndpointAuthDescription
POST
/api/evaluation/executeInternalRun code in a Docker container. Body: {language, code, stdin}. Returns stdout, stderr, exitCode.
POST
/api/evaluation/judgeInternalFull judge run: execute against all test cases and compute verdict.
POST
/api/evaluation/testJWT RequiredRun code against a single custom test input (for the "Run" button). Not recorded as a submission.
GET
/api/evaluation/statusJWT RequiredPoll for the current verdict of a pending/judging submission. Query: ?id=submissionId.

15API Reference โ€” Contests

MethodEndpointAuthDescription
GET
/api/contestsNoneList all contests (upcoming, active, ended).
POST
/api/contestsAdmin JWTCreate a new contest.
GET
/api/contests/[id]NoneGet contest details including problems list.
POST
/api/contests/[id]/registerJWT RequiredRegister the authenticated user for the contest.
GET
/api/contests/[id]/participantsNoneList all registered participants for the contest.
GET
/api/contests/[id]/leaderboardNoneFetch the contest leaderboard, ranked by accepted problems and penalty.

16API Reference โ€” Users

MethodEndpointAuthDescription
GET
/api/usersJWTList all users (admin use).
GET
/api/users/[id]NoneGet public profile data for a user by ID.
GET
/api/user/problems-statusJWT RequiredReturns the authenticated user's solved/attempted problem list.
GET
/api/submissionsJWT RequiredList submissions for the authenticated user (or all, for admins).
GET
/api/submissions/[id]JWT RequiredGet full details of a specific submission including per-test-case results.
GET
/api/healthNoneHealth check endpoint. Returns server/DB/Redis status.

17API Reference โ€” Admin

MethodEndpointAuthDescription
GET
/api/admin/logsAdmin JWTRetrieve all admin action logs with pagination.
GET
/api/admin/logs/[id]Admin JWTGet a specific admin log entry by ID.

18Page Routes

RouteAuthDescription
/NoneLanding page with 3D hero, animations (Three.js, GSAP, Framer Motion)
/loginNoneEmail/password + Firebase login form
/signupNoneRegistration form with validation (Zod + React Hook Form)
/problemsNonePaginated problem browser with search and tag/difficulty filters
/problems/[id]JWT for SubmitProblem detail + Monaco editor + Run + Submit
/leaderboardNoneGlobal user leaderboard
/profileJWTOwn profile page with activity calendar and stats
/profile/[id]NonePublic profile view for any user
/profile/settingsJWTAccount settings (avatar, username, etc.)
/userdashboardJWTPersonal dashboard: recent submissions, stats, activity
/practiceNonePlaceholder โ€” "Coming Soon"
/test-dockerNone (dev)Debug interface to test Docker execution pipeline

19Local Development Setup

Prerequisites

Node.js 20+, npm, Docker Desktop (required for code execution), and either local MongoDB + Redis services or Docker.

Step 1 โ€” Clone & Install

bash
git clone <repository-url>
cd CodeArena-TeamProject
git checkout development
npm install

Step 2 โ€” Create Environment File

.env.local
MONGODB_URI=mongodb://localhost:27017/codearena
JWT_SECRET=your_super_secret_jwt_key

REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password

# Firebase (from Firebase Console โ†’ Project Settings โ†’ General)
NEXT_PUBLIC_FIREBASE_API_KEY=
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
NEXT_PUBLIC_FIREBASE_PROJECT_ID=
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
NEXT_PUBLIC_FIREBASE_APP_ID=
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=

Step 3 โ€” Build Judge Executor Images

bash
npm run docker:build
# Runs docker/scripts/build-images.sh
# Builds: judge-cpp, judge-python, judge-java, judge-js Docker images

Step 4 โ€” Start Dev Server

bash
npm run dev
# App available at http://localhost:3000

20Docker Compose

The repository includes a production-ready docker-compose.yml that wires together all services. It runs the app on port 3001 (mapped from internal 3000).

Services

ServiceImagePortPurpose
mongodbmongo:latest27017Primary database with health check and persistent volume
redisredis:76379Cache, BullMQ queue, Socket.IO adapter; AOF persistence enabled, 256 MB limit
appLocal build3001โ†’3000Next.js production app; waits for MongoDB and docker-proxy
docker-proxytecnativa/docker-socket-proxy2376 (host)Restricted Docker socket proxy; only exposes CONTAINERS, IMAGES, EXEC, POST
bash
docker compose up -d --build
bash
docker compose -f docker-compose.yml -f docker-compose.dev.yml up

21Environment Variables

VariableRequiredDescription
MONGODB_URIโœ…Full MongoDB connection string (with auth if applicable)
JWT_SECRETโœ…Secret key used to sign/verify JWT tokens โ€” keep this private
REDIS_HOSTโœ…Redis server hostname (e.g., localhost or redis in Docker)
REDIS_PORTโœ…Redis port (default 6379)
REDIS_PASSWORDโœ…Redis auth password
REDIS_URLโ€”Full Redis URL (alternative to HOST/PORT/PASSWORD)
DOCKER_HOSTโ€”Docker API host. Set to http://docker-proxy:2375 in Docker Compose
NODE_ENVโ€”development | production
NEXT_PUBLIC_FIREBASE_API_KEYโœ…Firebase project API key (client-side)
NEXT_PUBLIC_FIREBASE_AUTH_DOMAINโœ…Firebase auth domain
NEXT_PUBLIC_FIREBASE_PROJECT_IDโœ…Firebase project ID
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKETโœ…Firebase storage bucket
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_IDโœ…Firebase messaging sender
NEXT_PUBLIC_FIREBASE_APP_IDโœ…Firebase app ID
NEXT_PUBLIC_FIREBASE_MEASUREMENT_IDโ€”Firebase Analytics measurement ID

22NPM Scripts

ScriptCommandDescription
npm run devnext devStart Next.js development server with hot reload on port 3000
npm run buildnext buildCreate an optimized production build
npm run startnext startRun the production build (requires npm run build first)
npm run linteslintRun ESLint across the codebase
npm run docker:buildbash docker/scripts/build-images.shBuild all language executor Docker images for the judge
npm run preparehusky installSet up Husky Git hooks (auto-runs on npm install)

Git Hooks

Husky + lint-staged is configured to run Prettier on all staged .js, .jsx, .ts, .tsx, .json, .css, .md, .mjs files before each commit, ensuring consistent code formatting.

23Dockerfile (Multi-Stage)

The production Dockerfile uses a 3-stage build to keep the final image lean and secure:

1
Stage: deps (node:20-alpine)

Installs only npm dependencies. Husky is disabled in CI/Docker via ENV HUSKY=0.

2
Stage: builder (node:20-alpine)

Copies deps and source, accepts Firebase env vars as build-time ARGs, and runs next build with telemetry disabled.

3
Stage: runner (node:20-alpine)

Copies only the Next.js standalone output and static assets. Runs as a non-root nextjs user (UID 1001) on port 3000.

24Team

CodeArena was built by a six-person team with specialized responsibilities across backend, frontend, and project leadership.

Team Lead

Rabiul Islam

Backend

Arafat Salehin

Backend

AH Muzahid

Frontend

Shahnawas Adeel

Frontend

Abdullah Noman

Frontend

Ummey Salma Tamanna

CodeArena ยท Team Project ยท Next.js 16 ยท MongoDB ยท Docker ยท docs generated April 2026