All projects

Module Studio

A free, open library of short interactive lessons that teachers can open, share with a class and adjust.

Status
In progress
Year
2026
Kind
personal project
Built with
  • TypeScript
  • React
  • Vite
  • JSON Schema
  • Python
  • Cloudflare Pages
  • Cloudflare D1
  • Cloudflare Turnstile
  • GitHub Actions
  • Vitest
  • axe-core

What it is

Module Studio is an open and free resource for teachers to use and adjust. My vision was to create fun interactive material for kids, and it is my latest project, one I am continuing to work on.

Its site is the lesson library: a catalog of short interactive lessons, 196 of them for third grade in October 2026, across English language arts, math, science and social studies. A teacher can open a lesson, share it to a class, or adjust it in the built-in editor. Each lesson keeps its adjusted versions, such as "Extra support", attached to the original.

How it's built

The code is a TypeScript workspace in three parts: a shared package that defines the lesson format (types, a JSON Schema, validation, scoring and the rules for versions), a React player that runs a lesson, and a React and Vite site with the catalog, the lesson pages and the editor.

A lesson holds no image files: a bar graph, number line, clock or array is data that the player draws, and the description a screen reader reads is written from the same numbers.

The site is hosted on Cloudflare Pages. Server endpoints turn a version submitted from the editor into a pull request, and a reader's feedback into an issue. There are no accounts: a contributor passes one human check, and request counts are kept in a Cloudflare D1 database.

Worth noting

  • Versions have rules the build enforces. A version attaches to an original lesson, never to another version, and stays in the same unit. Its license may be stricter than the original's but never looser. The lesson page lists exactly what is different by matching activity ids, so unchanged activities keep theirs.
  • Each lesson says where it came from. Its page shows whether the first draft was written by AI and whether a teacher has checked that exact version. A version sent in through the site, or a lesson revised from feedback, loses the check.
  • A person decides on every contributed version. Contributed versions and feedback are set up to get an AI review against the project's written lesson rules. Fixed rules, not the reviewer, work out the verdict, and the maintainer approves or declines each one.
  • Pages are measured, not eyeballed. A design check opens a page in a hidden browser at 1366 and 320 pixels wide, runs the axe accessibility checker, measures text size, line length, tap targets and contrast, and walks the page with the Tab key. Every pull request runs it on the lessons that changed.
  • A student's answers are not stored or sent. A student sees a score on screen, and nothing is stored or sent to a teacher.