12 beginner-friendly levels (easy ramp, one command each, pipeline only at the end). Players register, solve tasks in a real terminal, paste the output. Hints unlock after 2 wrong tries and cost +60s. Ranking: levels cleared, then time.
npm install && npm start # http://localhost:3000
- Push this repo to GitHub.
- Render → New → Blueprint → pick the repo (uses
render.yaml), or New Web Service with buildnpm install, startnpm start. - Set
ADMIN_KEY(Blueprint generates one). Share the URL; leaderboard is at/leaderboard.html.
Note: free-tier storage is ephemeral, so data resets on redeploy/restart. Fine for a one-off event; the first request after idle sleep takes ~30s, so open the site a few minutes before starting.
Reset all players: curl -X POST https://YOUR-APP.onrender.com/api/admin/reset -H "x-admin-key: YOUR_KEY"
Answers are stored only as SHA-256 hashes in levels.json. Edit private/gen.js
(git-ignored; keeps the plaintext answer key in private/ANSWERS.txt), then run node private/gen.js.
Answers are matched case-insensitively with whitespace collapsed; a paste with several lines passes if any single line matches.
public/Linux_101_Quest.zip is served from the home page. Before the contest run
facilitator/reset_permissions.sh from the zip, so backup.sh files are non-executable.