Course Development

Draft — the authoring API is being finalized; the shapes below are illustrative and may change before release.

The shape of a course

The entry point is init.lua:

course "do-you-think-you-can-git" {
    title = "Operation: Master Git",
    description = "A course that teaches git, one pushup at a time.",

    stage "add-and-commit" {
        instructions = [[
            Create `hello.txt` containing `hello world`, commit it,
            then push.
        ]],

        verify = function(bundle)
            local file = bundle:file("hello.txt")

            if file == nil then
                return fail("hello.txt is missing")
            end

            return pass("hello.txt committed!")
        end,
    },
}

Staying in character

Server-injected commits are authored in-character: scaffolding arrives from anton@… or luna@…, and pre-existing history belongs to Igor.

If your course follows the story, keep one incident-owner per stage.

Community courses are free-form — but if desired it is more than welcome to feature the characters who frequent the office.

Developing against the sandbox

The coursedev repository acts like both a teacher and a factory: push a Lua course to it and the server replies back with a course-link that you can use to test it.

git clone https://pushups.sh/coursedev.git
cd coursedev
# write init.lua, then:
git push                   # server validates and provisions a sandbox