Structure
Courses, units, and modules
Making with Code (MWC) is organized into courses, units, and modules. A course contains the curricular content a teacher and students would use for one or two semesters. Courses contain one or more units; each unit is a cluster of content organized around essential questions, providing materials to guide student learning for 1-2 months. Units start with a sequence of labs which introduce students to new ideas and skills, leading to an open-ended project in which students use those ideas to build personally-meaningful projects. Sometimes units also contain problem sets, which are designed for students to complete independently. We refer to labs, problem sets, and projects as modules.
The structure of the MWC website mirrors this pedagogical structure: courses
are sections under
site/content/courses, units are sections with a course, and modules are sections within
a unit. Each section may also contain additional pages and assets such as images.
The site's file tree looks like this:
site/content/courses
├── _index.md
├── mwc1
│ ├── _index.md
│ ├── unit1
│ │ ├── _index.md
│ │ ├── lab_turtle
│ │ │ ├── _index.md
│ │ │ └── compare_terminal_finder.png
│ │ ├── project_drawing
│ │ │ └── _index.md
│ ├── unit2
│ │ ├── _index.md
│ │ ├── lab_pipes
│ │ │ └── _index.md
│ │ ├── lab_weather
│ │ │ ├── _index.md
│ │ │ └── weather_functions.png
Metadata
In Zola, each section or page has front matter specifying metadata. In the MWC site, each course, unit, and module has some required metadata.
Course
+++
title = "Making With Code I"
[extra]
course = true
slug = "mwc1"
git_backend = "mwc"
+++
extra.course: Should betruefor every course.extra.slug: A short string consisting of lower-case letters, numbers, hyphens, and underscores. Slugs are used to create URL paths (for example, https://makingwithcode.org/courses/mwc1/unit1/lab_turtle and to create course/unit/module directories on students' computers.extra.git_backend: Specifies which git-hosting service the course will use. The MWC accounts server automatically administers the git backend, creating a repository for each user for each module, and granting teachers permissions to access students' repositories. Currently, the only supported git backend is"mwc", which is hosted at https://git.makingwithcode.org.
Unit
+++
title = "Unit 1: Drawing"
[extra]
unit = true
slug = "unit1"
+++
extra.unit: Should be true for every unit.extra.slug: Works the same way as a course slug.
Module
+++
title = "Turtle"
template = "module.html"
[extra]
slug = "lab_turtle"
repo_url = "https://git.makingwithcode.org/mwc/lab_turtle.git"
+++
template: Should be"module.html". The MWC theme adds some styling to modules.extra.slug: Same as above.extra.repo_url: The URL for the module's template repository, from which students' repositories will be forked.
Standards
MWC modules can be aligned to various state- and national-level standards for K12 computer science education. MWC is currently aligned with New York's Computer Science and Digital Fluency Standards and the 2026 CSTA PK-12 Computer Science Standards (High School Foundational tier).
Showing the standards
Each standards set gets its own alignment page under /teaching/curriculum/standards/,
rendered with the standards.html template. (For example, here is the alignment with
New York's CS&DF standards.) Coverage is
aggregated across MWC1 and MWC2 together -- the two courses are meant to jointly cover
a standards set, not each on its own -- so there's exactly one alignment page per
standards set, not one per course.
- Set
template = "standards.html"on the page. - Set
extra.standardsto the name of the standards to show, something like "nycsdf". This is used to look up the csv file listing the standards, as well as the standards-alignment of each module. - Set
extra.coursesto a list of course slugs to aggregate coverage across, e.g.["mwc1", "mwc2"]. static/standards/{standards}.csvshould list the standards, with the following columns:- concept
- subconcept
- identifier
- standard
Aligning modules with standards
MWC modules are aligned with standards in their metadata.
Individual module pages should have extra.standards[standards]
assigned to a list of identifiers. For example, if a module is aligned
with the first standard in New York's CS&DF standards, the module's metadata
could look like:
extra.standards.nycsdf = ["9-12.IC.1"]
A module can be aligned with multiple standards.
Schedule
You can display a course schedule or calendar using the schedule.html template.
The schedule orders units and modules according to their weight; the number of
lessons allocated to each module can be assigned using extra.duration, defaulting
to 1.