NOCA is a modern, Docker-based platform for running ICPC-like programming contests. Built with Python and FastAPI, it provides a modular infrastructure for managing competitive programming competitions with support for multiple concurrent contests, automated judging, and comprehensive contest administration.
NOCA reimagines the core principles of BOCA (the backbone of Brazilian programming marathons) for the modern era. It's a two-module application designed specifically for competitive programming contests, offering flexible contest management, secure code execution, and real-time scoring.
Multiple Concurrent Contests: Run multiple contests simultaneously, each with isolated problems, users, and configurations
Per-Contest Scope: Problems and users are scoped to individual contests, ensuring clean separation
Multi-Site Contest Management: Organize each contest into physical sites, assign teams and staff to sites, auto-create missing sites during imports, and manage users with site-aware grouping
Flexible Judging Modes:
Autojudge-only contests for fully automated verdicts
Human-reviewed contests requiring judge confirmation for final verdicts
Submissions can be re-judged if required
Customizable Contest Rules: Each contest can define its own:
Duration and timing
Penalty systems
Reaper cycles for background tasks
Scoreboard freeze/thaw mechanics
Import/Export: Bulk import and export problems and users via CSV/JSON
Site Logistics Reporting: Generate a markdown users-per-site report with role grouping, chief judge annotation, login URL, contest rules summary, and team location data for printing or PDF conversion
Submission Management: Teams can download their submissions after contest ends
Contest Analytics Reports: Admins and judges can access a reports page with problem summaries, verdict/language cross-tables, team-vs-problem breakdowns, and time-based charts
Animeitor / Reveleitor Compatibility Service: Admins and UberAdmins can download an Animeitor-compatible webcast ZIP from Administration > Export/Import for use with maratona-animeitor, including live animated scoreboards and post-freeze revelation ceremonies
Flexible Problem Statements: Support for both PDF and Markdown formats with LaTeX math equations and Mermaid diagram rendering
Online Test Case Editor: Web-based interface for managing problem test cases
Operational Task Workflow: Accepted runs can auto-create balloon tasks, and task dashboards include queue time, service time, and finished-task detail views
Container-Based Isolation:
Each submission runs in isolated Docker containers
isolate is the authoritative inner sandbox for time, memory, PID, and output limits
Docker remains the outer safety boundary around judge execution
Custom Dockerfile support for compilation and execution
Per-Contest Language Selection: At contest creation, the uberadmin selects which active languages are available to teams. The allowed set is immutable after creation and enforced across submission, problem limits, and language-display pages
Language Support: Script for seeding common languages (C, C++, Java, Python, etc.) with optional icon metadata for richer UI presentation
Auto-Limit Profiling: Reference solutions can be profiled per language to populate problem limits, with per-language profiling defaults for repetitions and PID floors
Modern Web UI: Plain HTML + CSS + JavaScript + Bootstrap with Server-Sent Events
Safer Team Workflow: Submission forms can show a confirmation modal before upload, while team profile identity, site, and location fields remain administrator-managed during contests
Background Services: Task queue for balloons, printing, and SOS requests
Comprehensive RBAC: Role-based access control with contest-scoped identities
Check BOOTSTRAP.md for instructions on how to run NOCA using containers