Docs Geek runs technical writing courses with hands-on coding exercises in GitHub Codespaces. Their infrastructure was broken: environments failed to initialize, and learners lost all progress when they returned after a break.
docsgeek.io - course page
What Made This Hard
Environments wouldn't set up correctly. When learners launched the course repository in Codespaces, dependencies failed to install, configuration files were missing, and students couldn't start exercises.
Progress disappeared between sessions. Students would return to their Codespace and find everything reset to zero. Code, practice work, configurations, all gone. Multi-day projects were impossible to complete.
How I Built It
I containerized the entire course setup with Docker. The Dockerfile installs all dependencies, configures the development environment, and sets up the tools needed for API documentation exercises. Every learner gets an identical working environment.
The persistence problem came down to understanding how Codespaces handles storage. I restructured the setup so learner work saves to persistent volumes that survive restarts. Configuration files, practice code, and exercise progress now persist across sessions.
GitHub Actions workflows run on Codespace creation to execute initialization scripts, verify dependencies, and validate the environment before the learner sees it. Post-create scripts configure the workspace, install VS Code extensions, and display a welcome message with first steps.
What I'd Highlight
Docker containerization eliminated all setup failures
Persistent volume mounting means students keep their progress across sessions
Automated validation catches initialization problems before learners hit them