grc.engineering bootcamp
Learning by doing

Interactive labs

Each module's exercise runs in this page — a simulated machine seeded with the lab's files, whose output is verified against captures from the real thing. Tasks check themselves off as the machine actually changes. Everything you do stays in your browser.

26 of 26 module exercises are live; the rest land wave by wave.

…
Module 00 · Guided builder

The before picture, machine-checked

8 tasks · from What GRC Engineering Is

Your badges

0 pts

Derived from your completions (0 done, 0 clean) — recomputable, browser-local, no leaderboard.

  • First Evidence (locked)

    Completed your first interactive exercise.

  • Foundations Laid (locked)

    Completed every exercise in modules 00–06 (Mindset + Tier 1 Foundations).

  • Clean Run (locked)

    Completed an exercise without revealing a single answer.

  • Evidence Keeper (locked)

    Built an evidence chain at least 5 entries long.

  • The Full Loop (locked)

    Completed all 16 module exercises — the irreducible loop, end to end.

Profile & cross-device sync

There is no server and no account — your progress lives in this browser. To move it, you carry it yourself as an encrypted blob only your passphrase can open.

Profile

Optional display name — stored in this browser only and included in your encrypted sync payload.

Export your progress

Produces one encrypted blob (AES-256-GCM) of ALL your state — progress, completions, evidence chain, artifacts, profile. Pick a long passphrase (4+ random words is a good shape). It is never stored anywhere — lose it and the export can't be opened, by us or anyone.

Import from another browser

Paste or upload a sync blob. You'll see exactly what the merge would take from each side BEFORE anything is applied; applying makes an automatic local backup you can undo.

Optional: your own private GitHub Gist

Push/pull the same encrypted blob to a private gist YOU own, using a fine-grained personal access token with only gist permission. Your token stays in this browser — it's stored in localStorage here, never sent anywhere except api.github.com, and never included in the sync payload. This is your storage, not our service.

Push uses the passphrase from the Export box (encrypts before anything leaves the browser); pull drops the blob into the Import box.