A rated attempt is scored like a match against the lab: pass inside the limit and you beat it; fail, or run over, and it beats you. Ratings are Glicko-2, so every number carries its own uncertainty — a profile says 1500 ± 350 until it has earned the right to be more precise.
A rating comes from rated labs and rated theory. Those are graded by the server against your account. An unrated attempt is still recorded — it shows on your profile with its score and its time. No rated lab has been published yet, so today the board is empty of real players; the sample accounts are marked. Why the catalogue is split.
Sample data. Nobody here is real. These 100 accounts are generated by seed/generate.py and replayed through the same rating code the live service runs, so the pages can be judged before anyone has signed up.
Every learner, their overall rating and what they are best at.
| # | Learner | Rating | Best topics | Passed | Attempts | |
|---|---|---|---|---|---|---|
| 1 | clara-curl 🇺🇸 | 1804 ± 35 | Networking, Terraform, Logging and journald | 86 | 94 | |
| 2 | bex-nice 🇫🇷 | 1798 ± 34 | Networking, Terraform, Python | 90 | 97 | |
| 3 | cassyank 🇺🇸 | 1803 ± 42 | Python, Users and permissions, Boot and systemd | 54 | 59 | |
| 4 | ivowget 🇩🇪 | 1800 ± 42 | Linux basics, Python, Networking | 47 | 51 | |
| 5 | nadialvm 🇳🇱 | 1775 ± 36 | Bash, Python, Users and permissions | 71 | 79 | |
| 6 | hash3 🇦🇺 | 1747 ± 34 | Python, Users and permissions, Claude Code | 78 | 93 | |
| 7 | clara-root 🇳🇴 | 1753 ± 36 | Python, Storage and LVM, AI Agents | 67 | 76 | |
| 8 | wren-bit 🇺🇸 | 1745 ± 34 | Logging and journald, Bash, Users and permissions | 96 | 120 | |
| 9 | jonasmount 🇺🇸 | 1788 ± 58 | Users and permissions, Claude Code, Linux basics | 28 | 28 | |
| 10 | nils-tty 🇩🇪 | 1784 ± 59 | Python, Boot and systemd, Networking | 17 | 19 | |
| 11 | lena-runs 🇫🇷 | 1726 ± 40 | Claude Code, Bash, Terraform | 45 | 52 | |
| 12 | lena-kernel 🇮🇪 | 1703 ± 30 | Ollama, Boot and systemd, Storage and LVM | 87 | 102 | |
| 13 | elin-ops 🇩🇪 | 1714 ± 45 | Networking, Linux basics, Boot and systemd | 38 | 43 | |
| 14 | curl97 🇺🇸 | 1681 ± 30 | Ollama, Model Context Protocol, Claude Code | 87 | 104 | |
| 15 | wren-lab 🇺🇸 | 1699 ± 40 | Logging and journald, AI Services, Boot and systemd | 49 | 57 | |
| 16 | sudo86 🇬🇧 | 1678 ± 32 | AI Services, Firewall and SELinux, Terraform | 79 | 95 | |
| 17 | wget49 🇺🇸 | 1705 ± 46 | Python, AI Agents, Terraform | 37 | 42 | |
| 18 | wrenquota 🇪🇸 | 1670 ± 31 | Ansible, Boot and systemd, Containers | 86 | 109 | |
| 19 | matzvim 🇬🇧 | 1681 ± 38 | Logging and journald, Python, Ollama | 55 | 64 | |
| 20 | matz-daemon 🇬🇧 | 1695 ± 45 | Bash, Boot and systemd, Python | 33 | 42 | |
| 21 | xenia-runs 🇺🇸 | 1683 ± 40 | Ollama, Logging and journald, Users and permissions | 44 | 52 | |
| 22 | bruno-tmux 🇦🇺 | 1675 ± 37 | Bash, AI Agents, Firewall and SELinux | 65 | 80 | |
| 23 | elin-lvm 🇩🇪 | 1658 ± 34 | Containers, Storage and LVM, AI Services | 62 | 82 | |
| 24 | shell34 🇵🇹 | 1717 ± 66 | Claude Code, Bash, Linux basics | 18 | 18 | |
| 25 | sudo50 🇮🇹 | 1641 ± 29 | Firewall and SELinux, Terraform, Boot and systemd | 93 | 126 | |
| 26 | antonpipe 🇫🇷 | 1731 ± 79 | Linux basics, Networking, Firewall and SELinux | 9 | 9 | |
| 27 | fsck44 🇩🇪 | 1643 ± 35 | Networking, Firewall and SELinux, Bash | 51 | 71 | |
| 28 | udev51 🇦🇺 | 1661 ± 44 | Bash, Claude Code, Networking | 38 | 45 | |
| 29 | anton-sudo 🇮🇪 | 1660 ± 44 | Users and permissions, Boot and systemd, Bash | 32 | 42 | |
| 30 | forge87 🇺🇸 | 1654 ± 42 | Claude Code, Firewall and SELinux, Networking | 45 | 52 | |
| 31 | bruno-patch 🇦🇺 | 1645 ± 39 | AI Services, AI Agents, Logging and journald | 47 | 59 | |
| 32 | ola-cron 🇺🇸 | 1634 ± 36 | Users and permissions, Bash, Ansible | 45 | 61 | |
| 33 | gus-zsh 🇯🇵 | 1659 ± 49 | Model Context Protocol, Users and permissions, Ansible | 30 | 36 | |
| 34 | nadia-ops 🇬🇧 | 1618 ± 29 | Python, Model Context Protocol, Firewall and SELinux | 78 | 106 | |
| 35 | pavel-grep 🇳🇱 | 1651 ± 47 | Linux basics, Python, Bash | 26 | 33 | |
| 36 | rafa-vim 🇯🇵 | 1650 ± 47 | Bash, Model Context Protocol, Linux basics | 33 | 39 | |
| 37 | jonas-swap 🇫🇷 | 1650 ± 48 | Networking, Firewall and SELinux, Users and permissions | 27 | 35 | |
| 38 | mount66 🇦🇺 | 1635 ± 40 | Claude Code, AI Agents, Containers | 45 | 55 | |
| 39 | xenialvm 🇺🇸 | 1666 ± 59 | Python, Boot and systemd, Linux basics | 15 | 17 | |
| 40 | kai-stack 🇨🇿 | 1612 ± 36 | Firewall and SELinux, Logging and journald, Model Context Protocol | 52 | 79 | |
| 41 | ivo-wget 🇪🇸 | 1604 ± 32 | Model Context Protocol, Boot and systemd, Python | 81 | 108 | |
| 42 | petra-daemon 🇳🇴 | 1597 ± 30 | Boot and systemd, Kernel and performance, Storage and LVM | 78 | 110 | |
| 43 | oscar-udev 🇩🇪 | 1604 ± 39 | Python, Linux basics, Users and permissions | 52 | 65 | |
| 44 | patch13 🇮🇪 | 1613 ± 47 | Claude Code, Terraform, Boot and systemd | 26 | 39 | |
| 45 | tomasquota 🇯🇵 | 1574 ± 31 | AI Services, Networking, Firewall and SELinux | 75 | 109 | |
| 46 | hana-zsh 🇨🇿 | 1566 ± 27 | Kernel and performance, Firewall and SELinux, Model Context Protocol | 89 | 133 | |
| 47 | udev8 🇦🇺 | 1575 ± 32 | Storage and LVM, Ansible, Logging and journald | 67 | 96 | |
| 48 | quinntux 🇯🇵 | 1567 ± 28 | Terraform, Containers, Claude Code | 84 | 128 | |
| 49 | jonastty 🇳🇴 | 1575 ± 35 | Firewall and SELinux, Networking, AI Services | 52 | 79 | |
| 50 | elin-umask 🇳🇿 | 1565 ± 30 | Ollama, Bash, Claude Code | 79 | 113 | |
| 51 | oscar-tux 🇵🇱 | 1575 ± 36 | Python, Linux basics, Boot and systemd | 59 | 76 | |
| 52 | socket38 🇮🇹 | 1620 ± 61 | Users and permissions, Model Context Protocol, Logging and journald | 16 | 19 | |
| 53 | elin-wget 🇺🇸 | 1545 ± 29 | Ansible, Kernel and performance, Model Context Protocol | 80 | 124 | |
| 54 | nils-hash 🇸🇪 | 1540 ± 26 | AI Services, Ollama, Terraform | 82 | 128 | |
| 55 | kolyacurl 🇺🇸 | 1603 ± 59 | Linux basics, Bash, Ollama | 15 | 17 | |
| 56 | udev15 🇳🇱 | 1554 ± 37 | Model Context Protocol, Networking, Logging and journald | 40 | 58 | |
| 57 | quinnswap 🇦🇺 | 1554 ± 38 | AI Agents, Linux basics, Networking | 44 | 61 | |
| 58 | xenia-fsck 🇦🇺 | 1551 ± 37 | Python, Logging and journald, Users and permissions | 56 | 88 | |
| 59 | mount32 🇷🇴 | 1507 ± 28 | AI Services, Storage and LVM, Ollama | 77 | 124 | |
| 60 | shell49 🇮🇹 | 1558 ± 55 | Bash, Model Context Protocol, Boot and systemd | 15 | 20 | |
| 61 | xeniasudo 🇳🇱 | 1513 ± 34 | Storage and LVM, Containers, Terraform | 46 | 76 | |
| 62 | kolya-cron 🇵🇱 | 1501 ± 31 | AI Agents, Claude Code, AI Services | 73 | 115 | |
| 63 | quinnroot 🇯🇵 | 1511 ± 40 | Model Context Protocol, Networking, Firewall and SELinux | 44 | 58 | |
| 64 | quota21 🇺🇸 | 1492 ± 34 | Ansible, Linux basics, Users and permissions | 47 | 73 | |
| 65 | patch15 🇸🇪 | 1471 ± 30 | Ansible, Users and permissions, Bash | 66 | 113 | |
| 66 | matz-swap 🇺🇸 | 1467 ± 30 | Ansible, Storage and LVM, AI Agents | 61 | 109 | |
| 67 | pipe31 🇸🇪 | 1478 ± 36 | Bash, Firewall and SELinux, Python | 40 | 73 | |
| 68 | rafa-runs 🇵🇱 | 1469 ± 32 | Ansible, Terraform, Containers | 63 | 96 | |
| 69 | pavel-hash 🇺🇸 | 1470 ± 40 | Kernel and performance, Ansible, Terraform | 31 | 51 | |
| 70 | mirastack 🇺🇸 | 1524 ± 67 | Linux basics, Ansible, Model Context Protocol | 8 | 12 | |
| 71 | quinnlvm 🇯🇵 | 1507 ± 60 | Boot and systemd, Firewall and SELinux, Ansible | 9 | 15 | |
| 72 | hanacore 🇵🇹 | 1484 ± 55 | Boot and systemd, Linux basics, AI Agents | 11 | 18 | |
| 73 | tomas-fsck 🇪🇸 | 1431 ± 30 | Users and permissions, Storage and LVM, Bash | 53 | 103 | |
| 74 | curl44 🇺🇸 | 1493 ± 63 | Networking, Model Context Protocol, Bash | 14 | 20 | |
| 75 | cass-pipe 🇯🇵 | 1434 ± 35 | Kernel and performance, Storage and LVM, Ansible | 34 | 72 | |
| 76 | esa-root 🇺🇸 | 1515 ± 79 | Logging and journald, Users and permissions, Networking | 4 | 7 | |
| 77 | kolya-root 🇷🇴 | 1402 ± 36 | Kernel and performance, Bash, Ansible | 29 | 70 | |
| 78 | halforge 🇮🇹 | 1387 ± 33 | Logging and journald, Python, Kernel and performance | 29 | 73 | |
| 79 | cass-curl 🇵🇹 | 1410 ± 46 | AI Services, Terraform, Containers | 17 | 33 | |
| 80 | miracron 🇺🇸 | 1388 ± 37 | Logging and journald, Ansible, Containers | 35 | 61 | |
| 81 | pavel-wget 🇳🇿 | 1377 ± 37 | Kernel and performance, Firewall and SELinux, Linux basics | 32 | 73 | |
| 82 | curl74 🇳🇴 | 1363 ± 31 | Claude Code, Firewall and SELinux, Users and permissions | 46 | 94 | |
| 83 | shell27 🇸🇪 | 1388 ± 45 | Logging and journald, Containers, Networking | 18 | 39 | |
| 84 | grep20 🇺🇸 | 1402 ± 53 | Kernel and performance, Boot and systemd, Python | 10 | 21 | |
| 85 | petra-forge 🇬🇧 | 1374 ± 45 | Kernel and performance, Logging and journald, Terraform | 27 | 51 | |
| 86 | loreroot 🇩🇪 | 1418 ± 67 | Networking, Firewall and SELinux, Ansible | 7 | 14 | |
| 87 | bruno-lvm 🇸🇪 | 1319 ± 32 | Kernel and performance, Storage and LVM, Linux basics | 34 | 99 | |
| 88 | lvm78 🇩🇪 | 1361 ± 56 | Logging and journald, Claude Code, AI Agents | 11 | 25 | |
| 89 | swap17 🇳🇴 | 1317 ± 35 | Terraform, AI Agents, Claude Code | 35 | 77 | |
| 90 | ola-shell 🇬🇧 | 1325 ± 41 | Terraform, Storage and LVM, Model Context Protocol | 17 | 46 | |
| 91 | cass-core 🇺🇸 | 1298 ± 29 | Logging and journald, AI Services, Storage and LVM | 41 | 110 | |
| 92 | udev67 🇺🇸 | 1349 ± 55 | Kernel and performance, Ansible, Containers | 10 | 19 | |
| 93 | yank69 🇺🇸 | 1372 ± 71 | AI Services, Ollama, Networking | 5 | 16 | |
| 94 | hana-nice 🇫🇷 | 1321 ± 47 | Ollama, Storage and LVM, Kernel and performance | 15 | 34 | |
| 95 | sanalvm 🇵🇱 | 1322 ± 50 | Firewall and SELinux, Containers, Ansible | 11 | 34 | |
| 96 | nice82 🇫🇷 | 1362 ± 71 | Users and permissions, Logging and journald, Linux basics | 4 | 13 | |
| 97 | byte58 🇪🇸 | 1258 ± 44 | AI Agents, Boot and systemd, Python | 6 | 34 | |
| 98 | hal-ops 🇺🇸 | 1233 ± 38 | Firewall and SELinux, AI Services, Networking | 21 | 65 | |
| 99 | socket53 🇯🇵 | 1207 ± 39 | AI Agents, Storage and LVM, Claude Code | 13 | 65 | |
| 100 | kai-swap 🇵🇱 | 1210 ± 45 | Ansible, Bash, Linux basics | 10 | 36 |
Difficulty 1 to 5 plays at 1100, 1300, 1500, 1700 and 1900. Beating a difficulty-5 lab is worth what beating a 1900 is worth.
5, 10, 15, 20 or 30 minutes by difficulty — unless the lab sets its own, as the exam simulation does. Finishing late is a loss, however good the fix.
Untimed attempts are recorded and never rated. Retry a lab as often as you like; only the timed run says anything about you.