A powerful, sleek, and real-time Online Judge platform built with Node.js, Socket.IO, and Prisma. This platform allows users to participate in programming contests, submit code, and allows administrators to manage problems and monitor participants via live camera feeds.
- Real-time Submissions: Submit code and see results (AC, WA, TLE, etc.) instantly.
- Contest Participation: Join scheduled contests with password protection.
- Live Scoreboard: Track your ranking and progress in real-time.
- Problem Filtering: Search and filter problems by title or difficulty.
- Profile & Rating: View your performance and current rating.
- Problem Management: Create, edit, and delete problems with custom time and memory limits.
- Testcase Management: Upload input/output pairs for automated grading.
- Contest Management: Schedule contests, assign problems, and set proctoring requirements.
- Live Camera Supervision: Monitor contestants' webcams in real-time to prevent cheating.
- Submission Oversight: View and manage all submissions across the platform.
- Camera Proctoring: Contests can be configured to require camera access.
- Admin Dashboard: Real-time grid view of all active contestants' camera feeds.
- Disconnection Alerts: Instant notification if a contestant's camera is disconnected.
- Backend: Node.js, Express, TypeScript, Socket.IO.
- Database: SQLite (via Prisma ORM).
- Frontend: HTML5, Vanilla JavaScript, Tailwind CSS 4.
- Infrastructure: Docker (for isolated code execution).
git clone https://github.com/CoderIshibuki/judge-system
cd online-judgenpm installCreate a .env file in the root directory:
JWT_SECRET=your_secret_key
DATABASE_URL="file:./dev.db"
PORT=3000npx prisma migrate dev --name init
npx prisma db seed # Optional: seed initial dataDevelopment Mode:
npm run devProduction Mode:
npm run build
npm startWhen accessing the platform via a local IP (e.g., http://192.168.1.5:3000), modern browsers may block camera access due to insecure context. To fix this:
- Use HTTPS (recommended).
- Or in Chrome, go to
chrome://flags/#unsafely-treat-insecure-origin-as-secure, enable it, and add your IP.
This project is licensed under the MIT License.