# Contributing Guidelines to Open Rowing Monitor

Thank you for considering contributing to Open Rowing Monitor.

Please read the following sections in order to know how to ask questions and how to work on something. Open Rowing Monitor is a spare time project and by following these guidelines you help me to keep the time for managing this project reasonable.

## Code of Conduct

All contributors are expected to follow the [Code of Conduct](CODE_OF_CONDUCT.md). I want this to be a place where everyone feels comfortable. Please make sure you are welcoming and friendly to others.

## How can I contribute?

Keep an open mind! There are many ways for helpful contributions, like:

* Writing forum posts
* Helping people on the forum
* Submitting bug reports and feature requests
* Improving the documentation
* Submitting rower profiles / test recordings
* Writing code which can be incorporated into the project itself

### Report bugs and submit feature requests

Look for existing issues and pull requests if the problem or feature has already been reported. If you find an issue or pull request which is still open, add comments to it instead of opening a new one.

Make sure that you are running the latest version of Open Rowing Monitor before submitting a bug report.

If you report a bug, please include information that can help to investigate the issue further, such as:

* Rower Model and Setup
* Model of Raspberry Pi and version of operation system
* Relevant parts of log messages
* If possible, describe a [Minimal, Reproducible Example](https://stackoverflow.com/help/minimal-reproducible-example)

### Improving the Documentation

The documentation is an important part of Open Rowing Monitor. It is essential that it remains simple and accurate. If you have improvements or find errors, feel free to submit changes via Pull Requests or by filing a bug report or feature request.

### Contributing to the Code

Keep in mind that Open Rowing Monitor is a spare time project which I created to improve the performance of my rowing machine and to experiment with some concepts and technologies that I find interesting.

I intend to keep the code base clean and maintainable by following some standards. I only accept Pull Requests that:

* Fix bugs for existing functions
* Enhance the API or implementation of an existing function, configuration or documentation

If you want to contribute new features to the code, please first discuss the change you wish to make via issue, forum, email, or any other method with me before making a change. This will make sure that there is chance of it getting accepted before you spend time working on it.

#### Standards for Contributions

* Contributions should be as small as possible, preferably one new feature per contribution
* All code should use the [JavaScript Standard Style](https://standardjs.com), if you don't skip the included `git hooks` you should not need to worry about this
* All code should be thoroughly tested
* If possible there should be automated test for your contribution (see the `*.test.js` files; the project uses `uvu`)

#### Creating a Pull Request

Only open a Pull Request when your contribution is ready for a review. I you want to get feedback on a contribution that does not yet match all criteria for a Pull Request you can open a [Draft pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests).

* Please include a brief summary of the change, mentioning any issues that are fixed (or partially fixed) by this change
* Include relevant motivation and context
* Make sure that the PR only includes your intended changes by carefully reviewing the changes in the diff
* If possible / necessary, add tests and documentation to your contribution
* If possible, [sign your commits](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits)

I will review your contribution and respond as quickly as possible. Keep in mind that this is a spare time Open Source project, and it may take me some time to get back to you. Your patience is very much appreciated.

## Your First Contribution

Don't worry if you are new to contributing to an Open Source project. Here are a couple of tutorials that you might want to check out to get up to speed:

* [How to Contribute to an Open Source Project on GitHub](https://makeapullrequest.com)
* [First Timers Only](https://www.firsttimersonly.com)
