Table of Contents

Data Structure Overview

Course data consists of the following:

  • Configuration: metadata about the course as a whole, such as the course title and start date.
  • Timeline: a course plan that lists what happens on each day of class, when assignments are assigned, and when they are due. The timeline only specifies the sequence of days; it contains no dates.
  • Documents: the course materials, consisting of
    • assignments, which are associated with specific dates, and
    • resources, which are for general linking and are not situated in time.

Data for all the above lives in the src/data directory of a specific Coursage project, and follows the Superfluous data processing rules (documentation for that pending, sorry). Those rules in brief:

  • Structured input data can appear in either JSON or YAML files.
  • Formatted documents use a special dialect of Markdown.
  • All the input files get merged into one big data tree.
  • The following are all equivalent in the resulting tree:
    • subdirectories
    • nested JSON/YAML structure
    • filename components separated by dots
  • Filenames that start with an underscore do not create a new tree level; instead, their contents get merged into the file’s parent. This allows content authors to split data into separate files for organizational purposes without altering the resulting data structure.
README.md
superfluous.json
Gemfile
Gemfile.lock
bin/dev

Standard project files


src/
 └─╴data/
    │
    │
    ├─╴course_info.yaml
    ├─╴academic_calendar.yaml
    ├─╴links.yaml
    ├─╴archive_blurb.md
    │
    │
    ├─╴timeline.yaml
    │
    │
    ├─╴assignment_types.yaml
    │
    │
    ├─╴assignments/
    │  │
    │  ├─╴activities/
    │  │  │

Assignments (grouped by type)

    │  │  │
    │  │  ├─╴inkblot.md
    │  │  │

Single-file document

    │  │  │
    │  │  ├─╴critters/
    │  │  │  ├─╴_critters.md
    │  │  │  └─╴images/
    │  │  │     ├─╴critters.png
    │  │  │     └─╴doodads.svg
    │  │  │

Document with images

    │  │  │
    │  │  └─╴abstraction/
    │  │     ├─╴_abstraction.md
    │  │     └─╴sections/
    │  │        ├─╴part1.md
    │  │        ├─╴part2.md
    │  │        └─╴part3.md
    │  │

Document with subsections

    │  │
    │  ├─╴hw/
    │  │  ├─╴hw0.md
    │  │  └─╴breakout/
    │  │     ├─╴_breakout.md
    │  │     └─╴images/
    │  │        ├─╴corners.svg
    │  │        └─╴gameplay.png
    │  │
    │  ├─╴readings/
    │  │  ├─╴apis.md
    │  │  ├─╴arrays.md
    │  │  └─╴class_anatomy.md
    │  │
    │  ├─╴tasks/
    │  │  ├─╴installfest.yaml
    │  │  ├─╴join_slack.yaml
    │  │  └─╴mscs_events.md
    │  │

More assignments of other types

    │  │
    │  └─╴github_classroom_urls.yaml
    │
    │
    ├─╴resources/
    │  ├─╴syllabus.pdf
    │  ├─╴hw-procedure.md
    │  └─╴some-reading.md
    │
    │
    └─╴calendars/
       ├─╴categories.yaml
       └─╴sources/
          ├─╴comp127.json
          ├─╴devgarden.json
          └─╴mscs.json