Thanks for taking the time to contribute! Whether it's fixing a typo, tweaking copy, or reworking a layout, contributions are very welcome. This guide covers the workflow.
- Found a bug or have an idea? Open an issue first. For anything beyond a small fix, please discuss it in an issue before writing code — it saves everyone time.
- Check the open issues to see if someone's already on it.
You need Hugo extended (≥ 0.162). On macOS:
brew install hugo.
hugo server # live reload at http://localhost:1313Most landing-page copy lives in data/content.yaml — edit text there,
not in the templates. See the README for the full file map.
-
Fork the repo and create a branch off
main. -
Make your change. Keep it focused — one logical change per PR.
-
Run the same two checks CI does (no server, no network):
hugo --gc --minify --panicOnWarning --baseURL "http://localhost/" # strict build htmltest # link/anchor/image check
-
Update the README or other docs for any user-facing change.
CI also runs Prettier + markdownlint (npm run lint) and a spell check. Run the spell check
locally with pipx run codespell . — domain jargon (XMR, monerod, PPLNS, Tari, …) is allow-listed
in .codespell-ignore; add new terms there if a real word is flagged.
CI runs gitleaks over the full history on every push and PR, so an accidentally committed token or credential blocks the merge. Catch it locally first by installing the pre-commit hook (it runs the same pinned gitleaks on staged changes):
pipx install pre-commit # or: pip install pre-commit
pre-commit install- Target the
mainbranch and fill out the PR template. - Link the issue your PR addresses (e.g.
Closes #123). - Make sure both checks above pass — CI will run the same ones.
- PRs require review before merging.
By contributing, you agree that your contributions are licensed under the project's MIT License. Thanks again! 🙌