A comprehensive Hackathon and Programming Contest Management Platform built with Laravel 12, inspired by the BOCA Online Contest Administrator. MicroHelium provides a modern, feature-rich environment for organizing competitive programming events, hackathons, and CTF competitions.
- Multi-Contest Support: Run multiple contests simultaneously with independent configurations
- Flexible Timing: Configure contest duration, start/end times, and freeze periods
- Multi-Site Architecture: Support for distributed contests across multiple physical locations
- Penalty System: Configurable penalty times for incorrect submissions
- Problem Packages: Import problems as ZIP files with standardized structure
- Multi-Language Support: C, C++, Java, Python, Kotlin, and more
- Auto-Judge Integration: Automatic compilation, execution, and output comparison
- Test Cases: Multiple input/output test case pairs per problem
- Problem Colors: Visual identification with balloon colors for solved problems
- Role-Based Access: Admin, Judge, Staff, Team, and Spectator roles
- Team Registration: Support for individual or team-based participation
- IP Restrictions: Optional IP-based login restrictions for security
- Multi-Login Control: Configure simultaneous login policies
- Real-Time Judging: Immediate feedback on code submissions
- Verdict Types: Accepted, Wrong Answer, Time Limit, Runtime Error, Compilation Error
- Duplicate Detection: SHA-based detection of identical submissions
- Source Code Management: Download and review all submissions
- Real-Time Scoreboard: Live updates with configurable freeze time
- ICPC-Style Scoring: Problems solved + time penalty ranking
- Score Export: ICPC format, JSON, and custom report exports
- Balloon Notifications: Visual indicators for solved problems
- Q&A Communication: Teams can ask judges questions about problems
- Broadcast Clarifications: Judges can send announcements to all teams
- Status Tracking: Track pending, answered, and broadcast clarifications
- File Backup System: Teams can backup their work during the contest
- Task Management: Staff task assignment (printing, balloon delivery)
- Comprehensive Logging: Full audit trail of all actions
- Report Generation: Statistics, charts, and analytics
- PHP: >= 8.2
- Laravel: 12.x
- Database: MySQL 8.0+ / PostgreSQL 14+ / SQLite
- Node.js: >= 20.x
- Composer: >= 2.x
git clone https://github.com/UniteOpenSource/microHelium.git
cd microHeliumcomposer installnpm installcp .env.example .env
php artisan key:generateEdit .env and configure your database connection:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=microhelium
DB_USERNAME=your_username
DB_PASSWORD=your_passwordphp artisan migratephp artisan db:seednpm run buildphp artisan serveVisit http://localhost:8000 in your browser.
For automatic code evaluation, you need to set up the auto-judge system:
# Ubuntu/Debian
sudo apt-get install gcc g++ openjdk-17-jdk python3 gpc
# Fedora/RHEL
sudo dnf install gcc gcc-c++ java-17-openjdk python3# Create jail directory
sudo mkdir -p /bocajail
sudo debootstrap --arch=amd64 jammy /bocajail http://archive.ubuntu.com/ubuntucd tools
gcc -O2 -o safeexec safeexec.c
sudo chown root:root safeexec
sudo chmod 4555 safeexecEdit your .env file:
AUTOJUDGE_ENABLED=true
AUTOJUDGE_JAIL_PATH=/bocajail
AUTOJUDGE_TIME_LIMIT=10
AUTOJUDGE_MEMORY_LIMIT=512php artisan autojudge:startProblems are uploaded as ZIP files with the following structure:
problem.zip/
├── description/
│ ├── problem.info # basename, fullname, descfile
│ └── problem.pdf # Problem statement
├── compile/
│ ├── c, cpp, java, py3 # Compilation scripts
├── run/
│ ├── c, cpp, java, py3 # Execution scripts
├── compare/
│ ├── c, cpp, java, py3 # Output comparison scripts
├── input/
│ ├── 1, 2, 3, ... # Test input files
├── output/
│ ├── 1, 2, 3, ... # Expected output files
├── limits/
│ └── c, cpp, java, py3 # Time/memory limits per language
└── tests/
└── validate # Optional validation scripts
basename=hello
fullname=Hello World Problem
descfile=problem.pdf
POST /api/login- User authenticationPOST /api/logout- User logoutGET /api/user- Get authenticated user
GET /api/contests- List all contestsPOST /api/contests- Create new contestGET /api/contests/{id}- Get contest detailsPUT /api/contests/{id}- Update contestDELETE /api/contests/{id}- Delete contest
GET /api/problems- List problems for current contestPOST /api/problems- Create/upload problemGET /api/problems/{id}- Get problem detailsGET /api/problems/{id}/download- Download problem statement
GET /api/runs- List user submissionsPOST /api/runs- Submit solutionGET /api/runs/{id}- Get submission detailsGET /api/runs/{id}/source- Download source code
GET /api/scoreboard- Get current scoreboardGET /api/scoreboard/export- Export scoreboard data
GET /api/clarifications- List clarificationsPOST /api/clarifications- Submit clarification requestPUT /api/clarifications/{id}- Answer clarification (judges)
| Setting | Description | Default |
|---|---|---|
duration |
Contest duration in minutes | 300 |
penalty |
Penalty per wrong submission (minutes) | 20 |
freeze_time |
Minutes before end to freeze scoreboard | 60 |
max_file_size |
Maximum submission file size (KB) | 100 |
| Setting | Description | Default |
|---|---|---|
ip_restriction |
Enable IP-based login restriction | false |
multi_login |
Allow simultaneous logins | false |
session_timeout |
Session timeout in minutes | 120 |
| Role | Permissions |
|---|---|
| Admin | Full system access, contest management, user management |
| Judge | Evaluate submissions, answer clarifications, view all runs |
| Staff | Task management, balloon delivery, printing |
| Team | Submit solutions, view scoreboard, ask clarifications |
| Score | View-only scoreboard access |
- Framework: Laravel 12
- Language: PHP 8.2+
- Database: MySQL/PostgreSQL/SQLite
- Queue: Laravel Horizon / Redis
- Authentication: Laravel Sanctum
- Framework: Vue.js 3.5
- Build Tool: Vite 6
- CSS Framework: Tailwind CSS 4 + Bootstrap 5
- Charts: Chart.js 4
- Icons: Font Awesome 6
- Container: Docker / Laravel Sail
- Testing: PHPUnit 11, Pest
- Code Style: Laravel Pint
- CI/CD: GitHub Actions
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
If you discover a security vulnerability, please send an email to [email protected]. All security vulnerabilities will be promptly addressed.
This project is licensed under the MIT License - see the LICENSE file for details.
- BOCA Online Contest Administrator - Original inspiration for contest management features
- Laravel Framework - The PHP framework for web artisans
- Vue.js - The progressive JavaScript framework
- ACM-ICPC - International Collegiate Programming Contest standards
- Documentation: Wiki
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with love for the competitive programming community.