OpenLMS is the platform that powers DevSoc's workshop series. Facilitators can create courses with structured modules, exercises, and quizzes. Students track their progress, submit exercises, and get feedback from facilitators. It's intentionally simple — we stripped away every LMS feature that doesn't matter for a 6-week bootcamp — and built to be extended by any developer who wants to add functionality.
Course Structure
A Course contains a sequence of Modules. Each Module contains a mix of Lessons (markdown content with embedded code snippets), Exercises (code challenges with a test harness), and Quizzes (multiple-choice assessments). Students progress through modules linearly by default, but facilitators can unlock modules out of order for self-paced tracks. Module completion is tracked in the database and surfaced as a progress bar on the student dashboard.
The Exercise Runner
Exercises run in a sandboxed environment using Django's subprocess module with strict resource limits (CPU time, memory, no network). Students write code in a Monaco editor embedded in the page, click 'Run Tests', and see results within two seconds. The test harness is defined by the facilitator in Python using pytest — the same format our CS students already use in coursework, reducing friction for first-time contributors.
Extending OpenLMS
OpenLMS is intentionally modular. The Django app is structured as a collection of independent apps (courses, exercises, quizzes, progress) with clean internal APIs. Adding a new content type means creating a new Django app, registering it in settings, and adding a template — no core code changes required. We've had contributors add peer review, a discussion forum, and a certificate generator without touching the original codebase.
Running Your Own Instance
OpenLMS is deployed as a Docker container. The `docker-compose.yml` in the repo spins up the Django app, a PostgreSQL database, and an Nginx reverse proxy. Set your environment variables (secret key, database URL, email credentials), run `docker-compose up -d`, and the platform is running. We include a seed command (`python manage.py seed_demo`) that populates a demo course so you can see the full experience immediately.

