diff --git a/.Rbuildignore b/.Rbuildignore
index c9f2bcf2b..5164b2a4d 100644
--- a/.Rbuildignore
+++ b/.Rbuildignore
@@ -41,3 +41,6 @@ SECURITY.md
 ^test_full_example$
 coverage.*
 ^pkgdown$
+^.revdeprefs\.yaml$
+^revdep$
+^\.covrignore$
diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml
index 7951841a8..1b251b8d6 100644
--- a/.github/workflows/check.yaml
+++ b/.github/workflows/check.yaml
@@ -40,6 +40,27 @@ jobs:
         checking top-level files .* NOTE
       unit-test-report-brand: >-
         https://raw.githubusercontent.com/insightsengineering/hex-stickers/main/thumbs/teal.png
+  r-cmd-non-cran:
+    name: R CMD Check (non-CRAN) 🧬
+    uses: insightsengineering/r.pkg.template/.github/workflows/build-check-install.yaml@main
+    secrets:
+      REPO_GITHUB_TOKEN: ${{ secrets.REPO_GITHUB_TOKEN }}
+    with:
+      enforce-note-blocklist: true
+      publish-unit-test-report-gh-pages: false
+      junit-xml-comparison: false
+      concurrency-group: non-cran
+      disable-unit-test-reports: true
+      skip-r-cmd-install: true
+      note-blocklist: |
+        checking dependencies in R code .* NOTE
+        checking R code for possible problems .* NOTE
+        checking examples .* NOTE
+        checking Rd line widths .* NOTE
+        checking S3 generic/method consistency .* NOTE
+        checking Rd .usage sections .* NOTE
+        checking for unstated dependencies in vignettes .* NOTE
+        checking top-level files .* NOTE
   coverage:
     name: Coverage 📔
     uses: insightsengineering/r.pkg.template/.github/workflows/test-coverage.yaml@main
@@ -86,6 +107,8 @@ jobs:
     uses: insightsengineering/r.pkg.template/.github/workflows/style.yaml@main
     with:
       auto-update: true
+    secrets:
+      REPO_GITHUB_TOKEN: ${{ secrets.REPO_GITHUB_TOKEN }}
   grammar:
     if: github.event_name != 'push'
     name: Grammar Check 🔤
diff --git a/.github/workflows/cla.yaml b/.github/workflows/cla.yaml
new file mode 100644
index 000000000..b674b0b45
--- /dev/null
+++ b/.github/workflows/cla.yaml
@@ -0,0 +1,18 @@
+name: CLA 🔏
+
+on:
+  issue_comment:
+    types:
+      - created
+  # For PRs that originate from forks
+  pull_request_target:
+    types:
+      - opened
+      - closed
+      - synchronize
+
+jobs:
+  CLA:
+    name: CLA 📝
+    uses: insightsengineering/.github/.github/workflows/cla.yaml@main
+    secrets: inherit
diff --git a/.github/workflows/on-demand.yaml b/.github/workflows/on-demand.yaml
new file mode 100644
index 000000000..02843bb32
--- /dev/null
+++ b/.github/workflows/on-demand.yaml
@@ -0,0 +1,12 @@
+---
+name: On-demand 🧑‍🔬
+
+on:
+  schedule:
+    - cron: '45 3 * * 0'
+  workflow_dispatch:
+
+jobs:
+  revdepcheck:
+    name: revdepcheck ↩️
+    uses: insightsengineering/r.pkg.template/.github/workflows/revdepcheck.yaml@main
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index 0fa4a06c8..226473ce9 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -8,15 +8,6 @@ on:
   workflow_dispatch:
 
 jobs:
-  build:
-    name: Build package 🎁
-    needs: release
-    uses: insightsengineering/r.pkg.template/.github/workflows/build-check-install.yaml@main
-    secrets:
-      REPO_GITHUB_TOKEN: ${{ secrets.REPO_GITHUB_TOKEN }}
-    with:
-      skip-r-cmd-check: true
-      skip-r-cmd-install: true
   docs:
     name: Pkgdown Docs 📚
     needs: release
@@ -36,8 +27,8 @@ jobs:
     uses: insightsengineering/r.pkg.template/.github/workflows/release.yaml@main
     secrets:
       REPO_GITHUB_TOKEN: ${{ secrets.REPO_GITHUB_TOKEN }}
-  r-cmd:
-    name: R CMD Check 🧬
+  build:
+    name: Build package and reports 🎁
     needs: [release, docs]
     uses: insightsengineering/r.pkg.template/.github/workflows/build-check-install.yaml@main
     secrets:
diff --git a/.gitignore b/.gitignore
index 7096c5c03..cf72c037b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,3 +28,5 @@ vignettes/*.R
 vignettes/*.html
 vignettes/*.md
 tests/testthat/Rplots.pdf
+tests/testthat/_snaps/**/*.new.md
+tests/testthat/_snaps/**/*.new.svg
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index f1b190095..9b3acfacc 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -38,6 +38,7 @@ repos:
           .*\.svg|
           .*\.xml|
           (.*/|)\_pkgdown.y[a]?ml|
+          (.*/|)\.covrignore|
           (.*/|)\.gitignore|
           (.*/|)\.gitlab-ci\.y[a]?ml|
           (.*/|)\.lintr|
diff --git a/revdep/.gitignore b/revdep/.gitignore
new file mode 100644
index 000000000..111ab324f
--- /dev/null
+++ b/revdep/.gitignore
@@ -0,0 +1,7 @@
+checks
+library
+checks.noindex
+library.noindex
+cloud.noindex
+data.sqlite
+*.html
