diff --git a/README.md b/README.md
index f3bd6a84a1b53d375ae94800cad102071e68b6f7..cf20b87759707d13f365fc9838ea122afe9feb1f 100644
--- a/README.md
+++ b/README.md
@@ -158,6 +158,10 @@ If you want a library that gives you absolute control over everything, this is t
 but for most users, the API provided by nhooyr/websocket will fit better as it is nearly just
 as performant but much easier to use correctly and idiomatic.
 
+## Contributing
+
+Please see [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md).
+
 ## Users
 
 This is a list of companies or projects that use this library.
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
index 2d9104d16a1920f6ad72f8b88ba7b73be3d92bf0..57197ba1c7d84af02da13e3f29934415fefb2fc8 100644
--- a/docs/CONTRIBUTING.md
+++ b/docs/CONTRIBUTING.md
@@ -4,18 +4,23 @@
 
 Please be as descriptive as possible with your description.
 
+Reproducible examples are key to fixing bugs and strongly encouraged.
+
 ## Pull requests
 
-Please split up changes into several small descriptive commits.
+Good issues for first time contributors are marked as such. Please feel free to
+reach out for clarification on what needs to be done.
+
+Split up large changes into several small descriptive commits.
 
-Please capitalize the first word in the commit message title.
+Capitalize the first word in the commit message title.
 
 The commit message title should use the verb tense + phrase that completes the blank in
 
 > This change modifies websocket to \_\_\_\_\_\_\_\_\_
 
-Be sure to link to an existing issue if one exists. In general, try creating an issue
-before making a PR to get some discussion going and to make sure you do not spend time
+Be sure to link to an existing issue if one exists. In general, create an issue
+before a PR to get some discussion going and to make sure you do not spend time
 on a PR that may be rejected.
 
 You can run tests normally with `go test`.
@@ -25,10 +30,10 @@ In the future this dependency will be removed. See [#117](https://github.com/nho
 Please ensure CI passes for your changes. If necessary, you may run CI locally.
 The various steps are located in `ci/*.sh`.
 
-`ci/fmt.sh` requires node (specifically prettier).
-`ci/lint.sh` requires [shellcheck](https://github.com/koalaman/shellcheck#installing).
-`ci/test.sh` requires the [Autobahn Test suite pip package](https://github.com/crossbario/autobahn-testsuite).
-`ci/run.sh` runs everything in the above order and requires all of their dependencies.
+- `ci/fmt.sh` requires node (specifically prettier).
+- `ci/lint.sh` requires [shellcheck](https://github.com/koalaman/shellcheck#installing).
+- `ci/test.sh` requires the [Autobahn Test suite pip package](https://github.com/crossbario/autobahn-testsuite).
+- `ci/run.sh` runs everything in the above order and requires all of their dependencies.
 
 See [../ci/image/Dockerfile](../ci/image/Dockerfile) for the installation of the CI dependencies on Ubuntu.
 
diff --git a/docs/ISSUE_TEMPLATE.md b/docs/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000000000000000000000000000000000000..5f828acbd0d7af5f6100079d403c609972e4ece9
--- /dev/null
+++ b/docs/ISSUE_TEMPLATE.md
@@ -0,0 +1,2 @@
+<!-- Please read the contributing guidelines. -->
+<!-- https://github.com/nhooyr/websocket/blob/master/docs/CONTRIBUTING.md#pull-requests -->
diff --git a/docs/PULL_REQUEST_TEMPLATE.md b/docs/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000000000000000000000000000000000000..c58db085376e546330a5cdc929b02b7747a3b9fc
--- /dev/null
+++ b/docs/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,2 @@
+<!-- Please read the contributing guidelines. -->
+<!-- https://github.com/nhooyr/websocket/blob/master/docs/CONTRIBUTING.md#issues -->