Table of Contents

About Coursage

Coursage is a static site generator designed for course web sites in education settings. Its job is to:

  • host and organize course materials (such as readings and instructions),
  • share assignment due dates,
  • help students keep track of what they should be working on, both now and in the future,
  • link code-based assignments to their starter repositories (currently supporting GitHub Classroom),
  • build a glossary of course terminology linked back to relevant documents,
  • host / link to related resources, and
  • highlight upcoming events from public calendars hosted elsewhere (currently supporting GCal).

Here is an example of a Coursage site.

Because it builds static, non-interactive, and (typically) public sites, there are several things Coursage intentionally does not do:

  • It does not track any student info.
  • It does not collect assignment submissions.
  • It does not record, compute, or report grades.

Those jobs are all better handled by an LMS such as Moodle or Canvas.

Coursage is opinionated about web site structure. It does not offer highly customizable site style or navigation, and assumes a very specific data structure. If you need a more open-ended tool for building a web site, consider a general-purpose static site generator.

Coursage does not require programming knowledge (including CSS). A little familiarity with HTML may be helpful for advanced formatting, but is not necessary. It does however assume comfort working with text formats like Markdown and YAML; it does not offer a point-and-click editor. If this is a barrier, consider using a site builder like Wordpress.

  • Dual audiences: Coursage serves two different userbases through two different user interfaces:

    input data structure → tailored to instructors / content authors
    generated web site → tailored to students
  • Structured input data: Unlike a set of manually authored web pages, Coursage sites are data-driven. Due dates and document titles appear in exactly one location in the input data, even when they appear in multiple places in the output site. Assignment dates are computed from a logical timeline; the only absolute calendar dates that appear in the course data file are the semester’s academic calendar (semester start/end and breaks).

  • Versioning: Course content and configuration live in human-readable and human-editable files suitable for version control. The user interface for content authoring is a text editor; there is no Wordpress-like content database or web-based admin interface.

  • Semantic markup: Document styling specifies the role of text rather than its appearance (e.g. “this text is highlighted” instead of “this text has a yellow background”). This helps styling remain consistent across the site, makes style changes easier, facilities responsive rendering, and allows for data extraction from documents (e.g. to assemble the glossary).

  • Responsive design: The generated web site is both desktop- and mobile-friendly. It honors browser/OS preferences for light/dark mode and high contrast mode.

  • Accessibility: The web site strives to work well with screen readers, and to mindfully adopt WCAG 2 recommendations (include contrast recommendations when the OS/browser specifies high-contrast mode). It uses a high-legibility font, employs semantic HTML5, and sticks to simple link- and document-based navigation.

  • Compatibility: The web site hews to standards, minimizes JavaScript trickery, and works across a wide range of browsers. We’ve tested with (and people making updates should also test with) Safari, Chromium, and Firefox across macOS, iOS, Linux, and Windows.

Coursage is a mad science project of Paul Cantrell, who originally wrote it in 2025 to support COMP 127 at Macalester College.

“Course” + “static site generator” = “Course” + “SSG” = Coursage

Paul pronounces it like “corsage” (/kɔɹˈsɑʒ/), but encourages you to pronounce it however you like.

Thanks to Dan Drake for the name suggestion — and for being the first person to use it who didn’t write it! Dan jumped in before there were even docs, and was immensely helpful in building out and testing Coursage in its very first semester of use in a real class.