Learning paths
Each path lists what you need before starting, what you will be able to do afterwards, and the guides to read in order.
-
Self-Hosting Foundations
Take a blank Ubuntu VPS to a server that runs containerised applications safely: firewalls that cover Docker, a real deployment, restorable backups, and a pipeline that ships changes.
- Harden a fresh Ubuntu host and verify it from outside
- Understand why UFW does not cover published container ports, and fix it
- Deploy a multi-container application with Docker Compose behind TLS
8 lessons
-
Cloudflare for Developers
The parts of Cloudflare you use when you run your own infrastructure — DNS and proxy status, deploying to Workers, and replacing inbound firewall rules with a tunnel.
- Point a domain at an origin server and choose the right encryption mode
- Explain what proxied and DNS-only records do differently
- Deploy a static or server-rendered site to Cloudflare Workers
3 lessons
-
AI-Assisted Development
Put a coding agent to work on a codebase you already have, and keep the output reviewable — project setup, permission boundaries, task scoping and the review discipline that makes it safe to merge.
- Configure a coding agent against an existing repository without restructuring it
- Write project instructions that reflect how the code really builds
- Restrict which commands an agent may run unattended
2 lessons
-
n8n in Production
Run self-hosted n8n as infrastructure rather than a hobby project — Postgres storage, TLS, encryption key handling, host hardening and backups that include the things a database dump misses.
- Deploy n8n with PostgreSQL and automatic TLS instead of the SQLite quickstart
- Understand what the n8n encryption key protects and why it is not in your backups
- Keep the n8n port unreachable from the internet
3 lessons
-
Production Data Layer
Run the stateful half of a self-hosted stack properly — PostgreSQL with least privilege and TLS, Meilisearch with scoped API keys, and backups you have restored at least once.
- Give an application a database role that cannot alter its own schema
- Require TLS for every non-loopback database connection
- Run Meilisearch without shipping an admin key to the browser
4 lessons