Staff dashboard
Each competition opens onto a dashboard of live widgets. What you see depends on who you are: staff get the manager view — competition stats, recent activity, announcements, challenge health, and the support queue — while participants get their own standing and solves. Everything updates live over the same WebSocket layer as the rest of the app.
Those five are the manager view’s defaults. Since v1.6.0 it also carries a set of optional add-from-catalogue sections — extra operational panels you add when you want them and leave off when you don’t. See Manager sections below.
Rearranging it
Section titled “Rearranging it”Staff holding customize_dashboard (Judge and Administrator by default)
get an edit mode. Since v1.4.0 it’s a fluid 12-column grid:
- Drag to move, grab a corner to resize — snapped to whole cells, with each widget keeping a sensible minimum size.
- Keyboard controls per section (move / resize) as an accessible fallback.
- Save / Cancel / Reset to default for your changes.
A section is on your dashboard when — and only when — it’s on the grid. In edit mode an Add section button opens a modal listing every section you don’t yet have as a card (name plus a short description); pick one and it drops in at the bottom, ready to drag and resize. Remove a section (the control on the section itself) and it goes back to the catalogue, where you can add it again later. The catalogue is scoped to your view, so the manager catalogue only offers manager sections.
Layouts persist per user — your arrangement is yours, not the competition’s. On mobile the grid stacks to a single column.
Manager sections
Section titled “Manager sections”Beyond the five defaults, the manager view carries seven opt-in sections. None ship on the default layout — they surface only through the Add section catalogue above, so upgrading changes nothing until you add one. A section whose backing permission you lack just renders as an empty card.
- Unsolved challenges — published challenges nobody has solved yet,
ranked by attempts, so the too-hard or broken ones stand out. Gated by
view_competition_analytics. - Difficulty progress — how many challenges in each difficulty tier
have been solved, as a solved-of-total bar per tier. Gated by
view_competition_analytics. - Team activity — who’s most active right now and which teams have
gone quiet, with an idle flag for anyone silent for an hour. (In solo
competitions the subject is the individual, not a team.) Gated by
view_competition_analytics. - Brute-force watch — the teams submitting the most wrong flags, a
flag-guessing signal. Gated by
view_competition_analytics. - Moderation feed — recent significant actions in this competition
(deletions, score changes, freezes) — high-level summaries, not raw
payloads. It draws a curated allowlist of
audit-log events, not the full log; see the
audit log. Gated by
view_competition_analytics. - Schedule & status — current status, the countdown to start or end, and whether the scoreboard is frozen. No extra permission — it’s derived from the competition itself.
- Instance health — live challenge instances
by status, plus recent provisioning failures. Gated by
instance_view(not analytics).
Adding sections needs customize_dashboard (Judge and Administrator by
default) — the same grant that unlocks edit mode. The related
manage_dashboard_widgets grant remains defined but enforced nowhere; the
catalogue doesn’t use it. See the
permissions reference.