# Contributing to Kelp

Want to help grow and improve Kelp? Awesome! ❤️

0. [Code of Conduct](#code-of-conduct)
0. [v0 Beta](#v0-beta)
0. [Roadmap & Issues](#roadmap--issues)
0. [Code Standards](#code-standards)
0. [Pull Request Process](#pull-request-process)
0. [Writing Tests](#writing-tests)
0. [Templates](#templates)
0. [Contributor License Agreement](#contributor-license-agreement)


## Code of Conduct

This project and everyone participating in it are governed by the [Code of Conduct](https://github.com/cferdinandi/kelp/blob/main/CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. 


## v0 Beta

Right now, Kelp is beta and I'm still defining the shape of it. 

The best way you can help is by testing it, breaking things, and [opening issues](https://github.com/cferdinandi/kelp/issues) when you encounter bugs. If you have feature requests, please open an issue for those, too!


## Roadmap & Issues

Project management happens in [GitHub issues](https://github.com/cferdinandi/kelp/issues), and relies heavily on tags.

Here are some quick links to filter by category...

- [Roadmap features](https://github.com/cferdinandi/kelp/issues?q=is%3Aissue%20state%3Aopen%20label%3Aenhancement%20label%3Aroadmap)
- [Roadmap features in active development](https://github.com/cferdinandi/kelp/issues?q=is%3Aissue%20state%3Aopen%20label%3Aenhancement%20label%3Aroadmap%20label%3A%22in%20progress%22)
- [Backlog features](https://github.com/cferdinandi/kelp/issues?q=is%3Aissue%20state%3Aopen%20label%3Aenhancement%20-label%3Aroadmap)
- [Bugs and issues](https://github.com/cferdinandi/kelp/issues?q=is%3Aissue%20state%3Aopen%20label%3Abug)
- [Dev ops improvements](https://github.com/cferdinandi/kelp/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22dev%20ops%22)
- [Documentation improvements](https://github.com/cferdinandi/kelp/issues?q=is%3Aissue%20state%3Aopen%20label%3Adocumentation)


## Code Standards

The biggest things to keep in mind...

- Tabs, not spaces
- Document as needed
- Keep files small and modular

The rest you can probably pick up from looking at the existing code base or running `npm run lint` to run [Biome](https://biomejs.dev), the linter and code formatter for this project.

It will yell at you if you did something wrong, and offer suggestions on how to fix it.


## Pull Request Process

Before creating a PR, it's a good idea to...

- Comment on an existing issue asking if help is need and verify work isn't already in progress, or
- Create an issue and get feedback.

You don't _have_ to do either of these things, but it can prevent wasted or duplicated work.

**Optional nice-to-haves..**

- Written documentation on what was changed, why, and how it works
- In-code documentation (wherever needed)
- Tests for new components/features
- Linting to ensure style guidelines were followed
- Demo code

If you're missing any or all of these, no worries! I'll take care of it. But if you're able to do any of that work, it's immensely helpful.


## Writing Tests

Tests for interactive Kelp components can be found in the `/tests` directory, and use [Playwright](https://playwright.dev).

Because it's a UI library, Kelp tests use a real HTML file in addition to a test spec.

**[Testing Docs &rarr;](https://github.com/cferdinandi/kelp/blob/main/README.md#tests)**


## Contributor License Agreement

Please note that any Pull Requests must agree to the _Kelp Contributor License Agreement_ below in order to be merged into the project. 

This allows me to dual license PRs under the Kelp Commons and Kelp Pro/Enterprise licenses. I'm unable to accept PRs that don't agree to the contributor license.

Thanks!

> I give Chris Ferdinandi and Go Make Things, LLC permission to license my contributions on any terms they like. I am giving them this license in order to make it possible for them to accept my contributions into their project.
> 
> **_As far as the law allows, my contributions come as is, without any warranty or condition, and I will not be liable to anyone for any damages related to this software or this license, under any kind of legal claim._**
