Making with Code is organized into courses, units, and modules. Courses are the highest-level container for content. They contain one or more units. Units are clusters of content organized around essential questions, providing materials to orchestrate student learning for 1-2 months. The general structure of a unit is a sequence of labs which introduce students to new ideas and skills, and then an open-ended project in which students use those ideas to build personally-meaningful projects. Modules are chunks of content related to a unit, including labs, reference documents, projects, and potentially other kinds of content.

Making with Code does not model lessons (what should be done within a single class meeting); there's just too much uncertainty around how long something will take, or whether a particular section of a class doesn't meet on a particular day. Furthermore, lessons are usually modeled by a school's learning management system, so modeling them in Making with Code is a duplication of effort.

Content types

The following content types are implemented. For each, ensure that type: contenttype is in the page's front matter.


Courses should have a git_backend param specified in their front matter (under the extra section), indicating which backend git service the course will use. This affects the behavior of the MWC CLI. The only currently-supported option is github; github_org (student repos created under a GitHub organization) will be developed next. This feature leaves the system extensible to avoid vendor lock-in.


Subdirectories containing modules (checkups, labs, and resources in the example below) should have the following front matter, specifying that their contents should be included in the JSON export and that there should be no section page.

title = "Labs"
weight = 10
render = false
sort_by = "weight"
type = "modules"

Modules may have params repo_url and init_action (clone, create_from_template, mkdir). If included, these will be used by the MWC CLI to initialize student repos corresponding to each module.

File structure

Here is an example file structure showing the various content types.

└── courses
   └── mwc1
       └── unit00 
           ├── mini-lessons
           │   ├── (type = "modules")
           │   ├── loops
           │   │   └── 
           ├── labs
           │   ├── 
           │   ├── lab1_terminal
           │   │   └── 
           ├── resources
           │   └── 

JSON Manifest

A JSON representation of the site's courses, units, and modules is available at /index.json. Because Zola does not support building the json file type, the manifest is built at /manifest.html. A post-processing step renames this file /index.json.