-
Notifications
You must be signed in to change notification settings - Fork 1
Contributing
Wouter Meetsma edited this page Jun 20, 2026
·
2 revisions
Thank you for wanting to improve Rubric Maker. This page covers the workflow for contributing code, translations, and bug reports.
- Fork the repository on GitHub.
-
Clone your fork locally:
git clone git@github.com:<your-username>/RubricMaker.git cd RubricMaker
-
Install dependencies:
npm install
-
Create a feature branch from
main:git checkout -b feat/my-feature
- Make your changes.
-
Verify everything passes:
npm run typecheck npm run lint npm run test -
Push your branch and open a pull request against
main.
Use a short prefix that describes the type of change:
| Prefix | Use for |
|---|---|
feat/ |
New features |
fix/ |
Bug fixes |
docs/ |
Documentation changes |
refactor/ |
Code changes with no behaviour change |
test/ |
Adding or fixing tests |
chore/ |
Build, CI, dependency updates |
Example: feat/voice-grading-nl or fix/export-pdf-unicode.
- One pull request per feature or fix. Keep PRs focused — reviewers can't give useful feedback on large, mixed changesets.
- Write a clear description explaining what changed and why.
-
All CI checks must pass before a PR can be merged:
- Type-check (
npm run typecheck) - Lint (
npm run lint) - Tests with coverage (
npm run coverage)
- Type-check (
- If your change affects the UI, include a screenshot or short screen recording in the PR description.
- If your change adds a user-facing string, add the translation key to all five locale files:
en.json,nl.json,fr.json,de.json,es.json.
- Co-locate tests with their source file in a
__tests__/subdirectory. - Use
src/test-utils/renderWithProviders.tsxfor components that need React Context. - Test behaviour, not implementation. Check what the user sees and does, not internal state.
- Mock only what you must (browser APIs, external services). Prefer testing against real implementations where possible.
- All code is TypeScript. Avoid
any— use proper types or generics. - No default
export defaultfor utilities — named exports only so IDE auto-import works reliably. - Keep components under ~300 lines. If a component grows beyond that, consider splitting out sub-components.
- No CSS-in-JS library. Use inline
styleprops referencing the existing global CSS custom properties (--accent,--text,--bg-elevated, etc.) so theming and dark/light mode keep working. - No comments explaining what the code does — only comments explaining why something non-obvious is done.
See Internationalisation for a step-by-step guide to adding a new language or editing existing translations.
If you spot a missing or incorrect translation in any of the five locales, you can fix it directly in the corresponding src/locales/*.json file and open a PR — no code changes needed.
Open an issue on GitHub with:
- A clear title describing the problem.
- Steps to reproduce.
- What you expected to happen.
- What actually happened (screenshots help).
- Browser and OS version.
Open an issue with the enhancement label. Describe the use case first (the why), then the proposed solution. Feature requests with a clear educator use case are more likely to be accepted.