diff --git a/README.md b/README.md
index b7e6733..f11816d 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,12 @@
-cms-dev.github.io
-=================
+# [cms-dev.github.io](https://cms-dev.github.io)
 
-Website for the cms-dev organization.
+Website for CMS and the cms-dev organization.
+
+## Deploy
+
+```
+$ python3 -m venv mkdocs
+$ source mkdocs/bin/activate
+$ pip install -r requirements.txt
+$ mkdocs gh-deploy
+```
diff --git a/contribute.html b/contribute.html
deleted file mode 100644
index 6cc926c..0000000
--- a/contribute.html
+++ /dev/null
@@ -1,319 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset='utf-8'>
-    <meta http-equiv="X-UA-Compatible" content="chrome=1">
-    <meta name="favicon" content="./cms.svg">
-    <meta name="description" content="CMS, or Contest Management System, is an open source grading system handling IOI-like programming competition.">
-    <meta name="viewport" content="width=device-width, user-scalable=no">
-    <link rel="shortcut icon" href="./images/cms_icon.png" />
-    <link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen" />
-    <link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print" />
-    <!--[if lt IE 9]>
-    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <title>CMS :: Contribute</title>
-  </head>
-
-  <body>
-    <div id="container">
-      <div class="inner">
-
-        <header>
-          <img src="./cms.svg"/>
-          <h1>CMS :: Contribute</h1>
-          <h2>Contest Management System</h2>
-          <p>
-            <a href="https://github.com/cms-dev/cms/actions"><img src="https://github.com/cms-dev/cms/actions/workflows/main.yml/badge.svg" alt="Build Status"></a>
-            <a href="https://codecov.io/gh/cms-dev/cms" rel="nofollow"><img src="https://codecov.io/gh/cms-dev/cms/branch/master/graph/badge.svg" alt="Codecov Status"></a>
-            <a href="https://t.me/contestms" rel="nofollow"><img src="https://img.shields.io/endpoint?label=Support&style=flat-square&url=https%3A%2F%2Fmogyo.ro%2Fquart-apis%2Ftgmembercount%3Fchat_id%3Dcontestms" alt="Get Support on Telegram"></a>
-          </p>
-        </header>
-
-        <div class="button">
-          <a href="./index.html">Main</a>
-          <a href="./screenshots.html">Screenshots</a>
-          <a href="./testimonials.html">Testimonials</a>
-          <a href="./contribute.html">Contribute</a>
-          <a href="./related.html">Related</a>
-        </div>
-
-        <hr>
-
-<h1>How to contribute <a class="permalink" href="#how_to" name="how_to">§</a></h1>
-
-<p>Before starting the design and implementation of any major feature, please contact the core team via the <a href="https://groups.google.com/forum/#!forum/contestms-discuss">discussion mailing list</a> to organize the effort and making sure there is no duplication of work.</p>
-
-<p>For every change, you should ensure that:</p>
-<ol>
-<li>no PEP8 errors are introduced (check with the <code>pep8</code> command)</li>
-<li>the Pylint score does not decrease too much (use <code>pylint</code>)</li>
-<li>you add your copyright line in the header of all files you changed substantially;</li>
-<li>if it is your first contribution, your name is in <code>AUTHORS.txt</code>.</li>
-</ol>
-<p>You can setup automatic checks for the first three items using git hooks as explained in the <a href="https://github.com/cms-dev/cms/wiki/Developerhints">wiki</a>.</p>
-
-<p>Depending on the size of your project, the review process is slightly different.</p>
-<p>For a small to medium change (that is reasonably reviewed in a single time), you should:</p>
-<ol>
-  <li>fork cms-dev/cms on github;</li>
-  <li>create a new branch and commit there your change(s);</li>
-  <li>create a pull request against the master branch of cms-dev/cms</li>
-  <li>after about 5 minutes, check on <a href="https://travis-ci.org/cms-dev/cms/pull_requests">Travis CI</a> that your pull request passes all the tests;</li>
-  <li>wait for a member of the core team to review the pull request;</li>
-  <li>implement the required changes as new commits in your branch <strong>without modifying</strong> the existing commits;</li>
-  <li>the pull request will pick up the new commits and the cycle begins again (Travis, review, new follow up commits)</li>
-  <li>when the reviewer agree on the change, you should rebase your branch in a way that makes sense, and inform the reviewer when it's done</li>
-  <li>the reviewer will then push your change to master</li>
-</ol>
-
-<p>For a big change that requires several commits, we may want to review it in several steps that may also break cms or the tests. Since we try to keep the master branch as clean as possible, we will create a feature branch on cms-dev, and you will issue pull requests against that branch. The review process will be the same, but you will be allowed to temporarily break tests and features (not to break the style!). When the feature is completed, we will agree on how to rebase the branch on top of master and we will merge it.</p>
-
-
-<h1>Contribution ideas <a class="permalink" href="#ideas" name="ideas">§</a></h1>
-
-<p>The following are some ideas for self-contained projects to expand CMS&rsquo;s features. All of these require some knowledge of Python, SQLAlchemy and relational databases. Experience with the organization of programming contests and training camps is a plus.</p>
-
-<p>If you are interested in developing one or more of these ideas, please contact us via the <a href="https://groups.google.com/forum/#!forum/contestms-discuss">discussion mailing list</a>, and we will arrange for a <a href="https://github.com/cms-dev/teams/owners">member of the core team</a> to provide guidance.</p>
-
-
-
-
-
-<hr>
-
-
-<h2>Representative submissions <a class="permalink" href="#representative_subs" name="representative_subs">§</a></h2>
-
-<p>Allow admins to store, for each task a set of representative submissions, intended to have a precise result (for example: a wrong submission which should score zero points, a correct one which should score full points, and an intermediate one which should score half of the points. Admins should be able to test at any moment that the representative submissions score exactly as expected.</p>
-
-<p>More precisely, there should be a way to associate to tasks a set of tuples (submission, (name), expected result); moreover, AWS should be extended to allow the recomputation of the scores associated to the representative submissions and to warn the admins when the score is different from the expected.</p>
-
-<p><strong>Expected changes.</strong></p>
-
-<ol>
-  <li>Adding the new fields for the representative submissions to the task DB class, together with their metadata (name and expected results); writing the updater.</li>
-  <li>Adding hooks to the YamlImporter for easy testing.</li>
-  <li>Adding AWS UI to show and edit the representative solutions and their metadata (including the actual results), and to trigger a re-evaluation.</li>
-  <li>Letting ES and SS know that there is a new &ldquo;type&rdquo; of submission and make sure that the path taken by these submissions is correct and do not spill over the paths taken by the contestants&rsquo; submissions.</li>
-</ol>
-
-<p><strong>Additional requirements</strong>: none.</p>
-
-<p><strong>Difficulty</strong>: medium.</p>
-
-<p><strong>Size</strong>: medium.</p>
-
-
-
-
-<hr>
-
-<h2>Expand test coverage <a class="permalink" href="#expand_test" name="expand_test">§</a></h2>
-
-<p>CMS currently has a functional test that runs all the services (apart from RWS) and simulating the creation of contests and tasks by the admins, and some submissions from the user. There are some unit tests but very limited. The task is to increase the coverage of the unit tests (possibly reorganizing code to make it more testable), extend the functional tests to other aspects (like importing of tasks) and to speed up the execution of functional tests.</p>
-
-<p><strong>Additional requirements</strong>: testing experience (especially in Python).</p>
-
-<p><strong>Difficulty</strong>: high.</p>
-
-<p><strong>Size</strong>: big.</p>
-
-
-
-<hr>
-
-<h2>In-browser code editing <a class="permalink" href="#in_browser_edit" name="in_browser_edit">§</a></h2>
-
-<p>Many online services for programmers (e.g., github) are starting to offer in-browsing editing of source files. It would be very cool to add these capabilities to CMS, allowing editing of submissions directly from the browser. Existing open source projects could be used, like <a href="http://ace.c9.io/">Ace</a> or <a href="http://codemirror.net/">CodeMirror</a>. There is a lot of potential for follow ups, like for example branching and auto-snapshotting.</p>
-
-<p><strong>Expected changes.</strong></p>
-
-<ol>
-  <li>Experimenting with the existing in-browser plugins to decide which one to use, using as metrics: browser compatibility, performances, user experience, offline capabilities (many contests don&rsquo;t allow Internet access).</li>
-  <li>Modifying CWS to include a new tab for each task to allow editing and submitting of solutions from scratch.</li>
-  <li>Adding a canvas to the new tab to display the existing submissions (with some basic info, like timestamp and score) to allow contestants to edit and submit previously submitted solutions (that will be displayed as branching out from the starting solution); allowing contestants to branch multiple times from a single submission.</li>
-  <li>Implementing auto-snapshotting after x minutes and/or y chars of delta; deciding how to store the snapshot (probably as a submission with a special flag); adding the new field to the submission DB object; writing the updater.</li>
-</ol>
-
-<p><strong>Additional requirements</strong>: JavaScript.</p>
-
-<p><strong>Difficulty</strong>: medium to high, depending on the follow ups.</p>
-
-<p><strong>Size</strong>: big.</p>
-
-
-
-
-
-<hr>
-
-<h2>Contest statistics and graphs <a class="permalink" href="#contest_stats" name="contest_stats">§</a></h2>
-
-<p>After an official contest is often nice to have some easily retrievable statistics about scores distributions, language usage, and so on.</p>
-
-<p><strong>Expected changes.</strong></p>
-
-<ol>
-  <li>Add a new page to AWS to contain graphs and downloadable data.</li>
-  <li>Think of the useful aggregated data.</li>
-  <li>Actually implement the graphs and let admins download CSV data. </li>
-</ol>
-
-<p><strong>Additional requirements</strong>: JavaScript.</p>
-
-<p><strong>Difficulty</strong>: low.</p>
-
-<p><strong>Size</strong>: small.</p>
-
-
-
-
-
-
-
-
-<hr>
-
-<h2>Exposing complexity guess <a class="permalink" href="#complexity_guess" name="complexity_guess">§</a></h2>
-
-<p>There is already an experimental code in cmscontrib that tries to compute the complexity of the contestants&rsquo; solutions based on the size of the input. A similar computation was suggested as a more sane way of scoring at some IOI conference, though it has many problems in reliability and is subject to cheating. Still, it would be interesting for admins to see this information, for example to have an idea of the cleverness of the solutions of two contestants.</p>
-
-<p><strong>Expected changes.</strong></p>
-
-<ol>
-  <li>Adding a new appropriate field to the submission DB object to store the complexity of the submission; writing the updater.</li>
-  <li>Writing a new service that &ldquo;subscribes&rdquo; to the event &ldquo;submission scored&rdquo; and computes the complexity of the submission.</li>
-  <li>Exposing the complexity in an appropriate UI in AWS.</li>
-</ol>
-
-<p><strong>Additional requirements</strong>: statistical regression.</p>
-
-<p><strong>Difficulty</strong>: low.</p>
-
-<p><strong>Size</strong>: medium.</p>
-
-
-
-
-
-
-<hr>
-
-<h2>Ease the usage of CMS in a training settings <a class="permalink" href="#ease_training" name="ease_training">§</a></h2>
-
-<p>At least, make sure that all interfaces are usable with a high number of contestants, tasks (and of contests for RWS). This may mean to have adaptive UIs after a certain threshold (for example, not showing a single page in RWS if you have 10k contestants.</p>
-
-<p><strong>Additional requirements</strong>: training camps experience.</p>
-
-<p><strong>Difficulty</strong>: medium to high, depending on how thorough is the investigation.</p>
-
-<p><strong>Size</strong>: big.</p>
-
-
-
-
-
-
-<hr>
-
-<h2>Team competitions <a class="permalink" href="#team_contests" name="team_contests">§</a></h2>
-
-<p>Many online contests are in the form of team competitions: multiple contestants cooperate to solve the same set of problems. The easiest way to implement this without changing a lot of code is to put the team information in the user table and add a new table for team participants (&ldquo;sub-users&quot;?). As extras, with in-browser code editing it would be nice to allow real-time cooperation, and also for admins it would be nice to be able to see who wrote a specific piece of code.</p>
-
-<p><strong>Expected changes.</strong></p>
-
-<ol>
-  <li>Adding the new table to the DB; writing the updater.</li>
-  <li>Modifying YamlImporter and similar to accept the new information.</li>
-  <li>Modifying CMS to understand sub-users and allow the login with the sub-user credential but contributing to the team submissions.</li>
-</ol>
-
-<p><strong>Additional requirements</strong>: none.</p>
-
-<p><strong>Difficulty</strong>: low.</p>
-
-<p><strong>Size</strong>: medium.</p>
-
-
-
-
-
-
-
-<hr>
-
-<h2>Visual solutions in RWS <a class="permalink" href="#rws_visualize" name="rws_visualize">§</a></h2>
-
-<p><strong>Note:</strong> this is currently in progress <a href="https://github.com/cms-dev/cms/pull/421">here</a>.</p>
-
-<p>Allow spectators to be more involved with the contest by giving them the possibility of looking at the internal functioning of the participants&rsquo; submission. During the evaluation process, CMS will record in the submission one or more opaque pieces of data, that will be passed to RWS; on his side, RWS will have a plugin able to translate back each piece of data into the solution given by the contestant&rsquo;s submission to a simple input, and to show this solution to the spectators. Bonus point for implementing this also for interactive tasks and showing the spectators an animation.</p>
-
-<p><strong>Expected changes.</strong></p>
-
-<ol>
-  <li>Adding new opaque fields to the submission DB class; adding a boolean to the inputs marking those whose solution will be exported; writing the updater.</li>
-  <li>Designing the system that will fill the opaque fields starting from the submission; decide to do that at the evaluation time, or to create a new job type; implementing the proposed solution.</li>
-  <li>Modifying SS and RWS to understand the new data being passed.</li>
-  <li>Implementing the plugin system for RWS, mimicking what CMS has for task types and score types.</li>
-  <li>Modifying RWS to let the plugins draw the UI of the solution.</li>
-  <li>Implementing some examples task to showcase the new feature.</li>
-</ol>
-
-<p><strong>Additional requirements</strong>: contest organization experience, JavaScript.</p>
-
-<p><strong>Difficulty</strong>: high.</p>
-
-<p><strong>Size</strong>: big.</p>
-
-
-
-
-
-<hr>
-
-<h2>Mobile-ready RWS (or an app?) <a class="permalink" href="#rws_mobile" name="rws_mobile">§</a></h2>
-
-<p>The RankingWebServer works awfully on mobile devices (mostly phones) due to their small screens and to the mouse-driven interaction model. It&rsquo;s advisable to redesign the client to handle these use-cases better, or to develop dedicated applications for mobile (Android, iOS, etc.). The latter ones should get the data from the same server that provides the current in-browser scoreboard (i.e. communicate over the existing HTTP API). Notifications could be interesting too.</p>
-
-<p><strong>Additional requirements</strong>: JavaScript, accessible web development; possibly app development.</p>
-
-<p><strong>Difficulty</strong>: high (there will be no guidance available from the core team for native app development).</p>
-
-<p><strong>Size</strong>: big.</p>
-
-
-
-
-
-
-
-<hr>
-
-<h2>Non-interactive scoreboard for public screening <a class="permalink" href="#rws_totem" name="rws_totem">§</a></h2>
-
-<p>Important competitions may have on-site large screens, projectors or &ldquo;totems&rdquo; to display the live scoreboard to the audience, so they don&rsquo;t have to use their laptops or phones (which wouldn&rsquo;t work anyway, see above). These use-cases have a totally different set of needs than an interactive online ranking. These are best addressed by writing a new and different scoreboard client. Again, the server should remain the same: we just need a new client.</p>
-
-<p><strong>Additional requirements</strong>: JavaScript.</p>
-
-<p><strong>Difficulty</strong>: medium.</p>
-
-<p><strong>Size</strong>: small.</p>
-
-
-
-
-
-      </div>
-    </div>
-
-    <script>
-(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
-ga('create', 'UA-89189426-1', 'auto');
-ga('send', 'pageview');
-    </script>
-  </body>
-</html>
diff --git a/docs/assets/.DS_Store b/docs/assets/.DS_Store
new file mode 100644
index 0000000..0e40d96
Binary files /dev/null and b/docs/assets/.DS_Store differ
diff --git a/images/cms_icon.png b/docs/assets/favicon.png
old mode 100755
new mode 100644
similarity index 100%
rename from images/cms_icon.png
rename to docs/assets/favicon.png
diff --git a/cms.svg b/docs/assets/logo.svg
similarity index 100%
rename from cms.svg
rename to docs/assets/logo.svg
diff --git a/docs/assets/totem-ioi2012.jpg b/docs/assets/totem-ioi2012.jpg
new file mode 100644
index 0000000..6bceebd
Binary files /dev/null and b/docs/assets/totem-ioi2012.jpg differ
diff --git a/docs/contact.md b/docs/contact.md
new file mode 100644
index 0000000..da66b38
--- /dev/null
+++ b/docs/contact.md
@@ -0,0 +1,17 @@
+You can contact us in chat on [Telegram](https://t.me/contestms), or write on
+the support mailing list <contestms-support@googlegroups.com>, where no
+registration is required (you can see [the archives on Google
+Groups](https://groups.google.com/g/contestms-support)).
+
+To help with the troubleshooting, you can upload on some online pastebin the
+relevant log files, that you can find in `/var/local/log/cms/`.
+
+If you encountered a bug, please file a [GitHub issue](https://github.com/cms-dev/cms/issues)
+following the instructions in the issue template.
+
+Please don't file issues to ask for help, we are happy to help on
+[Telegram](https://t.me/contestms) or on the
+[mailing list](mailto:contestms-support@googlegroups.com), and it is more likely
+somebody will answer your query sooner.
+
+For development queries, please use the [Telegram group](https://t.me/contestms).
diff --git a/docs/contribute.md b/docs/contribute.md
new file mode 100644
index 0000000..10cfb73
--- /dev/null
+++ b/docs/contribute.md
@@ -0,0 +1,253 @@
+## How to contribute
+
+If you are interested in implementing major features, please [contact the core
+team](./contact.md) before starting the design and implementation, so that the
+effort can be better organized and we can make sure there is no duplication of
+work.
+
+For every change, you should ensure that:
+
+<!-- TODO: update this, maybe use Flake8 instead of pep8 command? -->
+- no PEP8 errors are introduced (check with the pep8 command)
+- the Pylint score does not decrease too much (use pylint)
+- you add your copyright line in the header of all files you changed substantially;
+- if it is your first contribution, your name is in AUTHORS.txt.
+
+The process to send changes is as follows:
+
+- fork cms-dev/cms on github;
+- create a new branch and commit there your change(s);
+- create a pull request against the main branch of cms-dev/cms
+
+The following are some ideas for self-contained projects to expand CMS’s
+features. All of these require some knowledge of Python, SQLAlchemy and
+relational databases. Experience with the organization of programming contests
+and training camps is a plus.
+
+## :material-head-lightbulb: Contribution ideas
+
+If you are interested in developing one or more of these ideas, please
+[contact us](./contact.md), and we will arrange for a member of the core team to
+provide guidance.
+
+### Representative submissions
+
+Allow admins to store, for each task a set of representative submissions,
+intended to have a precise result (for example: a wrong submission which should
+score zero points, a correct one which should score full points, and an
+intermediate one which should score half of the points. Admins should be able to
+test at any moment that the representative submissions score exactly as
+expected.
+
+More precisely, there should be a way to associate to tasks a set of tuples
+(submission, (name), expected result); moreover, AWS should be extended to allow
+the recomputation of the scores associated to the representative submissions and
+to warn the admins when the score is different from the expected.
+
+#### Expected changes
+
+1. Adding the new fields for the representative submissions to the task DB
+   class, together with their metadata (name and expected results); writing the
+   updater.
+1. Adding hooks to the YamlImporter for easy testing.
+1. Adding AWS UI to show and edit the representative solutions and their
+   metadata (including the actual results), and to trigger a re-evaluation.
+1. Letting ES and SS know that there is a new “type” of submission and make sure
+   that the path taken by these submissions is correct and do not spill over the
+   paths taken by the contestants’ submissions.
+
+**Additional requirements:** none.
+
+**Difficulty:** medium.
+
+**Size:** medium.
+
+### Expand test coverage
+
+CMS currently has a functional test that runs all the services (apart from RWS)
+and simulating the creation of contests and tasks by the admins, and some
+submissions from the user. There are some unit tests but very limited. The task
+is to increase the coverage of the unit tests (possibly reorganizing code to
+make it more testable), extend the functional tests to other aspects (like
+importing of tasks) and to speed up the execution of functional tests.
+
+**Additional requirements:** testing experience (especially in Python).
+
+**Difficulty:** high.
+
+**Size:** big.
+
+### In-browser code editing
+
+Many online services for programmers (e.g., github) are starting to offer
+in-browsing editing of source files. It would be very cool to add these
+capabilities to CMS, allowing editing of submissions directly from the browser.
+Existing open source projects could be used, like
+[Monaco](https://microsoft.github.io/monaco-editor/). There is a lot of
+potential for follow ups, like for example branching and auto-snapshotting.
+
+#### Expected changes
+
+1. Experimenting with the existing in-browser plugins to decide which one to
+   use, using as metrics: browser compatibility, performances, user experience,
+   offline capabilities (many contests don’t allow Internet access).
+1. Modifying CWS to include a new tab for each task to allow editing and
+   submitting of solutions from scratch.
+1. Adding a canvas to the new tab to display the existing submissions (with some
+   basic info, like timestamp and score) to allow contestants to edit and submit
+   previously submitted solutions (that will be displayed as branching out from
+   the starting solution); allowing contestants to branch multiple times from a
+   single submission.
+1. Implementing auto-snapshotting after x minutes and/or y chars of delta;
+   deciding how to store the snapshot (probably as a submission with a special
+   flag); adding the new field to the submission DB object; writing the updater.
+
+**Additional requirements:** JavaScript.
+
+**Difficulty:** medium to high, depending on the follow ups.
+
+**Size:** big.
+
+### Contest statistics and graphs
+
+After an official contest is often nice to have some easily retrievable
+statistics about scores distributions, language usage, and so on.
+
+#### Expected changes
+
+1. Add a new page to AWS to contain graphs and downloadable data.
+1. Think of the useful aggregated data.
+1. Actually implement the graphs and let admins download CSV data.
+
+**Additional requirements:** JavaScript.
+
+**Difficulty:** low.
+
+**Size:** small.
+
+### Exposing complexity guess
+
+There is already an experimental code in cmscontrib that tries to compute the
+complexity of the contestants’ solutions based on the size of the input. A
+similar computation was suggested as a more sane way of scoring at some IOI
+conference, though it has many problems in reliability and is subject to
+cheating. Still, it would be interesting for admins to see this information, for
+example to have an idea of the cleverness of the solutions of two contestants.
+
+#### Expected changes
+
+1. Adding a new appropriate field to the submission DB object to store the
+   complexity of the submission; writing the updater.
+1. Writing a new service that “subscribes” to the event “submission scored” and
+   computes the complexity of the submission.
+1. Exposing the complexity in an appropriate UI in AWS.
+
+**Additional requirements:** statistical regression.
+
+**Difficulty:** low.
+
+**Size:** medium.
+
+### Ease the usage of CMS in a training settings
+
+At least, make sure that all interfaces are usable with a high number of
+contestants, tasks (and of contests for RWS). This may mean to have adaptive UIs
+after a certain threshold (for example, not showing a single page in RWS if you
+have 10k contestants).
+
+In the [related](./related.md) page there is a 
+
+**Additional requirements:** training camps experience.
+
+**Difficulty:** medium to high, depending on how thorough is the investigation.
+
+**Size:** big.
+
+### Team competitions
+
+Many online contests are in the form of team competitions: multiple contestants
+cooperate to solve the same set of problems. The easiest way to implement this
+without changing a lot of code is to put the team information in the user table
+and add a new table for team participants (“sub-users"?). As extras, with
+in-browser code editing it would be nice to allow real-time cooperation, and
+also for admins it would be nice to be able to see who wrote a specific piece of
+code.
+
+#### Expected changes
+
+1. Adding the new table to the DB; writing the updater.
+1. Modifying YamlImporter and similar to accept the new information.
+1. Modifying CMS to understand sub-users and allow the login with the sub-user
+   credential but contributing to the team submissions.
+
+**Additional requirements:** none.
+
+**Difficulty:** low.
+
+**Size:** medium.
+
+### Visual solutions in RWS
+
+(An old attempt at this can be found in
+<https://github.com/cms-dev/cms/pull/434>)
+
+Allow spectators to be more involved with the contest by giving them the
+possibility of looking at the internal functioning of the participants’
+submission. During the evaluation process, CMS will record in the submission one
+or more opaque pieces of data, that will be passed to RWS; on his side, RWS will
+have a plugin able to translate back each piece of data into the solution given
+by the contestant’s submission to a simple input, and to show this solution to
+the spectators. Bonus point for implementing this also for interactive tasks and
+showing the spectators an animation.
+
+#### Expected changes
+
+1. Adding new opaque fields to the submission DB class; adding a boolean to the
+   inputs marking those whose solution will be exported; writing the updater.
+1. Designing the system that will fill the opaque fields starting from the
+   submission; decide to do that at the evaluation time, or to create a new job
+   type; implementing the proposed solution.
+1. Modifying SS and RWS to understand the new data being passed.
+1. Implementing the plugin system for RWS, mimicking what CMS has for task types and score types.
+1. Modifying RWS to let the plugins draw the UI of the solution.
+1. Implementing some examples task to showcase the new feature.
+
+**Additional requirements:** contest organization experience, JavaScript.
+
+**Difficulty:** high.
+
+**Size:** big.
+
+### Mobile-ready RWS (or an app?)
+
+**NEW:** a mobile client is now available! **Ranky** [:simple-android:](https://play.google.com/store/apps/details?id=org.ioinformatics.ranky) [:simple-github:](https://github.com/wil93/ranky)
+
+The RankingWebServer works awfully on mobile devices (mostly phones) due to
+their small screens and to the mouse-driven interaction model. It’s advisable to
+redesign the client to handle these use-cases better, or to develop dedicated
+applications for mobile (Android, iOS, etc.). The latter ones should get the
+data from the same server that provides the current in-browser scoreboard (i.e.
+communicate over the existing HTTP API). Notifications could be interesting too.
+
+**Additional requirements:** JavaScript, accessible web development; possibly
+app development.
+
+**Difficulty:** high (there will be no guidance available from the core team for
+native app development).
+
+**Size:** big.
+
+### Non-interactive scoreboard for public screening
+
+Important competitions may have [on-site large screens, projectors or
+“totems”](./assets/totem-ioi2012.jpg) to display the live scoreboard to the
+audience (team leaders, guests) so they don’t have to use their laptops or
+phones. This use-case is most likely best addressed by adding some kind of
+"totem" or "demo" mode to the RankingWebServer frontend, which can be toggled
+on/off.
+
+**Additional requirements:** JavaScript.
+
+**Difficulty:** medium.
+
+**Size:** small.
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..a2474af
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,48 @@
+# Contest Management System
+
+![](assets/logo.svg){ width="400" align="right" .off-glb }
+
+CMS, or Contest Management System, is a distributed system for running and (to
+some extent) organizing a programming contest.
+
+CMS has been designed to be general and to handle many different types of
+contests, tasks, scorings, etc. Nonetheless, CMS has been explicitly build to be
+used in the 2012 International Olympiad in Informatics, held in September 2012
+in Italy.
+
+## Stable version: 1.5.1
+
+[:material-download: Download .tar.gz](https://github.com/cms-dev/cms/releases/download/v1.5.1/v1.5.1.tar.gz){ .md-button }
+[:simple-github: View on GitHub](https://github.com/cms-dev/cms/tree/v1.5){ .md-button }
+[:simple-readthedocs: Read the docs](https://cms.readthedocs.io/en/v1.5){ .md-button }
+
+## Development version
+
+[:simple-github: View on GitHub](https://github.com/cms-dev/cms){ .md-button }
+[:simple-readthedocs: Read the docs](https://cms.readthedocs.io/en/){ .md-button }
+
+---
+
+## Stay informed
+
+You can subscribe to
+[contestms-announce@googlegroups.com](https://groups.google.com/g/contestms-announce)
+to receive announcements of new releases and other important news.
+
+## Please, help us help you!
+
+Have you ever wanted to give us your opinion about CMS and let us hear your
+voice? Now it's the time!
+
+You can fill [this form](http://goo.gl/7PRmHW) to let us know about you and your
+general opinion on CMS, and [this other form](http://goo.gl/atFJtw) to let us
+know about specific contests you ran with CMS (you can fill this second form
+several times for different contests).
+
+## Support
+
+To learn how to install and use CMS, please read the documentation, available at
+<https://cms.readthedocs.io/>.
+
+If you have questions or need help troubleshooting some problem, [contact
+us](./contact.md).
diff --git a/docs/related.md b/docs/related.md
new file mode 100644
index 0000000..f87937f
--- /dev/null
+++ b/docs/related.md
@@ -0,0 +1,76 @@
+This page lists some resources that may be useful for CMS users. If you are
+aware of others, please [let us know](./contact.md).
+
+## Related projects
+
+We are aware of the following projects related to CMS. These projects are not
+developed nor maintained by us, hence we do not give guarantees or support for
+them.
+
+### Forks
+
+- A ["social fork" of CMS](https://github.com/olimpiadi-informatica/cmsocial),
+started by William Di Luigi and Luca Versari, adding some social features to CMS
+(for example, a forum), and used by the Italian Olympiads.
+
+- A [list of CMS forks](https://docs.google.com/spreadsheets/d/1gpagCkcQgCPHG6Cys9AzhVRKCKKJwBAznDJ959jKRXw/edit?gid=0)
+  used by the local Olympiads organizers of a number of countries, each with its
+  own peculiar set of features that might not yet be available in the official
+  CMS version.
+
+### Utilities
+
+- [Support scripts](https://github.com/CristianCantoro/cms-utils) used in the
+  University of Trento, in particular start-up scripts for Upstart and systemd,
+  by Cristian Consonni.
+
+### Tutorials
+
+- A [video tutorial](https://drive.google.com/drive/folders/0B-lFexqGexwdY2ZIbWZsazFnbEk?resourcekey=0-zexDrGKUNu2PWIc5osLSXA)
+  on how to install and run CMS, by Marco Romagnoli.
+
+---
+
+Other potentially useful patches for CMS can be found in the [pull requests
+list](https://github.com/cms-dev/cms/pulls) and among the [many GitHub forks of
+CMS](https://github.com/cms-dev/cms/network). Many of them are being considered
+for inclusion in the official CMS repository.
+
+## Reports on CMS
+
+CMS has used in many national and international contests. Some contest
+organizers wrote detailed reports on their experience with CMS, which may be
+useful for other contest hosts using or considering to use CMS. In particular,
+many of them discuss the problems to address in order to use CMS with several
+hundreds of users.
+
+- [Report of stage 1 of LMIO 2015 (Lithuanian Olympiad in
+  Informatics)](https://docs.google.com/document/d/1CM0zB-5HBroCMDr8NVREsmDn_GHL6Zr5X0L93FqwZX0/edit?pli=1)
+  written by Motiejus Jakštys in November 2014. There is also a [report on the
+  results of a testing
+  session](https://github.com/Motiejus/cms_docker/blob/master/doc/report.md)
+  (October 2014). The contest had 754 participants, 6222 submissions and was run
+  on the Amazon Web Services cloud.
+- [Report on APIO 2014 (Asia-Pacific International
+  Olympiad)](https://www.freelists.org/archives/contestms/05-2014/pdfbxiDPzfp0l.pdf),
+  written by Artem Iglikov in May 2014. The contest had around 600 participants,
+  around 7500 submissions and was run partially on local hardware and partially
+  on the Amazon Web Services cloud.
+- [Report on IOI 2013 (Brisbane,
+  Australia)](https://docs.google.com/document/d/1cwvWVOWRhsnDib9UqcmfZlfrHQ1Vq6rpx7YzRo48OV8/pub)
+  written by Bernard Blackham in July 2013. The contest had 303 participants and
+  was run on local hardware. The report also enters into the challenges posed by
+  the management and monitoring of the physical infrastructure.
+
+## Papers on CMS
+
+CMS has been described in the following papers by CMS core developers. They can
+be useful for who wants to catch a bird's eye overview of the inner CMS
+structure.
+
+- Stefano Maggiolo, Giovanni Mascellani, Luca Wehrstedt. _CMS: a growing grading
+  system._ Olympiads in Informatics **8** (2014), 123–131. [Full
+  text](http://www.mii.lt/olympiads_in_informatics/files/volume8.pdf#page=125).
+- Stefano Maggiolo, Giovanni Mascellani. _Introducing CMS: A Contest Management
+  System._ Olympiads in Informatics **6** (2012), 86–99. [Full
+  text](http://www.mii.lt/olympiads_in_informatics/pdf/INFOL107.pdf).
diff --git a/docs/screenshots.md b/docs/screenshots.md
new file mode 100644
index 0000000..7295758
--- /dev/null
+++ b/docs/screenshots.md
@@ -0,0 +1,29 @@
+## Contestant interface
+
+![](screenshots/cws1.png){ align=left width="250" data-title="The login page presented to the contestant. In the upper-right corner there is a language selector." }
+
+![](screenshots/cws2.png){ align=left width="250" data-title="The task view, where the statement can be downloaded. It's possible to set up attachments for a task (e.g. to show a sample implementation to the contestant)." }
+
+![](screenshots/cws3.png){ align=left width="250" data-title="The submission view, where files can be submitted. This specific task is a TwoStep kind of task (like IOI2011's parrots), so the contestant must send two files (or a single archive containing two files)." }
+
+<div style="clear:both"></div>
+
+## External scoreboard
+
+![](screenshots/rws1.png){ align=left width="250" data-title="The ranking page presented as seen by contest spectators. The clock shows that the contest has started about 2.5 hours ago. It's possible to show the remaining time by clicking on the clock." }
+
+![](screenshots/rws2.png){ align=left width="250" data-title="When you click on a row in the ranking page, a summary of the contestant's activity pops up." }
+
+<div style="clear:both"></div>
+
+## Admin interface
+
+![](screenshots/aws1.png){ align=left width="250" data-title="The admin page of a single contest. You can see that there's an evaluation enqueued, and that the 4 available workers are busy running different testcases." }
+
+![](screenshots/aws2.png){ align=left width="250" data-title="The 'Resource usage' page lets you monitor which services are up and lets you analyze how many resources they are consuming." }
+
+![](screenshots/aws3.png){ align=left width="250" data-title="This is the notification that the admins see when a contestant asks a question during a contest." }
+
+![](screenshots/aws4.png){ align=left width="250" data-title="As shown here, the admin can decide to write an extended answer or just use a precompiled one." }
+
+<div style="clear:both"></div>
diff --git a/screenshots/aws1.png b/docs/screenshots/aws1.png
similarity index 100%
rename from screenshots/aws1.png
rename to docs/screenshots/aws1.png
diff --git a/screenshots/aws2.png b/docs/screenshots/aws2.png
similarity index 100%
rename from screenshots/aws2.png
rename to docs/screenshots/aws2.png
diff --git a/screenshots/aws3.png b/docs/screenshots/aws3.png
similarity index 100%
rename from screenshots/aws3.png
rename to docs/screenshots/aws3.png
diff --git a/screenshots/aws4.png b/docs/screenshots/aws4.png
similarity index 100%
rename from screenshots/aws4.png
rename to docs/screenshots/aws4.png
diff --git a/screenshots/cws1.png b/docs/screenshots/cws1.png
similarity index 100%
rename from screenshots/cws1.png
rename to docs/screenshots/cws1.png
diff --git a/screenshots/cws2.png b/docs/screenshots/cws2.png
similarity index 100%
rename from screenshots/cws2.png
rename to docs/screenshots/cws2.png
diff --git a/screenshots/cws3.png b/docs/screenshots/cws3.png
similarity index 100%
rename from screenshots/cws3.png
rename to docs/screenshots/cws3.png
diff --git a/screenshots/rws1.png b/docs/screenshots/rws1.png
similarity index 100%
rename from screenshots/rws1.png
rename to docs/screenshots/rws1.png
diff --git a/screenshots/rws2.png b/docs/screenshots/rws2.png
similarity index 100%
rename from screenshots/rws2.png
rename to docs/screenshots/rws2.png
diff --git a/docs/testimonials.md b/docs/testimonials.md
new file mode 100644
index 0000000..04eafd0
--- /dev/null
+++ b/docs/testimonials.md
@@ -0,0 +1,86 @@
+CMS has been used in several official and unofficial contests. In particular we
+are aware of the following.
+
+## International competitions
+
+- [International Olympiad in Informatics (IOI)](http://ioinformatics.org/)
+
+    The IOI is an annual competitive programming competition and one of the
+    International Science Olympiads for secondary school students. The first
+    edition was held in 1989 in Pravetz, Bulgaria.
+    
+    Before IOI 1994, a human evaluator would sit behind the competitor's
+    computer and do the testing manually (enter test data through the keyboard,
+    check the output on the screen).
+
+    Starting in IOI 1994, an automatic grading process has been used, with test
+    input defined in files. We don't know much about the systems used in these
+    early IOI editions.
+    
+    CMS was explicitly designed to be used in IOI 2012 and has been used
+    every year since, including in IOI 2024, with the only exception of IOI 2016
+    where the local host (Russia) opted for a different system.
+
+- [French-Australian Regional Informatics Olympiad (FARIO)](https://orac.amt.edu.au/hub/fario/)
+
+    Since FARIO 2012.
+
+- [Baltic Olympiad in Informatics (BOI)](https://boi2024.lmio.lt/)
+
+    Since BOI 2014.
+
+- [Asia-Pacific Informatics Olympiad (APIO)](https://www.apio2024.org/)
+
+    Since APIO 2014.
+
+- [Central European Olympiad in Informatics (CEOI)](http://ceoi.inf.elte.hu/)
+
+    Since CEOI 2014.
+
+- [Romanian Master of Informatics (RMI)](https://rmi.lbi.ro/)
+
+    Since RMI 2014.
+
+## National competitions
+
+Many countries choose CMS to run their National programming contests. We are
+aware of at least the following ones:
+
+- Italy, since 2011.
+- Australia, since 2012.
+- Croatia, since 2013.
+- Slovenia, since 2013.
+- Norway, since 2013.
+- Korea, since 2013.
+- Taiwan, since 2013.
+- Chile, since 2013.
+- Belgium, since 2014.
+- Tunisia, since 2014.
+- Lithuania, since 2014.
+- Argentina, since 2014.
+- Malaysia, since 2014.
+- Mongolia, since 2014.
+- Estonia, since 2014.
+- South Africa, since 2015.
+- Ireland, since 2016.
+- Latvia, since 2017.
+- Thailand, since 2022.
+
+## Training camps
+
+CMS is used in training camps for the selections of the national IOI teams of at
+least the following countries: Australia, Egypt, Germany, India, Ireland,
+Israel, Italy, Japan, Latvia, Serbia, South Africa, South Korea and Taiwan.
+
+## Other
+
+- Laboratory exercises and exams of the course "Algorithms and data structures"
+  at University of Trento, Italy (year 2011-2012).
+
+---
+
+If you used CMS for a contest, selection, or a similar event, and want to
+publicize this information, we would be more than happy to hear from you and add
+it to this list.
+
+<!-- TODO: expand lists above based on results from http://goo.gl/atFJtw (and maybe also http://goo.gl/7PRmHW) -->
diff --git a/images/body-bg.png b/images/body-bg.png
deleted file mode 100644
index d0618fe..0000000
Binary files a/images/body-bg.png and /dev/null differ
diff --git a/images/cms_64.png b/images/cms_64.png
deleted file mode 100755
index 529a402..0000000
Binary files a/images/cms_64.png and /dev/null differ
diff --git a/images/hr.png b/images/hr.png
deleted file mode 100644
index 6c723a5..0000000
Binary files a/images/hr.png and /dev/null differ
diff --git a/images/octocat-icon.png b/images/octocat-icon.png
deleted file mode 100644
index f0ba137..0000000
Binary files a/images/octocat-icon.png and /dev/null differ
diff --git a/images/readthedocs-icon.png b/images/readthedocs-icon.png
deleted file mode 100644
index 11c8bab..0000000
Binary files a/images/readthedocs-icon.png and /dev/null differ
diff --git a/images/tar-gz-icon.png b/images/tar-gz-icon.png
deleted file mode 100644
index d50f34f..0000000
Binary files a/images/tar-gz-icon.png and /dev/null differ
diff --git a/index.html b/index.html
deleted file mode 100644
index 7aecc05..0000000
--- a/index.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset='utf-8'>
-    <meta http-equiv="X-UA-Compatible" content="chrome=1">
-    <meta name="favicon" content="./cms.svg">
-    <meta name="description" content="CMS, or Contest Management System, is an open source grading system handling IOI-like programming competition.">
-    <meta name="viewport" content="width=device-width, user-scalable=no">
-    <link rel="shortcut icon" href="./images/cms_icon.png" />
-    <link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen" />
-    <link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print" />
-    <!--[if lt IE 9]>
-    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <title>CMS :: Main</title>
-  </head>
-
-  <body>
-    <div id="container">
-      <div class="inner">
-
-        <header>
-          <img src="./cms.svg"/>
-          <h1>CMS :: Main</h1>
-          <h2>Contest Management System</h2>
-          <p>
-            <a href="https://github.com/cms-dev/cms/actions"><img src="https://github.com/cms-dev/cms/actions/workflows/main.yml/badge.svg" alt="Build Status"></a>
-            <a href="https://codecov.io/gh/cms-dev/cms" rel="nofollow"><img src="https://codecov.io/gh/cms-dev/cms/branch/master/graph/badge.svg" alt="Codecov Status"></a>
-            <a href="https://t.me/contestms" rel="nofollow"><img src="https://img.shields.io/endpoint?label=Support&style=flat-square&url=https%3A%2F%2Fmogyo.ro%2Fquart-apis%2Ftgmembercount%3Fchat_id%3Dcontestms" alt="Get Support on Telegram"></a>
-          </p>
-        </header>
-
-        <div class="button">
-          <a href="./index.html">Main</a>
-          <a href="./screenshots.html">Screenshots</a>
-          <a href="./testimonials.html">Testimonials</a>
-          <a href="./contribute.html">Contribute</a>
-          <a href="./related.html">Related</a>
-        </div>
-
-        <hr>
-
-<p>CMS, or Contest Management System, is a distributed system for
-running and (to some extent) organizing a programming contest.</p>
-
-<p>CMS has been designed to be general and to handle many different types
-of contests, tasks, scorings, etc. Nonetheless, CMS has been
-explicitly build to be used in the 2012 International Olympiad in
-Informatics, held in September 2012 in Italy.</p>
-
-<hr>
-
-        <section id="downloads" class="clearfix">
-          <h1>Stable version: 1.5.0</h1>
-          <a href="https://github.com/cms-dev/cms/releases/download/v1.5.0/v1.5.0.tar.gz" id="download-tar-gz" class="button"><span>Download .tar.gz</span></a>
-          <a href="https://github.com/cms-dev/cms/tree/v1.5" id="view-on-github" class="button"><span>View on GitHub</span></a>
-          <a href="https://cms.readthedocs.io/en/v1.5" id="read-docs" class="button"><span>Read the docs</span></a>
-        </section>
-
-        <hr>
-
-        <section id="downloads" class="clearfix">
-          <h1>Development version</h1>
-          <a href="https://github.com/cms-dev/cms" id="view-on-github" class="button"><span>View on GitHub</span></a>
-          <a href="https://cms.readthedocs.io/en/latest/" id="read-docs" class="button"><span>Read the docs</span></a>
-        </section>
-
-        <hr>
-
-<h1><a name="help-us-help-you" class="anchor" href="#help-us-help-you"><span class="octicon octicon-link"></span></a>Please, help us help you!</h1>
-
-<p>Have you ever wanted to give us your opinion about CMS and let us
-hear your voice? Now it's the time!</p>
-
-<p>You can fill <a href="http://goo.gl/7PRmHW">this form</a> to let us
-know about you and your general opinion on CMS,
-and <a href="http://goo.gl/atFJtw">this other form</a> to let us know
-about specific contests you ran with CMS (you can fill this second
-form several times for different contests).</p>
-
-<h1><a name="support" class="anchor" href="#support"><span class="octicon octicon-link"></span></a>Support</h1>
-
-
-<p>To learn how to install and use CMS, please read the documentation, available at <a href="https://cms.readthedocs.io/">https://cms.readthedocs.io/</a>.</p>
-
-<p>If you have questions or need help troubleshooting some problem, contact us in chat on <a href="https://t.me/contestms">Telegram</a>, or write on the support mailing list <a href="mailto:contestms-support@googlegroups.com">contestms-support@googlegroups.com</a>, where no registration is required (you can see the archives on <a href="https://groups.google.com/g/contestms-support">Google Groups</a>).</p>
-
-<p>To help with the troubleshooting, you can upload on some online pastebin the relevant log files, that you can find in /var/local/log/cms/.</p>
-
-<p>If you encountered a bug, please file an <a href="https://github.com/cms-dev/cms/issues">issue</a> on GitHub following the instructions in the issue template.</p>
-
-<p>Please don't file issues to ask for help, we are happy to help on the mailing list or on gitter, and it is more likely somebody will answer your query sooner.</p>
-
-<p>You can subscribe to <a href="contestms-announce@googlegroups.com">contestms-announce@googlegroups.com</a> to receive announcements of new releases and other important news. Register on <a href="https://groups.google.com/g/contestms-announce">Google Groups</a>.</p>
-
-<p>For development queries, please use the Telegram group.</p>
-
-      </div>
-    </div>
-
-    <script>
-(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
-ga('create', 'UA-89189426-1', 'auto');
-ga('send', 'pageview');
-    </script>
-  </body>
-</html>
diff --git a/mkdocs.yml b/mkdocs.yml
new file mode 100644
index 0000000..4fd86a3
--- /dev/null
+++ b/mkdocs.yml
@@ -0,0 +1,34 @@
+site_name: CMS
+site_url: https://cms-dev.github.io/
+
+repo_name: cms-dev/cms
+repo_url: https://github.com/cms-dev/cms
+
+theme:
+  name: material
+  logo: assets/logo.svg
+  favicon: assets/favicon.png
+
+markdown_extensions:
+  - attr_list
+  - footnotes
+  - pymdownx.emoji:
+      emoji_index: !!python/name:material.extensions.emoji.twemoji
+      emoji_generator: !!python/name:material.extensions.emoji.to_svg
+
+plugins:
+  - glightbox
+  - redirects:
+      redirect_maps:
+        'screenshots.html': 'screenshots.md'
+        'testimonials.html': 'testimonials.md'
+        'contribute.html': 'contribute.md'
+        'related.html': 'related.md'
+
+nav:
+  - index.md
+  - screenshots.md
+  - testimonials.md
+  - contribute.md
+  - related.md
+  - contact.md
diff --git a/related.html b/related.html
deleted file mode 100644
index 7894479..0000000
--- a/related.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset='utf-8'>
-    <meta http-equiv="X-UA-Compatible" content="chrome=1">
-    <meta name="favicon" content="./cms.svg">
-    <meta name="description" content="CMS, or Contest Management System, is an open source grading system handling IOI-like programming competition.">
-    <meta name="viewport" content="width=device-width, user-scalable=no">
-    <link rel="shortcut icon" href="./images/cms_icon.png" />
-    <link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen" />
-    <link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print" />
-    <!--[if lt IE 9]>
-    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <title>CMS :: Related</title>
-    <style>
-.contest_title {
-    font-weight: bold;
-    display: block;
-}
-.contest_place {
-    font-style: italic;
-}
-.contest_place:not(:last-child)::after {
-    content: ', ';
-}
-    </style>
-  </head>
-
-  <body>
-    <div id="container">
-      <div class="inner">
-
-        <header>
-          <img src="./cms.svg"/>
-          <h1>CMS :: Related</h1>
-          <h2>Contest Management System</h2>
-          <p>
-            <a href="https://github.com/cms-dev/cms/actions"><img src="https://github.com/cms-dev/cms/actions/workflows/main.yml/badge.svg" alt="Build Status"></a>
-            <a href="https://codecov.io/gh/cms-dev/cms" rel="nofollow"><img src="https://codecov.io/gh/cms-dev/cms/branch/master/graph/badge.svg" alt="Codecov Status"></a>
-            <a href="https://t.me/contestms" rel="nofollow"><img src="https://img.shields.io/endpoint?label=Support&style=flat-square&url=https%3A%2F%2Fmogyo.ro%2Fquart-apis%2Ftgmembercount%3Fchat_id%3Dcontestms" alt="Get Support on Telegram"></a>
-          </p>
-        </header>
-
-        <div class="button">
-          <a href="./index.html">Main</a>
-          <a href="./screenshots.html">Screenshots</a>
-          <a href="./testimonials.html">Testimonials</a>
-          <a href="./contribute.html">Contribute</a>
-          <a href="./related.html">Related</a>
-        </div>
-
-        <hr>
-
-<p>This page lists some resources that may be useful for CMS users. If
-you are aware of others, please let us know (see contact information
-on the <a href="index.html">main page</a>).</p>
-
-<h3>Related projects</h3>
-
-<p>We are aware of the following projects related to CMS. These
-projects are not developed nor maintained by us, hence we do not give
-guarantees or support for them.</p>
-
-<strong>Forks</strong>
-<ul>
-  <li>
-    A <a href="https://github.com/olimpiadi-informatica/cmsocial">"social" fork
-    of CMS </a>, started by William Di Luigi and Luca Versari, adding some
-    social features to CMS (for example, a forum), and used by the Italian
-    Olympiads.
-  </li>
-  <li>
-    A <a
-    href="https://docs.google.com/spreadsheets/d/1gpagCkcQgCPHG6Cys9AzhVRKCKKJwBAznDJ959jKRXw/edit?gid=0">list
-    of CMS forks</a> used by the local Olympiads organizers of a number of
-    countries, each with its own peculiar set of features that might not yet be
-    available in the official CMS version.
-  </li>
-</ul>
-
-<strong>Utilities</strong>
-<ul>
-  <li>
-    <a href="https://github.com/CristianCantoro/cms-utils">Support
-    scripts</a> used in the University of Trento, in particular
-    start-up scripts for Upstart and systemd, by Cristian Consonni.
-  </li>
-</ul>
-
-<strong>Tutorial</strong>
-<ul>
-  <li>
-    A <a href="https://drive.google.com/drive/folders/0B-lFexqGexwdY2ZIbWZsazFnbEk?resourcekey=0-zexDrGKUNu2PWIc5osLSXA">video
-    tutorial</a> on how to install and run CMS, by Marco Romagnoli.
-  </li>
-</ul>
-
-<p>Others potentially useful patches for CMS can be found in
-the <a href="https://github.com/cms-dev/cms/pulls">pull requests
-list</a> and among
-the <a href="https://github.com/cms-dev/cms/network">many GitHub forks
-of CMS</a>. Many of them are being considered for inclusion in the
-official CMS repository.</p>
-
-<h3>Reports on CMS</h3>
-
-<p>CMS has used in many national and international contests. Some
-contest organizers wrote detailed reports on their experience with
-CMS, which may be useful for other contest hosts using or considering
-to use CMS. In particular, many of them discuss the problems to
-address in order to use CMS with several hundreds of users.</p>
-
-<ul>
-  <li>
-    <a href="https://docs.google.com/document/d/1CM0zB-5HBroCMDr8NVREsmDn_GHL6Zr5X0L93FqwZX0/edit?pli=1">Report
-    of stage 1 of LMIO 2015 (Lithuanian Olympiad in Informatics)</a>
-    written by Motiejus Jakštys in November 2014. There is also a
-    <a href="https://github.com/Motiejus/cms_docker/blob/master/doc/report.md">report
-    on the results of a testing session</a> (October 2014). The
-    contest had 754 participants, 6222 submissions and was run on the
-    Amazon Web Services cloud.
-  </li>
-  <li>
-    <a href="https://www.freelists.org/archives/contestms/05-2014/pdfbxiDPzfp0l.pdf">Report
-    on APIO 2014 (Asia-Pacific International Olympiad)</a>, written by
-    Artem Iglikov in May 2014. The contest had around 600
-    participants, around 7500 submissions and was run partially on
-    local hardware and partially on the Amazon Web Services cloud.
-  </li>
-  <li>
-    <a href="https://docs.google.com/document/d/1cwvWVOWRhsnDib9UqcmfZlfrHQ1Vq6rpx7YzRo48OV8/pub">Report
-    on IOI 2013 (Brisbane, Australia)</a> written by Bernard Blackham
-    in July 2013. The contest had 303 participants and was run on
-    local hardware. The report also enters into the challenges posed
-    by the management and monitoring of the physical infrastructure.
-  </li>
-</ul>
-
-<h3>Papers on CMS</h3>
-
-<p>CMS has been described in the following papers by CMS core
-developers. They can be useful for who wants to catch a bird's eye
-  overview of the inner CMS structure.</p>
-
-<ul>
-  <li>
-    Stefano Maggiolo, Giovanni Mascellani, Luca Wehrstedt. <em>CMS: a
-    growing grading system</em>. Olympiads in
-    Informatics <strong>8</strong> (2014),
-    123–131. <a href="http://www.mii.lt/olympiads_in_informatics/files/volume8.pdf#page=125">Full
-    text</a>.
-  </li>
-  <li>
-    Stefano Maggiolo, Giovanni Mascellani. <em>Introducing CMS: A
-    Contest Management System</em>. Olympiads in
-    Informatics <strong>6</strong> (2012),
-    86–99. <a href="http://www.mii.lt/olympiads_in_informatics/pdf/INFOL107.pdf">Full
-    text</a>.
-  </li>
-</ul>
-
-    <script>
-(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
-ga('create', 'UA-89189426-1', 'auto');
-ga('send', 'pageview');
-    </script>
-  </body>
-</html>
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..18d2b2e
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,3 @@
+mkdocs-material
+mkdocs-glightbox
+mkdocs-redirects
diff --git a/screenshots.html b/screenshots.html
deleted file mode 100644
index 3bbf051..0000000
--- a/screenshots.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset='utf-8'>
-    <meta http-equiv="X-UA-Compatible" content="chrome=1">
-    <meta name="favicon" content="./cms.svg">
-    <meta name="description" content="CMS, or Contest Management System, is an open source grading system handling IOI-like programming competition.">
-    <meta name="viewport" content="width=device-width, user-scalable=no">
-    <link rel="shortcut icon" href="./images/cms_icon.png" />
-    <link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen" />
-    <link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print" />
-    <!--[if lt IE 9]>
-    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-
-    <!-- jQuery -->
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
-
-    <!-- Magnific Popup -->
-    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.0.0/magnific-popup.min.css">
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.0.0/jquery.magnific-popup.min.js"></script>
-
-    <title>CMS :: Main</title>
-  </head>
-
-  <body>
-    <div id="container">
-      <div class="inner">
-
-        <header>
-          <img src="./cms.svg"/>
-          <h1>CMS :: Main</h1>
-          <h2>Contest Management System</h2>
-          <p>
-            <a href="https://github.com/cms-dev/cms/actions"><img src="https://github.com/cms-dev/cms/actions/workflows/main.yml/badge.svg" alt="Build Status"></a>
-            <a href="https://codecov.io/gh/cms-dev/cms" rel="nofollow"><img src="https://codecov.io/gh/cms-dev/cms/branch/master/graph/badge.svg" alt="Codecov Status"></a>
-            <a href="https://t.me/contestms" rel="nofollow"><img src="https://img.shields.io/endpoint?label=Support&style=flat-square&url=https%3A%2F%2Fmogyo.ro%2Fquart-apis%2Ftgmembercount%3Fchat_id%3Dcontestms" alt="Get Support on Telegram"></a>
-          </p>
-        </header>
-
-        <div class="button">
-          <a href="./index.html">Main</a>
-          <a href="./screenshots.html">Screenshots</a>
-          <a href="./testimonials.html">Testimonials</a>
-          <a href="./contribute.html">Contribute</a>
-          <a href="./related.html">Related</a>
-        </div>
-
-        <hr>
-
-        <div class="popup-gallery">
-          <h3>Contestant interface</h3>
-          <a href="screenshots/cws1.png" title="The login page presented to the contestant. In the upper-right corner there is a language selector."><img src="screenshots/cws1.small.png" width="200" data-pin-nopin="true"></a>
-          <a href="screenshots/cws2.png" title="The task view, where the statement can be downloaded. It's possible to set up attachments for a task (e.g. to show a sample implementation to the contestant)."><img src="screenshots/cws2.small.png" width="200" data-pin-nopin="true"></a>
-          <a href="screenshots/cws3.png" title="The submission view, where files can be submitted. This specific task is a TwoStep kind of task (like IOI2011's parrots), so the contestant must send two files (or a single archive containing two files)."><img src="screenshots/cws2.small.png" width="200" data-pin-nopin="true"></a>
-
-          <hr>
-
-          <h3>External scoreboard</h3>
-          <a href="screenshots/rws1.png" title="The ranking page presented as seen by contest spectators. The clock shows that the contest has started about 2.5 hours ago. It's possible to show the remaining time by clicking on the clock."><img src="screenshots/rws1.small.png" width="200" data-pin-nopin="true"></a>
-          <a href="screenshots/rws2.png" title="When you click on a row in the ranking page, a summary of the contestant's activity pops up."><img src="screenshots/rws2.small.png" width="200" data-pin-nopin="true"></a>
-
-          <hr>
-
-          <h3>Admin interface</h3>
-          <a href="screenshots/aws1.png" title="The admin page of a single contest. You can see that there's an evaluation enqueued, and that the 4 available workers are busy running different testcases."><img src="screenshots/aws1.small.png" width="200" data-pin-nopin="true"></a>
-          <a href="screenshots/aws2.png" title="The 'Resource usage' page lets you monitor which services are up and lets you analyze how many resources they are consuming."><img src="screenshots/aws2.small.png" width="200" data-pin-nopin="true"></a>
-          <a href="screenshots/aws3.png" title="This is the notification that the admins see when a contestant asks a question during a contest."><img src="screenshots/aws3.small.png" width="200" data-pin-nopin="true"></a>
-          <a href="screenshots/aws4.png" title="As shown here, the admin can decide to write an extended answer or just use a precompiled one."><img src="screenshots/aws4.small.png" width="200" data-pin-nopin="true"></a>
-        </div>
-
-      </div>
-    </div>
-
-    <script>
-    $(document).ready(function() {
-      $('.popup-gallery').magnificPopup({
-        delegate: 'a',
-        type: 'image',
-        tLoading: 'Loading image #%curr%...',
-        mainClass: 'mfp-img-mobile',
-        gallery: {
-          enabled: true,
-          navigateByImgClick: true,
-          preload: [0,1] // Will preload 0 - before current, and 1 after the current image
-        },
-        image: {
-          tError: '<a href="%url%">The image #%curr%</a> could not be loaded.',
-          titleSrc: function(item) {
-            return item.el.attr('title');
-          }
-        }
-      });
-    });
-    </script>
-
-    <script>
-(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
-ga('create', 'UA-89189426-1', 'auto');
-ga('send', 'pageview');
-    </script>
-  </body>
-</html>
diff --git a/screenshots/aws1.small.png b/screenshots/aws1.small.png
deleted file mode 100644
index 9888eea..0000000
Binary files a/screenshots/aws1.small.png and /dev/null differ
diff --git a/screenshots/aws2.small.png b/screenshots/aws2.small.png
deleted file mode 100644
index f3f7bbb..0000000
Binary files a/screenshots/aws2.small.png and /dev/null differ
diff --git a/screenshots/aws3.small.png b/screenshots/aws3.small.png
deleted file mode 100644
index dd3b4e2..0000000
Binary files a/screenshots/aws3.small.png and /dev/null differ
diff --git a/screenshots/aws4.small.png b/screenshots/aws4.small.png
deleted file mode 100644
index 02e3ad9..0000000
Binary files a/screenshots/aws4.small.png and /dev/null differ
diff --git a/screenshots/cws1.small.png b/screenshots/cws1.small.png
deleted file mode 100644
index fe7497d..0000000
Binary files a/screenshots/cws1.small.png and /dev/null differ
diff --git a/screenshots/cws2.small.png b/screenshots/cws2.small.png
deleted file mode 100644
index a155626..0000000
Binary files a/screenshots/cws2.small.png and /dev/null differ
diff --git a/screenshots/cws3.small.png b/screenshots/cws3.small.png
deleted file mode 100644
index 242d135..0000000
Binary files a/screenshots/cws3.small.png and /dev/null differ
diff --git a/screenshots/rws1.small.png b/screenshots/rws1.small.png
deleted file mode 100644
index c315ca0..0000000
Binary files a/screenshots/rws1.small.png and /dev/null differ
diff --git a/screenshots/rws2.small.png b/screenshots/rws2.small.png
deleted file mode 100644
index cfc20ad..0000000
Binary files a/screenshots/rws2.small.png and /dev/null differ
diff --git a/stylesheets/print.css b/stylesheets/print.css
deleted file mode 100644
index 2a0f674..0000000
--- a/stylesheets/print.css
+++ /dev/null
@@ -1,223 +0,0 @@
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, img, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-b, u, i, center,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td,
-article, aside, canvas, details, embed,
-figure, figcaption, footer, header, hgroup,
-menu, nav, output, ruby, section, summary,
-time, mark, audio, video {
-  margin: 0;
-  padding: 0;
-  border: 0;
-  font-size: 100%;
-  font: inherit;
-  vertical-align: baseline;
-}
-/* HTML5 display-role reset for older browsers */
-article, aside, details, figcaption, figure,
-footer, header, hgroup, menu, nav, section {
-  display: block;
-}
-body {
-  line-height: 1;
-}
-ol, ul {
-  list-style: none;
-}
-blockquote, q {
-  quotes: none;
-}
-blockquote:before, blockquote:after,
-q:before, q:after {
-  content: '';
-  content: none;
-}
-table {
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-body {
-  font-size: 13px;
-  line-height: 1.5;
-  font-family: 'Helvetica Neue', Helvetica, Arial, serif;
-  color: #000;
-}
-
-a {
-  color: #d5000d;
-  font-weight: bold;
-}
-
-header {
-  margin-top: 15px;
-}
-
-header h1 {
-  font-weight: bold;
-  letter-spacing: -1px;
-  font-size: 48px;
-  color: #303030;
-  line-height: 1.2;
-}
-
-header h2 {
-  letter-spacing: -1px;
-  font-size: 24px;
-  color: #aaa;
-  font-weight: normal;
-  line-height: 1.3;
-}
-#downloads {
-  display: none;
-}
-#main_content {
-  padding-top: 20px;
-}
-
-code, pre {
-  font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Monospace;
-  color: #222;
-  margin-bottom: 30px;
-  font-size: 12px;
-}
-
-code {
-  padding: 0 3px;
-}
-
-pre {
-  border: solid 1px #ddd;
-  padding: 20px;
-  overflow: auto;
-}
-pre code {
-  padding: 0;
-}
-
-ul, ol, dl {
-  margin-bottom: 20px;
-}
-
-
-/* COMMON STYLES */
-
-table {
-  width: 100%;
-  border: 1px solid #ebebeb;
-}
-
-th {
-  font-weight: 500;
-}
-
-td {
-  border: 1px solid #ebebeb;
-  text-align: center;
-}
-
-form {
-  background: #f2f2f2;
-  padding: 20px;
-
-}
-
-
-/* GENERAL ELEMENT TYPE STYLES */
-
-h1 {
-  font-size: 2.8em;
-}
-
-h2 {
-  font-size: 22px;
-  font-weight: bold;
-  color: #303030;
-  margin-bottom: 8px;
-}
-
-h3 {
-  color: #d5000d;
-  font-size: 18px;
-  font-weight: bold;
-  margin-bottom: 8px;
-}
-
-h4 {
-  font-size: 16px;
-  color: #303030;
-  font-weight: bold;
-}
-
-h5 {
-  font-size: 1em;
-  color: #303030;
-}
-
-h6 {
-  font-size: .8em;
-  color: #303030;
-}
-
-p {
-  margin-bottom: 20px;
-}
-
-a {
-  text-decoration: none;
-}
-
-p a {
-  font-weight: 400;
-}
-
-blockquote {
-  font-size: 1.6em;
-  border-left: 10px solid #e9e9e9;
-  margin-bottom: 20px;
-  padding: 0 0 0 30px;
-}
-
-ul li {
-  list-style: disc inside;
-  padding-left: 20px;
-}
-
-ol li {
-  list-style: decimal inside;
-  padding-left: 3px;
-}
-
-dl dd {
-  font-style: italic;
-  font-weight: 100;
-}
-
-footer {
-  margin-top: 40px;
-  padding-top: 20px;
-  padding-bottom: 30px;
-  font-size: 13px;
-  color: #aaa;
-}
-
-footer a {
-  color: #666;
-}
-
-/* MISC */
-.clearfix:after {
-  clear: both;
-  content: '.';
-  display: block;
-  visibility: hidden;
-  height: 0;
-}
-
-.clearfix {display: inline-block;}
-* html .clearfix {height: 1%;}
-.clearfix {display: block;}
\ No newline at end of file
diff --git a/stylesheets/stylesheet.css b/stylesheets/stylesheet.css
deleted file mode 100644
index 781e7ac..0000000
--- a/stylesheets/stylesheet.css
+++ /dev/null
@@ -1,413 +0,0 @@
-/* http://meyerweb.com/eric/tools/css/reset/
-   v2.0 | 20110126
-   License: none (public domain)
-*/
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, img, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-b, u, i, center,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td,
-article, aside, canvas, details, embed,
-figure, figcaption, footer, header, hgroup,
-menu, nav, output, ruby, section, summary,
-time, mark, audio, video {
-	margin: 0;
-	padding: 0;
-	border: 0;
-	font-size: 100%;
-	font: inherit;
-	vertical-align: baseline;
-}
-/* HTML5 display-role reset for older browsers */
-article, aside, details, figcaption, figure,
-footer, header, hgroup, menu, nav, section {
-	display: block;
-}
-body {
-	line-height: 1;
-}
-ol, ul {
-	list-style: none;
-}
-blockquote, q {
-	quotes: none;
-}
-blockquote:before, blockquote:after,
-q:before, q:after {
-	content: '';
-	content: none;
-}
-table {
-	border-collapse: collapse;
-	border-spacing: 0;
-}
-
-/* LAYOUT STYLES */
-html {
-  overflow-y: scroll;
-}
-
-body {
-  font-size: 1em;
-  line-height: 1.5;
-  background: #e7e7e7 url(../images/body-bg.png) 0 0 repeat;
-  font-family: 'Helvetica Neue', Helvetica, Arial, serif;
-  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
-  color: #1d1d1d;
-}
-
-a {
-  color: #d5000d;
-}
-a:hover {
-  color: #c5000c;
-}
-
-header {
-  margin-top: 15px;
-}
-
-header h1 {
-  font-family: 'Chivo', 'Helvetica Neue', Helvetica, Arial, serif; font-weight: 900;
-  letter-spacing: -1px;
-  font-size: 48px;
-  color: #303030;
-  line-height: 1.2;
-}
-
-header h2 {
-  letter-spacing: -1px;
-  font-size: 24px;
-  color: #aaa;
-  font-weight: normal;
-  line-height: 1.3;
-}
-
-#container {
-  min-height: 595px;
-}
-
-.inner {
-  width: 620px;
-  margin: 0 auto;
-}
-
-#container .inner img {
-  max-width: 100%;
-}
-
-#downloads {
-  margin-bottom: 40px;
-}
-
-a.button,
-div.button {
-  -moz-border-radius: 30px;
-  -webkit-border-radius: 30px;
-  border-radius: 30px;
-  border-top: solid 1px #cbcbcb;
-  border-left: solid 1px #b7b7b7;
-  border-right: solid 1px #b7b7b7;
-  border-bottom: solid 1px #b3b3b3;
-  color: #303030;
-  line-height: 25px;
-  font-weight: bold;
-  font-size: 15px;
-  display: inline-block;
-  margin-right: 14px;
-  background: #fdfdfd; /* Old browsers */
-  background: -moz-linear-gradient(top,  #fdfdfd 0%, #f2f2f2 100%); /* FF3.6+ */
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f2f2f2)); /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top,  #fdfdfd 0%,#f2f2f2 100%); /* Chrome10+,Safari5.1+ */
-  background: -o-linear-gradient(top,  #fdfdfd 0%,#f2f2f2 100%); /* Opera 11.10+ */
-  background: -ms-linear-gradient(top,  #fdfdfd 0%,#f2f2f2 100%); /* IE10+ */
-  background: linear-gradient(top,  #fdfdfd 0%,#f2f2f2 100%); /* W3C */
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f2f2f2',GradientType=0 ); /* IE6-9 */
-  -webkit-box-shadow: 10px 10px 5px #888;
-  -moz-box-shadow: 10px 10px 5px #888;
-  box-shadow: 0px 1px 5px #e8e8e8;
-}
-
-a.button {
-  padding: 12px 8px 12px 8px;
-  float: left;
-  width: 179px;
-  margin-top: 5px;
-  margin-bottom: 5px;
-}
-
-a.button:hover,
-div.button:hover {
-  border-top: solid 1px #b7b7b7;
-  border-left: solid 1px #b3b3b3;
-  border-right: solid 1px #b3b3b3;
-  border-bottom: solid 1px #b3b3b3;
-  background: #fafafa; /* Old browsers */
-  background: -moz-linear-gradient(top,  #fdfdfd 0%, #f6f6f6 100%); /* FF3.6+ */
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#fdfdfd), color-stop(100%,#f6f6f6)); /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top,  #fdfdfd 0%,#f6f6f6 100%); /* Chrome10+,Safari5.1+ */
-  background: -o-linear-gradient(top,  #fdfdfd 0%,#f6f6f6 100%); /* Opera 11.10+ */
-  background: -ms-linear-gradient(top,  #fdfdfd 0%,#f6f6f6 100%); /* IE10+ */
-  background: linear-gradient(top,  #fdfdfd 0%,#f6f6f6, 100%); /* W3C */
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdfdfd', endColorstr='#f6f6f6',GradientType=0 ); /* IE6-9 */
-}
-
-
-a.button span {
-  padding-left: 50px;
-  display: block;
-  height: 23px;
-}
-
-div.button a {
-  display: inline-block;
-  height: 23px;
-  border-left: 1px solid #b7b7b7;
-  padding: 10px 10px 12px 10px;
-}
-
-div.button a:first-child {
-  border-left: 0;
-  padding-left: 20px;
-}
-
-div.button a:last-child {
-  padding-right: 20px;
-}
-
-#download-zip span {
-  background: transparent url(../images/zip-icon.png) 12px 50% no-repeat;
-}
-#download-tar-gz span {
-  background: transparent url(../images/tar-gz-icon.png) 12px 50% no-repeat;
-}
-#view-on-github span {
-  background: transparent url(../images/octocat-icon.png) 12px 50% no-repeat;
-}
-#read-docs span {
-  background: transparent url(../images/readthedocs-icon.png) 12px 50% no-repeat;
-}
-#read-docs {
-  margin-right: 0;
-}
-
-code, pre {
-  font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Monospace;
-  color: #222;
-  margin-bottom: 30px;
-  font-size: 14px;
-}
-
-code {
-  padding: 0 3px;
-}
-
-pre {
-  padding: 20px;
-  background: #303030;
-  color: #f2f2f2;
-  text-shadow: none;
-  overflow: auto;
-}
-pre code {
-  color: #f2f2f2;
-  background-color: #303030;
-  border: none;
-  padding: 0;
-}
-
-ul, ol, dl {
-  margin-bottom: 20px;
-}
-
-
-/* COMMON STYLES */
-
-hr {
-  height: 1px;
-  line-height: 1px;
-  margin-top: 1em;
-  padding-bottom: 1em;
-  border: none;
-  background: transparent url('../images/hr.png') 50% 0 no-repeat;
-}
-
-strong {
-  font-weight: bold;
-}
-
-em {
-  font-style: italic;
-}
-
-table {
-  width: 100%;
-  border: 1px solid #ebebeb;
-}
-
-th {
-  font-weight: 500;
-}
-
-td {
-  border: 1px solid #ebebeb;
-  text-align: center;
-}
-
-form {
-  background: #f2f2f2;
-  padding: 20px;
-}
-
-
-/* GENERAL ELEMENT TYPE STYLES */
-
-h1 {
-  font-size: 32px;
-}
-
-h2 {
-  font-size: 22px;
-  font-weight: bold;
-  color: #303030;
-  margin-bottom: 8px;
-}
-
-h3 {
-  color: #d5000d;
-  font-size: 18px;
-  font-weight: bold;
-  margin-bottom: 8px;
-}
-
-h4 {
-  font-size: 16px;
-  color: #303030;
-  font-weight: bold;
-}
-
-h5 {
-  font-size: 1em;
-  color: #303030;
-}
-
-h6 {
-  font-size: .8em;
-  color: #303030;
-}
-
-h1 a.permalink, h2 a.permalink, h3 a.permalink,
-h4 a.permalink, h5 a.permalink, h6 a.permalink {
-  display: none;
-  color: #6F6F6F;
-}
-
-h1:hover a.permalink, h2:hover a.permalink, h3:hover a.permalink,
-h4:hover a.permalink, h5:hover a.permalink, h6:hover a.permalink {
-  display: inline-block;
-}
-
-p {
-  margin-bottom: 20px;
-}
-
-a {
-  text-decoration: none;
-}
-
-p a {
-  font-weight: 400;
-}
-
-blockquote {
-  font-size: 1.6em;
-  border-left: 10px solid #e9e9e9;
-  margin-bottom: 20px;
-  padding: 0 0 0 30px;
-}
-
-ul li {
-  list-style: disc inside;
-  padding-left: 20px;
-  padding-bottom: 3px;
-  text-indent: -18px;
-  margin-left: 18px;
-}
-
-ol li {
-  list-style: decimal inside;
-  padding-left: 3px;
-  padding-bottom: 3px;
-  text-indent: -18px;
-  margin-left: 18px;
-}
-
-dl dt {
-  color: #303030;
-}
-
-footer {
-  background: transparent url('../images/hr.png') 0 0 no-repeat;
-  margin-top: 40px;
-  padding-top: 20px;
-  padding-bottom: 30px;
-  font-size: 13px;
-  color: #aaa;
-}
-
-footer a {
-  color: #666;
-}
-footer a:hover {
-  color: #444;
-}
-
-/* MISC */
-.clearfix:after {
-  clear: both;
-  content: '.';
-  display: block;
-  visibility: hidden;
-  height: 0;
-}
-
-.clearfix {display: inline-block;}
-* html .clearfix {height: 1%;}
-.clearfix {display: block;}
-
-/* #Media Queries
-================================================== */
-
-/* Smaller than standard 960 (devices and browsers) */
-@media only screen and (max-width: 959px) {}
-
-/* Tablet Portrait size to standard 960 (devices and browsers) */
-@media only screen and (min-width: 768px) and (max-width: 959px) {}
-
-/* All Mobile Sizes (devices and browser) */
-@media only screen and (max-width: 767px) {
-  header {
-    padding-top: 10px;
-    padding-bottom: 10px;
-  }
-  #downloads {
-    margin-bottom: 25px;
-  }
-  #download-zip, #download-tar-gz {
-    display: none;
-  }
-  .inner {
-    width: 94%;
-    margin: 0 auto;
-  }
-}
-
-/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */
-@media only screen and (min-width: 480px) and (max-width: 767px) {}
-
-/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */
-@media only screen and (max-width: 479px) {}
diff --git a/testimonials.html b/testimonials.html
deleted file mode 100644
index 3f7bc17..0000000
--- a/testimonials.html
+++ /dev/null
@@ -1,587 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <meta charset='utf-8'>
-    <meta http-equiv="X-UA-Compatible" content="chrome=1">
-    <meta name="favicon" content="./cms.svg">
-    <meta name="description" content="CMS, or Contest Management System, is an open source grading system handling IOI-like programming competition.">
-    <meta name="viewport" content="width=device-width, user-scalable=no">
-    <link rel="shortcut icon" href="./images/cms_icon.png" />
-    <link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen" />
-    <link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print" />
-    <!--[if lt IE 9]>
-    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-    <![endif]-->
-    <title>CMS :: Testimonials</title>
-    <style>
-ul ul {
-    margin-top: 2px;
-    margin-bottom: 0;
-}
-ul ul li {
-    list-style-type: none;
-    margin-left: 25px;
-}
-.contest_name {
-    font-weight: bold;
-}
-.contest_title {
-    font-weight: bold;
-}
-.contest_place {
-    font-style: italic;
-}
-.contest_place:not(:last-child)::after {
-    content: ', ';
-}
-    </style>
-  </head>
-
-  <body>
-    <div id="container">
-      <div class="inner">
-
-        <header>
-          <img src="./cms.svg"/>
-          <h1>CMS :: Testimonials</h1>
-          <h2>Contest Management System</h2>
-          <p>
-            <a href="https://github.com/cms-dev/cms/actions"><img src="https://github.com/cms-dev/cms/actions/workflows/main.yml/badge.svg" alt="Build Status"></a>
-            <a href="https://codecov.io/gh/cms-dev/cms" rel="nofollow"><img src="https://codecov.io/gh/cms-dev/cms/branch/master/graph/badge.svg" alt="Codecov Status"></a>
-            <a href="https://t.me/contestms" rel="nofollow"><img src="https://img.shields.io/endpoint?label=Support&style=flat-square&url=https%3A%2F%2Fmogyo.ro%2Fquart-apis%2Ftgmembercount%3Fchat_id%3Dcontestms" alt="Get Support on Telegram"></a>
-          </p>
-        </header>
-
-        <div class="button">
-          <a href="./index.html">Main</a>
-          <a href="./screenshots.html">Screenshots</a>
-          <a href="./testimonials.html">Testimonials</a>
-          <a href="./contribute.html">Contribute</a>
-          <a href="./related.html">Related</a>
-        </div>
-
-        <hr>
-
-<p>CMS has been used in several official and unofficial contests. In particular we are aware of the following.</p>
-
-<h3>International competitions</h3>
-<ul>
-  <li>
-    <span class="contest_name">
-      <a href="http://ioinformatics.org">IOI</a>
-      (International Olympiad in Informatics)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">
-          <a href="http://www.ioi2012.org">IOI 2012</a>
-        </span>
-        <span class="contest_place">Sirmione and Montichiari, Italy</span>
-        <span class="contest_date">September 2012</span>
-      </li>
-      <li>
-        <span class="contest_title">
-          <a href="http://www.ioi2013.org">IOI 2013</a>
-        </span>
-        <span class="contest_place">Brisbane, Australia</span>
-        <span class="contest_date">July 2013</span>
-      </li>
-      <li>
-        <span class="contest_title">
-          <a href="http://www.ioi2014.org">IOI 2014</a>
-        </span>
-        <span class="contest_place">Taipei, Taiwan</span>
-        <span class="contest_date">July 2014</span>
-      </li>
-      <li>
-        <span class="contest_title">
-          <a href="http://www.ioi2015.kx">IOI 2015</a>
-        </span>
-        <span class="contest_place">Almaty, Kazakhstan</span>
-        <span class="contest_date">July 2015</span>
-      </li>
-      <li>
-        <span class="contest_title">
-          <a href="http://www.ioi2017.org">IOI 2017</a>
-        </span>
-        <span class="contest_place">Tehran, Iran</span>
-        <span class="contest_date">July 2017</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_name">
-      <a href="http://orac.amt.edu.au/fario">FARIO</a>
-      (French-Australian Regional Informatics Olympiad)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">
-          <a href="http://orac.amt.edu.au/fario/fario12results.html">FARIO 2012</a>
-        </span>
-        <span class="contest_date">March 2012</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_name">
-      BOI (Baltic Olympiad in Informatics)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">
-          <a href="http://www.boi2014.lmio.lt/">BOI 2014</a> (Baltic Olympiad in Informatics)
-        </span>
-        <span class="contest_place">Palanga, Lithuania</span>
-        <span class="contest_date">April 2014</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_name">
-      <a href="http://apio-olympiad.org/">APIO</a>
-      (Asia-Pacific Informatics Olympiad)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">
-          <a href="http://olympiads.kz/apio2014/">APIO 2014</a>
-        </span>
-        <span class="contest_place">Almaty, Kazakhstan</span>
-        <span class="contest_date">May 2014</span>
-      </li>
-      <li>
-        <span class="contest_title">
-          <a href="http://apio2016.org/">APIO 2016</a>
-        </span>
-        <span class="contest_place">Republic of Korea</span>
-        <span class="contest_date">May 2016</span>
-      </li>
-    </ul>
-  <li>
-    <span class="contest_name">
-      <a href="http://ceoi.inf.elte.hu/">CEOI</a>
-      (Central European Olympiad in Informatics)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">
-          <a href="http://ceoi2014.informatik-olympiade.de/">CEOI 2014</a>
-        </span>
-        <span class="contest_place">Jena, Germany</span>
-        <span class="contest_date">June 2014</span>
-      </li>
-      <li>
-        <span class="contest_title">
-          <a href="http://ceoi2015.fi.muni.cz/ceoi.php">CEOI 2015</a>
-        </span>
-        <span class="contest_place">Brno, Czech Republic</span>
-        <span class="contest_date">June 2015</span>
-      </li>
-    </ul>
-  <li>
-    <span class="contest_name">
-      <a href="http://rmi.lbi.ro/">RMI</a>
-      (Romanian Master of Informatics)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">RMI 2014</span>
-        <span class="contest_place">Bucharest, Romania</span>
-        <span class="contest_date">October 2014</span>
-      </li>
-    </ul>
-  </li>
-</ul>
-
-<h3>National competitions</h3>
-<ul>
-  <li>
-    <span class="contest_name">
-      <a href="http://www.olimpiadi-informatica.it">OII</a>
-      (Italian Olympiad in Informatics)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">OII 2011</span>
-        <span class="contest_place">Sirmione, Italy</span>
-        <span class="contest_date">30 September 2011</span>
-      </li>
-      <li>
-        <span class="contest_title">OII 2012</span>
-        <span class="contest_place">Sirmione, Italy</span>
-        <span class="contest_date">12 October 2012</span>
-      </li>
-      <li>
-        <span class="contest_title">OII 2013</span>
-        <span class="contest_place">Salerno, Italy</span>
-        <span class="contest_date">13 September 2013</span>
-      </li>
-      <li>
-        <span class="contest_title">OII 2014</span>
-        <span class="contest_place">Salerno, Italy</span>
-        <span class="contest_date">19 September 2014</span>
-      </li>
-      <li>
-        <span class="contest_title">OII 2015</span>
-        <span class="contest_place">Castiglione dei Pepoli, Italy</span>
-        <span class="contest_date">17-19 September 2015</span>
-      </li>
-      <li>
-        <span class="contest_title">OII 2016</span>
-        <span class="contest_place">Catania, Italy</span>
-        <span class="contest_date">15-17 September 2016</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_title">
-      <a href="http://orac.amt.edu.au/aiio/aiio12results.html">AIIO 2012</a>
-      (Australian Invitational Informatics Olympiad)
-    </span>
-    <span class="contest_date">February 2012</span>
-  </li>
-  <li>
-    <span class="contest_title">
-      Croatian high school programming contest 2013
-    </span>
-    <span class="contest_date">March 2013</span>
-  </li>
-  <li>
-    <span class="contest_name">
-      FIT (Festival of Innovative Technologies)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">FIT 2013</span>
-        <span class="contest_place">Slovenia</span>
-        <span class="contest_date">April 2013</span>
-      </li>
-      <li>
-        <span class="contest_title">FIT 2014</span>
-        <span class="contest_place">Slovenia</span>
-        <span class="contest_date">April 2014</span>
-      </li>
-      <li>
-        <span class="contest_title">FIT 2017</span>
-        <span class="contest_place">Slovenia</span>
-        <span class="contest_date">Match 2014</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_title">
-      NIO (<a href="http://nio.no">Norwegian Olympiad in Informatics</a>)
-    </span>
-    <span class="contest_place">Norway</span>
-    <span class="contest_date">2013-2016</span>
-  </li>
-  <li>
-    <span class="contest_title">
-      OCI 2013 (Chilean Olympiads in Informatics)
-    </span>
-    <span class="contest_date">May 2013</span>
-  </li>
-  <li>
-    <span class="contest_title">
-      Slovenian Invitational Informatics Olympiad
-    </span>
-    <span class="contest_date">May 2013</span>
-  </li>
-  <li>
-    <span class="contest_name">
-      <a href="http://cms.ioi-jp.org">JOI Open Contest</a>
-      (Japanese Olympiad in Informatics)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">
-          <a href="http://cms.ioi-jp.org/open-2013">JOI Open Contest 2013</a>
-        </span>
-        <span class="contest_place">Japan</span>
-        <span class="contest_date">June 2013</span>
-      </li>
-      <li>
-        <span class="contest_title">
-          <a href="http://cms.ioi-jp.org/open-2014">JOI Open Contest 2014</a>
-        </span>
-        <span class="contest_place">Japan</span>
-        <span class="contest_date">June 2014</span>
-      </li>
-      <li>
-        <span class="contest_title">
-          <a href="http://cms.ioi-jp.org/open-2015">JOI Open Contest 2015</a>
-        </span>
-        <span class="contest_place">Japan</span>
-        <span class="contest_date">June 2015</span>
-      </li>
-      <li>
-        <span class="contest_title">
-          <a href="http://cms.ioi-jp.org/open-2016">JOI Open Contest 2016</a>
-        </span>
-        <span class="contest_place">Japan</span>
-        <span class="contest_date">June 2016</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_name">
-      KOI (Korean Olympiad in Informatics)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">KOI 2013</span>
-        <span class="contest_place">Cheongju, South Korea</span>
-        <span class="contest_date">2 August 2013</span>
-      </li>
-      <li>
-        <span class="contest_title">KOI 2014</span>
-        <span class="contest_place">Suncheon, South Korea</span>
-        <span class="contest_date">11 July 2014</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_title">
-      Taiwan High School Programming Contest
-    </span>
-    <span class="contest_date">22 December 2013</span>
-  </li>
-  <li>
-    <span class="contest_name">
-      <a href="http://www.be-oi.be/">beOI</a>
-      (Belgian Olympiad in Informatics)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">beOI 2014</span>
-        <span class="contest_place">Leuven, Belgium</span>
-        <span class="contest_date">8 February 2014</span>
-      </li>
-      <li>
-        <span class="contest_title">beOI 2015</span>
-        <span class="contest_place">Brussels, Belgium</span>
-        <span class="contest_date">2 May 2015</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_title">
-      TOP'2014 (Tunisian Olympiad in Programming)
-    </span>
-    <span class="contest_date">March 2014</span>
-  </li>
-  <li>
-    <span class="contest_name">
-      <a href="http://online.lmio.lt/">LMIO</a>
-      (Lithuanian Olympiad in Informatics)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">LMIO 2014</span>
-        <span class="contest_date">March 2014</span>
-      </li>
-      <li>
-        <span class="contest_title">LMIO 2015</span>
-        <span class="contest_date">21, 22 March 2015</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_title">
-      Argentinian National Olympiad in Informatics
-    </span>
-    <span class="contest_date">2014-2016</span>
-  </li>
-  <li>
-    <span class="contest_title">
-      Argentinian IOI Selection Contest
-    </span>
-    <span class="contest_date">2014-2016</span>
-  </li>
-  <li>
-    <span class="contest_name">
-      <a href="http://ioimalaysia.org/competitions/malaysian-computing-olympiad/">MCO</a>
-      (Malaysian Computing Olympiad)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">
-          <a href="http://ioimalaysia.org/competitions/malaysian-computing-olympiad/mco-2014/">MCO 2014</a>
-        </span>
-        <span class="contest_date">19, 20 April 2014</span>
-      </li>
-      <li>
-        <span class="contest_title">
-          <a href="http://ioimalaysia.org/competitions/malaysian-computing-olympiad/mco-2015/">MCO 2015</a>
-        </span>
-        <span class="contest_date">18, 19 April 2015</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_name">
-      <a href="http://103.9.88.184">Mongolian National Informatics Olympiad</a>
-    </span>
-    <ul>
-      <li>
-	<span class="contest_title">
-	  Mongolian Olympiad in Informatics 2015
-	</span>
-	<span class="contest_date">26 April 2015</span>
-      </li>
-      <li>
-	<span class="contest_title">
-	  Mongolian Olympiad in Informatics 2018
-	</span>
-	<span class="contest_date">11-13 May 2018</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_title">
-      <a href="http://aipo.computing.dcu.ie/">All-Ireland Programming Olympiad 2016</a>
-    </span>
-    <span class="contest_date">20 February 2016</span>
-  </li>
-  <li>
-    <span class="contest_name">
-      <a href="http://www.lio.lv/">LIO</a>
-      (Latvian Olympiad in Informatics)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">LIO 2017</span>
-        <span class="contest_place">Liepāja, Latvia</span>
-        <span class="contest_date">March 2017</span>
-      </li>
-      <li>
-        <span class="contest_title">LIO 2018</span>
-        <span class="contest_place">Valmiera, Latvia</span>
-        <span class="contest_date">March 2018</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_name">
-      <a href="http://olympiad.org.za/programming-olympiad/">SAPO</a>
-      (South African Programming Olympiad)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">SAPO 2015</span>
-        <span class="contest_place">Cape Town, South Africa</span>
-        <span class="contest_date">10 October 2015</span>
-      </li>
-      <li>
-        <span class="contest_title">SAPO 2016</span>
-        <span class="contest_place">Cape Town, South Africa</span>
-        <span class="contest_date">8 October 2016</span>
-      </li>
-      <li>
-        <span class="contest_title">SAPO 2017</span>
-        <span class="contest_place">Cape Town, South Africa</span>
-        <span class="contest_date">7 October 2017</span>
-      </li>
-      <li>
-        <span class="contest_title">SAPO 2018</span>
-        <span class="contest_place">Johannesburg, South Africa</span>
-        <span class="contest_date">29 September 2018</span>
-      </li>
-    </ul>
-  </li>
-</ul>
-
-<h3>Local competitions</h3>
-<ul>
-  <li>
-    <span class="contest_title">
-      Taipei High School Programming Contest
-    </span>
-    <span class="contest_place">Taiwan</span>
-    <span class="contest_date">October 2012</span>
-  </li>
-  <li>
-    <span class="contest_title">
-      Taipei High School Programming Contest
-    </span>
-    <span class="contest_place">Taiwan</span>
-    <span class="contest_date">1 November 2013</span>
-  </li>
-  <li>
-    <span class="contest_name">
-      <a href="http://www.itispaleocapa.it/eventi-al-paleocapa/gara-abc-informatica">ABC</a>
-      (Algoritmi Bergamo Contest)
-    </span>
-    <ul>
-      <li>
-        <span class="contest_title">ABC 2013</span>
-        <span class="contest_place">Bergamo, Italy</span>
-        <span class="contest_date">18 May 2013</span>
-      </li>
-      <li>
-        <span class="contest_title">ABC 2014</span>
-        <span class="contest_place">Bergamo, Italy</span>
-        <span class="contest_date">17 May 2014</span>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="contest_title">
-      KTSS (High schools competition)
-    </span>
-    <span class="contest_place">Sarajevo, Bosnia and Herzegovina</span>
-    <span class="contest_date">12 April 2014</span>
-  </li>
-  <li>
-    <span class="contest_title">
-      KTOS (Elementary schools competition)
-    </span>
-    <span class="contest_place">Sarajevo, Bosnia and Herzegovina</span>
-    <span class="contest_date">26 April 2014</span>
-  </li>
-  <li>
-    <span class="contest_title">
-      <a href="https://drive.google.com/file/d/0B8LJqB-JZyRfdC1PUVpJQ3g5bjQ/view">Local selection for ACM ICPC regionals</a>
-    </span>
-    <span class="contest_place">Cesena, Italy</span>
-    <span class="contest_date">22, 27 October 2014</span>
-  </li>
-</ul>
-
-<h3>Training</h3>
-<ul>
-  <li>
-    Training camps for the selections of the national IOI teams of
-    Australia, Egypt, Germany, India, Ireland, Israel, Italy, Japan,
-    Latvia, Serbia, South Africa, South Korea and Taiwan.
-  </li>
-</ul>
-
-<h3>Other</h3>
-<ul>
-  <li>
-    Laboratory exercises and exams of the course "Algorithms and data
-    structures" at University of Trento, Italy (year 2011-2012).
-  </li>
-</ul>
-
-<p>
-  If you used CMS for a contest, selection, or a similar event, and
-  want to publicize this information, we would be more than happy to
-  hear from you and add it to this list.
-</p>
-
-      </div>
-    </div>
-
-    <script>
-(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
-(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
-m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
-})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
-ga('create', 'UA-89189426-1', 'auto');
-ga('send', 'pageview');
-    </script>
-  </body>
-</html>
