Choose a build type below to get started.
Any drafts you are working on will appear here. You can work on one draft at a time.
No drafts yet — pick a build type below to start.
Describe a real incident in your own words — news article, CVE, or a short story. Plain language is fine.
Example: web control panel hack, ~10–15 min, beginner — loads into the box; edit anything before you generate.
Lab scope: one Fly container — Flask app + in-browser terminal. SQLite in-app only (no separate database or multi-service stacks yet).
Fuel cost breakdown:
| Generate (incl. Docker build) | 150 ⛽ |
| Each revision | 12 ⛽/section |
| Publish | 30 ⛽ |
| Minimum | 180 ⛽ |
Generate includes AI + Fly deploy with quality checks (Python compile, Dockerfile, Docker build). Publish (30 ⛽) unlocks only after a working Fly image exists. Fuel is not refunded — download the zip and fix locally if deploy fails.
Your balance: ⛽ …
Starting…
Elapsed: 0s
Claude is proposing 4–6 bite-sized steps (no Docker yet). Charged 3 ⛽ only if the proposal succeeds. Usually 15–45 seconds.
Review the steps below — suggest changes or accept when it looks right.
One lab per kill-chain step · substeps grow that same VM in order.
Preview — same in-browser lab students will use on this step
Starting…
Typical substep patch: 4–10 min · hard stop at 30 min · no fuel charged until the lab saves
Quality pipeline — you can watch each phase run:
0%
Fuel spent: ⛽ 10
Each ↻ costs 12 ⛽
Lab sessions always cost 1 fuel. Platform takes 10% of paid sales. You keep 90%.
Docker image is built automatically. You and admin verify the lab manually before it goes live.
Your challenge will be reviewed and live within 24 hours.
Finish or cancel your AI episode draft below before starting another challenge.
Build a full episode in the new workspace — 2–3 Labs, each with its own VM and up to 3 guided steps. Instructions and Docker are generated together so they always match.
Open AI Episode Builder →Paste a breach in plain language. Propose a kill chain (3 ⛽), then for each hands-on step: plan substeps and let AI grow one lab as you release them — same VM per step, new lessons and files added each time.
Build a hack lab with Docker files. Students run it, exploit it, fix it, earn CPE.
Build a debate challenge prompt. Learners argue first principles and spawn deeper threads.
Build a complete kill chain episode. Multiple steps, full kill chain. Submitted for admin review. Promoted episodes appear on the front page.
Community bounty: 0.05 CPE (fixed)
Upload a modified Docker image to Fly.io before publishing if you change the lab files.
These three widgets are the foundation of every challenge. Fill them in, add more widgets above or below, or remove any you don't need.
This step has an AI-built in-browser lab. Try it before submitting the full episode.
Lab sessions always cost 1 fuel regardless of content price. Platform takes 10% of paid sales. You keep 90%.
✓ AI built and deployed this Fly image. Test the in-browser lab below — no zip upload needed. Use ⬇ Download lab source (.zip) below to inspect Dockerfile, app.py, and debug locally.
⚠ Fly image not deployed — use the Docker File Upload widget above (AI draft zip loads automatically). Scan the zip, then Build Fly image from zip or Test This Lab.
Each hack challenge should include one Docker File Upload widget (canvas) and this panel. The student lab widget reflects that Docker lab in the browser — same ports and services you list below, with a session time you choose (max 60 minutes).
In-browser lab (Fly): Start Lab spins up the VM from this image tag. Until you deploy your own zip to Fly and paste its registry tag here,
Zip + Build sets the tag automatically. Not :latest. Terminal = https://htb-lab-test.fly.dev (Fly cloud). Target App = same host :8080 (not localhost). Rebuild zip after Dockerfile port changes.
Download zip (widget above): separate path — students download and run Docker locally. Upload/clearance does not auto-switch this Fly image yet. See interactive lab guide.
| Label | Port | Icon |
|---|
Maximum 60 minutes per in-browser session. Set any shorter value (minimum 5). Students see this limit on the lab widget.
Preview — same view students see on the challenge page