An online judge with tasks and contests.
Judge backend: wykoj/wykoj-judge
Live Version: https://wykoj.jonowo.dev
UI based on HKOI Online Judge.
- Clone repo with
git clone https://github.com/jonowo/wykoj. - Compile (and minify)
wykoj/scss/style.scsstowykoj/static/style.min.css. (Settings are configured for the VS Code Live SASS Compiler extension.)- Alternative:
npm install -g sassandsass wykoj/scss/style.scss wykoj/static/style.min.css
- Alternative:
- Install/Upgrade dependencies:
pip install -r requirements.txt. - Initialize database:
python init_db.py. (You will be asked to install the appropriate database driver.)- An admin user with username
adminand passwordadminadminwill be created. (Please change username and password upon first login.)
- An admin user with username
- Create a (private) GitHub repo to store test cases. It will be used as a submodule.
- Run
git submodule add [repo link] wykoj/test_cases# - Run
git submodule init && git submodule update - Create a webhook for just the push event #
- Payload URL:
[your domain]/github/push - Content type:
application/json - Secret:
SECRET_KEYfrom above - Events:
pushonly
- Payload URL:
- Run
- Create
config.jsonwith the following keys: *TEST_CASES_GITHUB- Test cases GitHub repo URL.JUDGE_HOST- Domain of judging backend, e.g.https://example.com(without trailing slash).SECRET_KEY- A URL-safe secret key, can be generated withsecrets.token_hex(16).DB_URI- A database URI including login credentials.
- Run
pyenv local wykojor similar to activate a python environment. - Run
uvicorn --host 0.0.0.0 --port 3000 --factory "wykoj:create_app".
Access the online judge at http://localhost:3000.
If you are part of the WYKOJ Team:
*: Ask me for config.json.
#: You have access to wyk-stem-team/wykoj-test-cases, skip this step.
View the Internal Deployment Guide.
yapf -ri . && isort .Multiple submissions from the same user to the same task are marked first_solve=True.
Drop first_solve and solves columns and compute first solve instead.
Or use locks when saving submissions instead.
- Spinning Ame animation on submission page if pending
- Recommended tasks (unsolved tasks ordered by solved descending)
- Including previous subtask in subtask
- Batch user creation
- Chess rating leaderboard
- Lichess games
- Stats in user page and contests page
- Task stats page (hide link during contest, contest redirect)
- Custom page creation (admin)
- Advanced filtering form footer for submissions page
- Categorization for tasks
- Groups and assignments