paint-brush
Building a Better Experience for Courseware Managementby@kl13nt
138 reads

Building a Better Experience for Courseware Management

by Nabil Tharwat January 30th, 2023
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow

Too Long; Didn't Read

Courseware as Code (CaC for short) is a revolutionary approach to designing, creating, andmaintaining course content and all related assets. CaC Action is a project that I created with onegoal in mind: Bringing a better experience to courseware management to theworld. It works by transforming a course repository of nothing but markdown files into a fully working and deployed GitHub Pages website.
featured image - Building a Better Experience for Courseware Management
Nabil Tharwat  HackerNoon profile picture


Courseware as Code (CaC for short) is a revolutionary approach to designing, creating, and maintaining course content and all related assets. It leverages aspects of the software development lifecycle to facilitate discussions of suggested changes among faculty in a rapid environment, enables custom workflows based on the complexity of course content, and allows faculty, students, and workforce members to identify issues and contribute Content."

Introducing CaC Action

CaC Action is a project that I created with one goal in mind: Bringing a better experience to courseware management to the world. It works by transforming a course repository of nothing but markdown files into a fully working and deployed GitHub Pages website without any interaction from courseware maintainers.


The project consists of 3 repositories, including a GitHub Action that executes the build, a NextJS template used to statically generate the website, and an example repo that anyone can "Use this template" on and get started using CaC Action right away!

Motivation

The idea stood out to me when I was applying during the Google Summer of Code 2021 round. I had come across a GitLab Education Program called Courseware as Code and GitLab. The project idea instantly caught my attention because I struggled heavily with the course content I was provided during my student years.


As I wrote in 2021:


I'm tired of having to deal with outdated knowledge in the courses I'm enrolled in. I'm tired of having no way of contributing to the course I'm taking, nor a choice in how content is presented to me.


This prompted me to create a project that provides a number of values for everyone involved.

Values

I designed this project how I envisioned it 2 years ago. Transparency, humbleness, appreciating collaboration, and support are the pillars of my vision with this project.


  • Transparency in admitting your mistakes as a course maintainer and letting the history of your changes be visible to the world.
  • Humbleness in accepting that you can make mistakes, and in accepting help and contribution from students who may be decades younger than you and ages less experienced than you.
  • Appreciating collaboration in showing how grateful you are that maintainers and students are putting in the effort to improve the courseware, and in providing a healthy environment for collaboration between maintainers and students alike.
  • Support in providing the help needed in order for others to contribute comfortably to courses you maintain, and in creating a community of respect. This meant the world to me and I'm sure millions of other students as well.

How it Works

how it works graph

The action works by transforming Markdown documents through the Unified pipeline, downloading a NextJS template to build static HTML content from the Markdown collections in the repo. It then deploys the output of the SSG to GitHub Pages. The Unified pipeline includes support for LaTeX equations and code highlighting using HighlightJS.


Why not just a template repo with NextJS and everything else in one repo? Because I wanted to make the source repo for course content as friendly as possible. I didn't want a student or instructor to be pushed away by a complicated repository with tons of config files and source TypeScript modules.


I also wanted this project to be as customizable as possible. Having the action the way it is allows me to extend it later to allow for custom NextJS templates, a completely different workflow, etc.


This decision allowed me to keep my assumptions slim to none and therefore have an easily customisable solution. This is a raw attempt and is not the best way something like this could be built, but it's a positive step towards my vision.

Where Can I Try It?

You can explore the source code and all the documentation on the repository. I welcome your feedback with a warm smile. If you're a student wishing to try this project out do tell your instructors! You can create a repo from the template example to try things out.


Ping me on Twitter, Facebook, and Discord to tell me how it goes!