Developed by SPYDIRBYTE
A free, practical operational security course, delivered as a single-page interactive terminal instead of a conventional docs site. Type a command or click a module, content loads in without a page reload, everything routes off the URL hash so links still work and the back button still works.
- Digital Footprint & Threat Modeling
- Data Broker Removal
- Social Media Hardening & Metadata Stripping
- Password & Credential Security
- Email & Phone Compartmentalization
- Browser Hardening & Anti-Tracking
- VPN & Tor
- Tools & Next Steps, featuring spy-privacy-pulse as the companion tool
No build step, it's a static site.
python3 -m http.server 8000Open http://localhost:8000.
Click a module in the sidebar, or use the command bar at the bottom:
help list all commands
ls list modules
open 2 open a module by number, slug, or partial name
next / prev move between modules
complete mark the current module complete
progress show completion status
home back to the welcome screen
Push this repo, then in Settings > Pages, set the source to the main
branch, root directory. Since routing is hash-based (#brokers, not a
real path), no server configuration is needed for it to work correctly
on GitHub Pages.
.
├── index.html # the entire app shell: boot sequence, sidebar, viewport, command bar
├── css/style.css
└── js/
├── course-data.js # module order, slugs, and short labels
├── content-data.js # the actual course prose, as data
└── app.js # boot sequence, command parser, hash router, renderer
Add an entry to COURSE_ORDER in js/course-data.js (slug, label,
number) and a matching entry to MODULE_CONTENT in
js/content-data.js (slug, title, html). The sidebar, command parser,
and prev/next links all read from these two files, nothing else needs
touching.
The "mark complete" command and button save to localStorage in the
visitor's own browser. Nothing is sent anywhere, there's no backend at
all. Clearing browser data resets it.
MIT.