← All courses

How to Participate

Report problems, improve existing courses, or write a new one.

Ways to help

Writing a new course

  1. Create <name>/source/ with meta.csv, units.csv, cards.csv, and any images/audio they reference.
  2. Read AUTHORING.md for this project's content guidelines — deck structure, card-type variety, how many practice cards per concept, and more.
  3. Add a cover image and a meta.json — see README.md for every field.
  4. Run the validator: python validate_course.py <name> --source — it catches dangling references, missing media, unknown card types, and more before you open a PR.
  5. Build the zip: python build_course_zip.py <name>, then open a pull request.

The validate-courses GitHub Action runs the same checks automatically on every PR.

License

Course content in this repo is licensed under PolyForm Noncommercial 1.0.0. If you're contributing a course built from a source with its own license, say so in that course's own folder rather than assuming.