diff --git a/.codecov.yml b/.codecov.yml
index 04dd651..5a94096 100644
--- a/.codecov.yml
+++ b/.codecov.yml
@@ -1,34 +1,14 @@
-# codecov can find this file anywhere in the repo, so we don't need to clutter
-# the root folder.
-#comment: false
-
-codecov:
-  notify:
-    require_ci_to_pass: no
-
 coverage:
   status:
-    patch:
+    project:  # more options at https://docs.codecov.com/docs/commit-status
       default:
-        target: '70'
-        if_no_uploads: error
-        if_not_found: success
-        if_ci_failed: failure
-    project:
-      default: false
-      library:
-        target: auto
-        if_no_uploads: error
-        if_not_found: success
-        if_ci_failed: error
-        paths: '!*/tests/.*'
-
-      tests:
-        target: 97.9%
-        paths: '*/tests/.*'
-        if_not_found: success
-
-flags:
-  tests:
-    paths:
-      - tests/
+        target: auto # use the coverage from the base commit, fail if coverage is lower
+        threshold: 0%  # allow the coverage to drop by
+
+comment:
+  layout: " diff, flags, files"
+  behavior: default
+  require_changes: false
+  require_base: false  # [true :: must have a base report to post]
+  require_head: false  # [true :: must have a head report to post]
+  hide_project_coverage: false # [true :: only show coverage on the git diff aka patch coverage]
diff --git a/.codespell/ignore_lines.txt b/.codespell/ignore_lines.txt
new file mode 100644
index 0000000..07fa7c8
--- /dev/null
+++ b/.codespell/ignore_lines.txt
@@ -0,0 +1,2 @@
+;; Please include filenames and explanations for each ignored line.
+;; See https://docs.openverse.org/meta/codespell.html for docs.
diff --git a/.codespell/ignore_words.txt b/.codespell/ignore_words.txt
new file mode 100644
index 0000000..9757d7c
--- /dev/null
+++ b/.codespell/ignore_words.txt
@@ -0,0 +1,11 @@
+;; Please include explanations for each ignored word (lowercase).
+;; See https://docs.openverse.org/meta/codespell.html for docs.
+
+;; abbreviation for "materials" often used in a journal title
+mater
+
+;; alternative use of socioeconomic
+socio-economic
+
+;; Frobenius norm used in np.linalg.norm
+fro
diff --git a/.coveragerc b/.coveragerc
deleted file mode 100644
index 34ea3e4..0000000
--- a/.coveragerc
+++ /dev/null
@@ -1,13 +0,0 @@
-[run]
-source =
-    diffpy.structure
-[report]
-omit =
-    */python?.?/*
-    */site-packages/nose/*
-    # ignore _version.py and versioneer.py
-    .*version.*
-    *_version.py
-
-exclude_lines =
-    if __name__ == '__main__':
diff --git a/.github/ISSUE_TEMPLATE/release_checklist.md b/.github/ISSUE_TEMPLATE/release_checklist.md
index a87a44a..b96c782 100644
--- a/.github/ISSUE_TEMPLATE/release_checklist.md
+++ b/.github/ISSUE_TEMPLATE/release_checklist.md
@@ -13,10 +13,16 @@ assignees: ""
 - [ ] License information is verified as correct. If you are unsure, please comment below.
 - [ ] Locally rendered documentation contains all appropriate pages, including API references (check no modules are
   missing), tutorials, and other human written text is up-to-date with any changes in the code.
-- [ ] Installation instructions in the README, documentation and on the website (e.g., diffpy.org) are updated and
-  tested
-- [ ] Successfully run any tutorial examples or do functional testing in some other way.
+- [ ] Installation instructions in the README, documentation and on the website (e.g., diffpy.org) updated.
+- [ ] Successfully run any tutorial examples or do functional testing with the latest Python version
 - [ ] Grammar and writing quality have been checked (no typos).
 
 Please mention @sbillinge when you are ready for release. Include any additional comments necessary, such as
-version information and details about the pre-release.
+version information and details about the pre-release here:
+
+### Post-release checklist
+
+Before closing this issue, please complete the following:
+
+- [ ]  Run tutorial examples and conduct functional testing using the installation guide in the README.
+- [ ]  Documentation (README, tutorials, API references, and websites) is deployed without broken links or missing figures.
diff --git a/.github/workflows/build-wheel-release-upload.yml b/.github/workflows/build-wheel-release-upload.yml
index 9eb2416..c89ca95 100644
--- a/.github/workflows/build-wheel-release-upload.yml
+++ b/.github/workflows/build-wheel-release-upload.yml
@@ -1,4 +1,4 @@
-name: Release (GitHub/PyPI)
+name: Release (GitHub/PyPI) and Deploy Docs
 
 on:
   workflow_dispatch:
diff --git a/.github/workflows/publish-docs-on-release.yml b/.github/workflows/publish-docs-on-release.yml
deleted file mode 100644
index 1c5981d..0000000
--- a/.github/workflows/publish-docs-on-release.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-name: Build and Deploy Docs
-
-on:
-  release:
-    types:
-      - published
-  workflow_dispatch:
-
-jobs:
-  docs:
-    uses: Billingegroup/release-scripts/.github/workflows/_publish-docs-on-release.yml@v0
-    with:
-      project: diffpy.structure
-      c_extension: false
diff --git a/.github/workflows/tests-on-pr.yml b/.github/workflows/tests-on-pr.yml
index 614b16f..1dd2ee1 100644
--- a/.github/workflows/tests-on-pr.yml
+++ b/.github/workflows/tests-on-pr.yml
@@ -14,3 +14,5 @@ jobs:
       project: diffpy.structure
       c_extension: false
       headless: false
+    secrets:
+      CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
diff --git a/news/codecov.rst b/news/codecov.rst
new file mode 100644
index 0000000..1c91077
--- /dev/null
+++ b/news/codecov.rst
@@ -0,0 +1,24 @@
+**Added:**
+
+* Spelling check via Codespell in pre-commit
+* Coverage report in each PR
+
+**Changed:**
+
+* <news item>
+
+**Deprecated:**
+
+* <news item>
+
+**Removed:**
+
+* <news item>
+
+**Fixed:**
+
+* <news item>
+
+**Security:**
+
+* <news item>