CS 128 Learning Management System

Interactive web-based platform for computer science course delivery

Status: In ProductionDuration: 2020 - Present Collaborators: Nathan Park, Adarsh Suresh, Julian Schiavo, Rohit Valmeekam

Overview

CS 128 is structured around daily practice: students complete coding activities embedded directly alongside instructional content every weekday. This required a platform that could deliver lessons with interactive programming exercises, grade student code automatically, and provide immediate feedback — all within the browser. I developed this system using Ruby on Rails 6.0 and PostgreSQL.

When a student submits code, the platform queues a grading job through Rails Active Jobs, which launches an isolated Docker container running a custom grading image. The container executes the submission against a test suite and returns scoring results back to the platform. WebSocket connections through Action Cable provide live status updates so that students see their results as soon as grading completes. This containerized approach keeps each submission isolated while supporting hundreds of simultaneous users.

Beyond grading, the platform handles course management: user authentication based on enrollment status, role-based access control for students and staff, attendance tracking, extension management, and analytics on student progress. All course content is version-controlled and can be deployed across multiple semester configurations, supporting both current delivery and archival access to historical materials.

The Story

This project began in Fall 2020, when I set out to create a platform that would support the pedagogy I had envisioned for CS 128. The course was intentionally structured around daily practice – students would engage with coding activities embedded directly alongside content, ensuring they interacted with the material every weekday. Nathan Park and I worked together to build a system that could deliver this vision: one where students would not just read about concepts or watch lectures, but would immediately apply what they learned through hands-on coding exercises with auto-graded, immediate feedback. This was not an afterthought or enhancement; it was the core of how I believed the course should be taught. Our first real test came when CS 128 launched as a pilot under CS 199 128 in Spring 2021.

As we prepared for the pilot, the scope of work became clear: I needed to create an entire semester’s worth of instructional content from scratch – over 70 daily lessons, multiple machine problems (weekly mini-projects), and supporting instructional materials for a course that had never existed before. This reality necessitated that Nathan assume leadership of the technical development, and what he accomplished within a single semester was remarkable. He designed and implemented the majority of the web application using Ruby on Rails, creating a sophisticated content management system that allowed us to compose lessons from multiple page blocks – each capable of rendering different media types. More impressively, Nathan built our online “playground” for in-browser compilation, execution, and grading of C++ code. He architected this as a service-oriented system: an intermediary API in Node.js that authenticated requests and interfaced with MySQL, forwarding jobs to Core API services that provisioned Docker containers for each student’s code execution. The administrative capabilities he built rivaled commercial auto-graders like Mimir and Vocareum. While Nathan delivered all of this technical infrastructure, I focused on developing each piece of content that would guide students through their daily practice.

During the pilot, Adarsh Suresh joined our development team and rewrote the Intermediary as a containerized Flask service, bringing production-quality performance that would prove essential as we scaled. His implementation carefully validated each request against our database, created bash scripts to run student code against test suites, and aggregated results before returning them to students – all while handling hundreds of simultaneous users. As we prepared for CS 128 to join the official curriculum with substantially increased enrollment, we knew every component needed to function reliably at scale. Within that single year, we successfully scaled from zero to over 1000 students using the platform simultaneously each day. This growth trajectory confirmed our architectural decisions could withstand real-world demands, yet it also illuminated inefficiencies in our three-component grading architecture – the Rails app, intermediary, and grading nodes – that we would later address by integrating autograding directly into the application using Rails Active Jobs.

Julian Schiavo assumed primary development responsibilities after Nathan, revamping the Core grading service with real-time status updates, redesigning the front page for navigation, and developing staff-facing tools for accessing student submissions. Rohit Valmeekam contributed his UI/UX expertise to build core components of our frontend, redesigning the student-facing interface. At this point, my role had shifted from development to oversight; I focused on ensuring the platform met the reliability standards necessary for hundreds of simultaneous students.

Today, the project finds itself at another transition point. As the academic climate evolves and our talented student developers graduate and move on to their careers, the collaborative model that served us so well is naturally coming to an end. I find myself re-immersing in the platform’s technical development, preparing to maintain and advance the system independently in the years ahead.

Technical Architecture

The system is built on a Ruby on Rails foundation with PostgreSQL for data persistence and uses delayed job processing for background task management. The grading infrastructure leverages the Docker API to create isolated execution environments for student code, with custom Ruby-based grading images that provide consistent assessment across all submissions. The platform integrates Bootstrap 5 for responsive design, jQuery for interactive elements, and uses gems like Ace Editor for in-browser code editing, marked-rails for markdown processing, and various authentication libraries for secure access management.

Educational Impact

The CS 128 instructional platform was built on a simple premise: like learning to play a sport or a musical instrument, programming proficiency comes from consistent, focused repetition. Students need many chances to try, correct, and try again. The more students practice, the better they become. Our platform supports this by letting them author, compile, run, and receive feedback on code entirely within their web browser.

Programming exercises are integrated directly into each daily lesson so that students apply each concept immediately after it is introduced. These low-stakes activities prepare students for larger, summative assignments; the steady repetition, paired with immediate formative feedback, allows them to identify and correct misunderstandings early and refine their approach before the stakes are higher.