JUD:GE is an inference-only online judge for Python HTTP servers. Users submit a ZIP that runs python app.py, and the platform evaluates accuracy/latency on hidden test cases.
- Node.js (ESM) backend with Express
- BullMQ + Redis async queue
- Docker-based grading (resource limits, read-only rootfs)
- React + TypeScript frontend (
front/) - Prisma ORM (SQLite for dev, PostgreSQL-ready)
/server.js
/worker.js
/package.json
/prisma/schema.prisma
/src/...
/uploads (gitignored)
/data (gitignored)
/docs/...
/front/...
- Node.js 18+
- Docker Engine
- Redis
- Python 3.11+ (for evaluator scripts)
- Install dependencies:
npm install
npm --prefix front install
- Create env file:
copy .env.example .env
- Run Prisma migrations:
npm run prisma:migrate
- Seed demo data:
npm run seed
After seeding, a default admin account is created:
- email:
admin@judge.local - password:
admin123
- Start dev servers:
npm run dev
- Build frontend:
npm --prefix front run build
- Start API server:
npm start
- Start worker:
npm run worker
POST /api/auth/registerPOST /api/auth/loginGET /api/problemsPOST /api/submissions(multipart zip upload)GET /api/leaderboard/:problemIdPOST /api/admin/settings
See docs/SUBMISSION_SPEC.md for detailed instructions.
- The backend serves
front/distwhen it exists. uploads/stores artifacts and zips.data/stores datasets, evaluators, and run logs.