Contributing

The project accepts contributions of code, translations, content and reports. Here is how, from the most useful to the most involved.

Reporting a defect

A well-written issue is worth more than a patch written without context. Say:

Accessibility defects carry the accessibility label and are treated as blocking.

Translating

The twelve languages live in frontend/js/locales/. A translation contribution must:

Writing content

There is a demonstration catalogue (backend/app/demo_content.py and the associated data). A content contribution must be true, sourced when the subject calls for it, and short: a demo page exists to show the product, not to teach a field.

Proposing code

  1. Open an issue to discuss the intent, especially for a new feature.
  2. Fork the repository and create a branch with an explicit name.
  3. Write the code and the tests; style follows pyproject.toml (ruff) for Python.
  4. Check locally: pytest -m "not e2e", ruff check backend tests, shellcheck.
  5. Open a pull request; continuous integration requires lint, unit tests, end-to-end tests and the accessibility check.
  6. Sign the CLA (see CLA.md) — it lets the project distribute your contribution under AGPL-3.0-only without taking your copyright away.

What we turn down

Trademark terms

The code is free; the OpenLearn name and the demonstration instance are not granted with the licence. A derived deployment must use another name and must not present itself as the official instance. See TRADEMARK.md in the repository.

Contact

developper@openlearnproject.org for anything that cannot go through GitHub (personal data, licensing question, sensitive report).