Welcome to the Contest Administration Manual!

The Programming Contest Suite (PCS) is designed to ease the administration of a programming contest hosted with the DOMjudge jury system by facilitating contest registration and management, generating contest data files required by DOMjudge, and processing contest results exported from DOMjudge. The articles comprising this manual document how to host a programming contest with the PCS.

Management Interfaces

A contest is managed through the Django Administration and the Contest Dashboard.

Administration Flowchart

The following diagram outlines the actions performed by contest administrators throughout the process of hosting a contest.

---
config:
  flowchart:
    htmlLabels: false
---
flowchart
    direction TB

    %% Node style classes (keep your task colors)
    classDef D fill:#67e1b3,stroke:#092e20,stroke-width:2px,color:#000
    classDef C fill:#9bdcf1,stroke:#1b9cc6,stroke-width:2px,color:#000
    classDef L fill:#fff,stroke:#999,stroke-dasharray: 5 5,color:#000

    %% Main containers (IDs used so we can style them below)
    subgraph PreContest [**Pre-contest**]
        direction TB

        PC1["Create contest in DB"]

        subgraph ExtraCredit [**Extra Credit System**]
            direction TB
            EC1["Add faculty to DB"]
            EC2["Add courses to DB"]
            EC1 --> EC2
        end

        PC2["Assign volunteer roles"]
        PC3["Add sponsors to DB"]

        subgraph DOMjudgeFiles [**DOMjudge Files**]
            direction TB
            DJ1["Create walk-in teams"]
            DJ2["Generate and download contest data files"]
            DJ1 --> DJ2
        end

        %% connect to nodes inside sub-subgraphs (safer)
        PC1 --> ExtraCredit 
        PC1 -->|"*Before Contest Day*"| PC2
        PC1 -->|"*Before Contest Day*"| PC3
        PC1 -->|"*After Registration Deadline*"| DOMjudgeFiles
    end

    subgraph ContestDay [**Day of Contest**]
        direction LR
        CD1["Contestant check-in"]
        CD2["Volunteer check-in"]
    end

    subgraph PostContest [**Post-contest**]
        direction LR
        PO1["Upload contest results"]
        PO2["Generate extra credit reports"]
        PO3["Email faculty"]
        PO4["Download all faculty reports"]
        PO5["Generate merged registration and DOMjudge results"]
        PO6["Download all division reports"]

        PO1 -->|"*Announce course selection deadline*"| PO2 
        PO2 --> PO3
        PO2 -->|"*Optional*"| PO4
        PO1 --> PO5
        PO5 -->|"*CSV file per division*"| PO6
    end

    %% high-level connection
    PreContest -->|"*Upload contest data files to DOMjudge*"| ContestDay --->|"*Download results files from DOMjudge*"|PostContest

    %% Legend (keeps your original labels)
    subgraph Legend [Legend]
        direction TB
        L1["Django Administration"]
        L2["Contest Dashboard"]
        L1 ~~~ L2
    end

    %% Assign classes to tasks
    class PC1,PC3,EC1,EC2,L1 D
    class PC2,DJ1,DJ2,PO1,PO2,PO3,PO4,PO5,PO6,L2 C
    class Legend L

    %% Style the subgraph containers (light neutral palettes)
    %% Pre-contest: warm neutral / parchment
    style PreContest fill:#F8F8F8,stroke:#A9A9A9,stroke-width:1px

    %% Sub-subgraphs inside Pre-contest: lighter tints that tie to the Pre-contest color
    style ExtraCredit fill:#DCDCDC,stroke:#808080,stroke-width:1px
    style DOMjudgeFiles fill:#DCDCDC,stroke:#808080,stroke-width:1px

    %% Post-contest: cool neutral / very light gray-blue
    style PostContest fill:#F8F8F8,stroke:#A9A9A9,stroke-width:1px

    %% Give the Legend a subtle white box with dashed border
    style Legend fill:#FFFFFF,stroke:#CCCCCC,stroke-dasharray:5 5,stroke-width:1px

Table of contents