diff --git a/.github/AnVIL_Feedback_Script.sh b/.github/AnVIL_Feedback_Script.sh
new file mode 100644
index 0000000..5269b76
--- /dev/null
+++ b/.github/AnVIL_Feedback_Script.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+# Extract the title from the YAML front matter of index.Rmd
+title=$(awk '/^title:/{gsub(/^title: /,""); print}' "index.Rmd" | grep -v '^$')
+
+# Remove the outside quotation marks
+title=$(sed -e 's/^"//' -e 's/"$//' <<< "$title")
+
+# Replace spaces with '+'
+title=${title// /+}
+
+# Base url for the AnVIL Google Form
+url_base="https://docs.google.com/forms/d/e/1FAIpQLScrDVb_utm55pmb_SHx-RgELTEbCCWdLea0T3IzS0Oj00GE4w/viewform?usp=pp_url&entry.1565230805="
+
+# Replace the url inside _output.yml
+perl -i -pe 's|https://docs.google.com/forms/d/e/1FAIpQLScrDVb_utm55pmb_SHx-RgELTEbCCWdLea0T3IzS0Oj00GE4w/viewform\?usp=pp_url&entry\.1565230805=.*"> Click|'${url_base}${title}'"> Click|g' _output.yml
+
+# Print for Github actions 
+echo "The feedback link is: ${url_base}${title}"
\ No newline at end of file
diff --git a/.github/workflows/check-url.yml b/.github/workflows/check-url.yml
new file mode 100644
index 0000000..090f12f
--- /dev/null
+++ b/.github/workflows/check-url.yml
@@ -0,0 +1,117 @@
+name: Periodic URL Check
+
+on:
+  workflow_dispatch:
+  schedule:
+    - cron: '0 0 1 * *'
+
+jobs:
+  set-up:
+    name: Load user automation choices
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+        with:
+          fetch-depth: 0
+
+        # Use the yaml-env-action action.
+      - name: Load environment from YAML
+        uses: doughepi/yaml-env-action@v1.0.0
+        with:
+            files: config_automation.yml # Pass a space-separated list of configuration files. Rightmost files take precedence.
+    outputs:
+      toggle_url_check_periodically: "${{ env.URL_CHECK_PERIODICALLY }}"
+
+  url-check:
+    name: Check URLs
+    needs: set-up
+    if: ${{needs.set-up.outputs.toggle_url_check_periodically == 'yes'}}
+    runs-on: ubuntu-latest
+    container:
+      image: jhudsl/base_ottr:main
+
+    steps:
+    - name: Checkout
+      uses: actions/checkout@v3
+      with:
+        fetch-depth: 0
+
+    # Delete the branch if this has been run before
+    - name: Delete branch locally and remotely
+      run: git push origin --delete preview-spell-error || echo "No branch to delete"
+
+    # Make the branch fresh
+    - name: Make the branch fresh
+      run: |
+        git config --global --add safe.directory $GITHUB_WORKSPACE
+        git config --global user.name 'github-actions[bot]'
+        git config --global user.email 'github-actions[bot]@users.noreply.github.com'
+
+        echo branch doesnt exist
+        git checkout -b preview-spell-error || echo branch exists
+        git push --set-upstream origin preview-spell-error || echo echo branch exists remotely
+      shell: bash
+
+    - name: Run the check
+      uses: jhudsl/ottr-reports@main
+      id: check_results
+      continue-on-error: true
+      with:
+        check_type: urls
+        error_min: 1
+
+    - name: Declare file path and time
+      id: check-report
+      run: |
+        error_num=$(cat check_reports/url_checks.tsv | wc -l)
+        error_num="$((error_num-1))"
+        echo "error_num=$error_num" >> $GITHUB_OUTPUT
+        echo "error_url=https://github.com/${GITHUB_REPOSITORY}/blob/preview-spell-error/check_reports/url_checks.tsv" >> $GITHUB_OUTPUT
+      shell: bash
+
+    - name: Stop if failure
+      if: steps.check_results.outcome == 'failure'
+      run: exit 1
+
+    - name: Print out error variables
+      run: |
+        echo ${{ steps.check-report.outputs.error_url }}
+        echo ${{ steps.check-report.outputs.error_num }}
+        
+      # Commit file
+    - name: Commit tocless bookdown files
+      if: ${{ steps.check-report.outputs.error_num >= 1 }}
+      env:
+        GH_PAT: ${{ secrets.GH_PAT }}
+      run: |
+        git add --force check_reports/url_checks.tsv
+        git commit -m 'Add spell check file' || echo "No changes to commit"
+        git push --set-upstream origin preview-spell-error || echo echo branch exists remotely
+
+    - name: Find issues
+      id: find-issue
+      env:
+        GH_PAT: ${{ secrets.GH_PAT }}
+      run: |
+        echo "$GITHUB_REPOSITORY"
+        curl -o find_issue.R https://raw.githubusercontent.com/jhudsl/ottr-reports/main/scripts/find_issue.R
+        issue_exists=$(Rscript --vanilla find_issue.R --repo $GITHUB_REPOSITORY --git_pat $GH_PAT)
+        echo URL issue exists: $issue_exists
+        echo "issue_existence=$issue_exists" >> $GITHUB_OUTPUT
+
+    - name: If too many URL errors, then make an issue
+      if: ${{ steps.check-report.outputs.error_num >= 1 && steps.find-issue.outputs.issue_existence == 0}}
+      uses: JasonEtco/create-an-issue@v2
+      with:
+        filename: .github/ISSUE_TEMPLATE/url-error.md
+      env:
+        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        FILE_URL: ${{ steps.check-report.outputs.error_url }}
+        ERROR_NUM: ${{ steps.check-report.outputs.error_num }}
+
+    - name: If no URL errors than delete the branch we made
+      if: ${{ steps.check-report.outputs.error_num < 1 }}
+      run: |
+        git config --system --add safe.directory "$GITHUB_WORKSPACE"
+        git push origin --delete preview-spell-error || echo "No branch to delete"
diff --git a/.github/workflows/delete-preview.yml b/.github/workflows/delete-preview.yml
index afd658a..faa83cc 100644
--- a/.github/workflows/delete-preview.yml
+++ b/.github/workflows/delete-preview.yml
@@ -18,7 +18,7 @@ jobs:
 
       # Check out current repository
       - name: checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           fetch-depth: 0
 
diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml
index b9bb17a..de76459 100644
--- a/.github/workflows/pull_request.yml
+++ b/.github/workflows/pull_request.yml
@@ -1,5 +1,5 @@
 # Candace Savonen 2021
-# Updated Jan 2023
+# Updated May 2024
 
 name: Pull Request
 
@@ -14,7 +14,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           fetch-depth: 0
 
@@ -31,23 +31,29 @@ jobs:
       # Make the branch fresh
       - name: Make the branch fresh
         run: |
-          git config --local user.email "itcrtrainingnetwork@gmail.com"
-          git config --local user.name "jhudsl-robot"
+          git config --global --add safe.directory $GITHUB_WORKSPACE
+          git config --global user.name 'github-actions[bot]'
+          git config --global user.email 'github-actions[bot]@users.noreply.github.com'
 
           branch_name='preview-${{ github.event.pull_request.number }}'
           echo branch doesnt exist
           git checkout -b $branch_name || echo branch exists
-          git push --set-upstream origin $branch_name
+          git push --set-upstream origin $branch_name || echo branch exists remotely
         shell: bash
 
+
     outputs:
+      toggle_website: "${{ env.RENDER_WEBSITE }}"
       toggle_spell_check: "${{ env.SPELL_CHECK }}"
       toggle_style_code: "${{ env.STYLE_CODE }}"
       toggle_url_check: "${{ env.URL_CHECKER }}"
       toggle_quiz_check: "${{ env.CHECK_QUIZZES }}"
+      toggle_feedback_link: "${{ env.FEEDBACK_LINK }}"
+      toggle_md_linter: "${{ env.MARKDOWN_LINTER }}"
+      toggle_readability: "${{ env.READABILITY_REPORT }}"
       toggle_render_preview: "${{ env.RENDER_PREVIEW }}"
+      toggle_student_guide: "${{ env.RENDER_STUDENT_GUIDE }}"
       rendering_docker_image: "${{ env.RENDERING_DOCKER_IMAGE }}"
-      render_student_guide: "${{ env.RENDER_STUDENT_GUIDE }}"
 
 ########################## Make the error reports ##############################
   spell-check:
@@ -58,7 +64,9 @@ jobs:
     with:
       check_type: spelling
       error_min: 3
-      gh_pat: secrets.GH_PAT
+      branch_name: ${GITHUB_HEAD_REF}
+    secrets:
+      gh_pat: ${{ secrets.GH_PAT }}
 
   url-check:
     name: Check URLs
@@ -68,7 +76,9 @@ jobs:
     with:
       check_type: urls
       error_min: 0
-      gh_pat: secrets.GH_PAT
+      branch_name: ${GITHUB_HEAD_REF}
+    secrets:
+      gh_pat: ${{ secrets.GH_PAT }}
 
   quiz-check:
     name: Check quiz formatting
@@ -78,7 +88,9 @@ jobs:
     with:
       check_type: quiz_format
       error_min: 0
-      gh_pat: secrets.GH_PAT
+      branch_name: ${GITHUB_HEAD_REF}
+    secrets:
+      gh_pat: ${{ secrets.GH_PAT }}
 
 ############################# Style the code ###################################
   style-code:
@@ -91,20 +103,40 @@ jobs:
 
     steps:
       - name: Checkout files
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           fetch-depth: 0
 
       - name: Run styler
-        run: Rscript -e "styler::style_file(list.files(pattern = 'Rmd$', recursive = TRUE, full.names = TRUE));warnings()"
+        run: Rscript -e "styler::style_file(list.files(pattern = '(R|q)md$', recursive = FALSE, full.names = TRUE));warnings()"
 
       - name: Commit styled files
         run: |
           git config --system --add safe.directory "$GITHUB_WORKSPACE"
-          git add \*.Rmd
-          git commit -m 'Style Rmds' || echo "No changes to commit"
+          git add \*md
+          git commit -m 'Style *mds' || echo "No changes to commit"
           git push origin || echo "No changes to commit"
 
+############################# Readability Report ###################################
+
+  readability-report:
+    name: Readability report
+    needs: yaml-check
+    runs-on: ubuntu-latest
+    if: ${{needs.yaml-check.outputs.toggle_readability == 'yes'}}
+
+    steps:
+      - name: Checkout repo
+        uses: actions/checkout@v4
+        with:
+          fetch-depth: 0
+
+      - name: Readability report
+        uses: Rebilly/lexi@v2
+        with:
+          github-token: ${{ secrets.GH_PAT }}
+          glob: '**/*.md'
+
 ############################# Render Preview ###################################
 
   render-preview:
@@ -117,16 +149,16 @@ jobs:
 
     steps:
       - name: Checkout files
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           fetch-depth: 0
 
       # Set up git checkout
       - name: Set up git checkout
         run: |
-          git config --system --add safe.directory "$GITHUB_WORKSPACE"
-          git config --local user.email "itcrtrainingnetwork@gmail.com"
-          git config --local user.name "jhudsl-robot"
+          git config --global --add safe.directory $GITHUB_WORKSPACE
+          git config --global user.name 'github-actions[bot]'
+          git config --global user.email 'github-actions[bot]@users.noreply.github.com'
 
           branch_name='preview-${{ github.event.pull_request.number }}'
           git fetch --all
@@ -134,16 +166,32 @@ jobs:
           git merge -s recursive --strategy-option=theirs origin/${{ github.head_ref }} --allow-unrelated-histories
         shell: bash
 
+      # Make sure the link for AnVIL feedback is prepopulated for the specific course
+      - name: Set up feedback link
+        id: feedback
+        if: ${{needs.yaml-check.outputs.toggle_feedback_link == 'yes'}}
+        run: |
+          bash .github/AnVIL_Feedback_Script.sh
+          git add _output.yml
+          git commit -m 'Set up feedback link' || echo "No changes to commit"
+
       # Run bookdown rendering
       - name: Run bookdown render
         id: bookdown
+        if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }}
         run: Rscript -e "bookdown::render_book('index.Rmd', output_format = 'all')"
-        
+
+      # Run quarto rendering
+      - name: Render quarto version
+        id: quarto
+        if: ${{needs.yaml-check.outputs.toggle_website == 'quarto' }}
+        run: Rscript -e "quarto::quarto_render('.')"
+
       # Render a student guide if specified. This is a bit clunky because
       # Bookdown does not work well if the files aren't named as such in the
       # root directory
       - name: Run student guide render
-        if: ${{needs.yaml-check.outputs.render_student_guide == 'yes'}}
+        if: ${{needs.yaml-check.outputs.toggle_student_guide == 'yes'}}
         id: student_guide
         run: |
           mkdir tmp1
@@ -153,22 +201,29 @@ jobs:
           mv _bookdown.yml _output.yml student-guide
           mv tmp1/_bookdown.yml tmp1/_output.yml .
           rm -r tmp1
-
-      # Run TOC-less version
-      # Rendered content for Leanpub and Coursera is very similar.
-      # This job creates a shared scaffold for both.
-      - name: Run TOC-less version of render
-        id: tocless
-        run: Rscript -e "ottrpal::render_without_toc()"
+          git add student-guide/*
+          git commit -m 'Create student guide' || echo "No changes to commit"
 
       # This checks on the steps before it and makes sure that they completed.
       # If the renders didn't complete we don't want to commit the file changes
-      - name: Check on render steps
-        if: steps.bookdown.outcome != 'success' || steps.tocless.outcome != 'success'
+      - name: Check on Rmd render steps
+        if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }}
         run: |
           echo Bookdown status ${{steps.bookdown.outcome}}
-          echo Toc-less status ${{steps.tocless.outcome}}
-          exit 1
+          if [${{steps.bookdown.outcome}} != 'success']; then
+            exit 1
+          fi
+
+      - name: Check on quarto render steps
+        if: ${{needs.yaml-check.outputs.toggle_website == 'quarto' }}
+        run: |
+          echo Quarto status ${{steps.quarto.outcome}}
+          if [${{steps.quarto.outcome}} != 'success']; then
+            exit 1
+          fi
+
+      - name: Website preview for download
+        run: zip website-preview.zip docs/* -r
 
       # Commit the rendered bookdown files
       - name: Commit rendered bookdown files to preview branch
@@ -179,7 +234,7 @@ jobs:
           echo "changes=$changes" >> $GITHUB_OUTPUT
           git add . --force
           git commit -m 'Render preview' || echo "No changes to commit"
-          git pull --set-upstream origin $branch_name --allow-unrelated-histories --strategy-option=ours
+          git pull --rebase --set-upstream origin $branch_name --allow-unrelated-histories --strategy-option=ours
           git push --force || echo "No changes to commit"
         shell: bash
 
@@ -196,11 +251,11 @@ jobs:
         run: |
           course_name=$(head -n 1 student-guide/_bookdown.yml | cut -d'"' -f 2| tr " " "-")
           bookdown_link=$(echo "https://htmlpreview.github.io/?https://raw.githubusercontent.com/$GITHUB_REPOSITORY/preview-${{ github.event.pull_request.number }}/docs/index.html")
-          tocless_link=$(echo "https://htmlpreview.github.io/?https://raw.githubusercontent.com/$GITHUB_REPOSITORY/preview-${{ github.event.pull_request.number }}/docs/no_toc/index.html")
-          student_docx_link=$(echo "https://github.com/$GITHUB_REPOSITORY/raw/preview-${{ github.event.pull_request.number }}/student-guide/$course_name.docx")
+          student_guide=$(echo "https://github.com/$GITHUB_REPOSITORY/raw/preview-${{ github.event.pull_request.number }}/student-guide/Student_Guide.docx")
+          zip_link=$(echo "https://github.com/$GITHUB_REPOSITORY/raw/preview-${{ github.event.pull_request.number }}/website-preview.zip")
+          echo "zip_link=$zip_link" >> $GITHUB_OUTPUT
           echo "bookdown_link=$bookdown_link" >> $GITHUB_OUTPUT
-          echo "tocless_link=$tocless_link" >> $GITHUB_OUTPUT
-          echo "student_docx_link=$student_docx_link" >> $GITHUB_OUTPUT
+          echo "student_guide=$student_guide" >> $GITHUB_OUTPUT
           echo "time=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
           echo "commit_id=$GITHUB_SHA" >> $GITHUB_OUTPUT
           echo ${{steps.commit.outputs.changes}}
@@ -213,11 +268,13 @@ jobs:
           issue-number: ${{ github.event.pull_request.number }}
           body: |
             Re-rendered previews from the latest commit:
-            - See [preview of Bookdown here](${{ steps.build-components.outputs.bookdown_link }})
-            - See [preview of Coursera/Leanpub version here](${{ steps.build-components.outputs.tocless_link }})
-            - Download the [preview of the Student Guide .docx file](${{ steps.build-components.outputs.student_docx_link }})
+            - :eyes: Quick [preview of course website here](${{ steps.build-components.outputs.bookdown_link }}) \*
+            - :microscope: Comprehensive [download of the course website here](${{ steps.build-components.outputs.zip_link }})
+            - Download the Student Guide [.docx file](${{ steps.build-components.outputs.student_guide }})
 
-            _Updated at ${{ steps.build-components.outputs.time }} with changes from ${{ steps.build-components.outputs.commit_id }}_
+            \* note not all html features will be properly displayed in the "quick preview" but it will give you a rough idea.
+
+            _Updated at ${{ steps.build-components.outputs.time }} with changes from the latest commit ${{ steps.build-components.outputs.commit_id }}_
           edit-mode: replace
 
       - name: Comment if no changes
diff --git a/.github/workflows/render-all.yml b/.github/workflows/render-all.yml
index 4ebcbdc..177b4a9 100644
--- a/.github/workflows/render-all.yml
+++ b/.github/workflows/render-all.yml
@@ -1,5 +1,5 @@
-
-# Candace Savonen Apr 2021
+# Candace Savonen 2021
+# Updated May 2024
 
 name: Render all output courses
 
@@ -8,8 +8,10 @@ on:
   push:
     branches: [ main, staging ]
     paths:
-      - '**.Rmd'
+      - '*.qmd'
+      - '*.Rmd'
       - assets/*
+      - quizzes/*
 
 jobs:
 
@@ -18,7 +20,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
 
         # Use the yaml-env-action action.
       - name: Load environment from YAML
@@ -26,49 +28,68 @@ jobs:
         with:
             files: config_automation.yml # Pass a space-separated list of configuration files. Rightmost files take precedence.
     outputs:
-      toggle_bookdown: "${{ env.RENDER_BOOKDOWN }}"
+      toggle_website: "${{ env.RENDER_WEBSITE }}"
       toggle_coursera: "${{ env.RENDER_COURSERA }}"
       toggle_leanpub: "${{ env.RENDER_LEANPUB }}"
+      toggle_feedback_link: "${{ env.FEEDBACK_LINK }}"
+      toggle_student_guide: "${{ env.RENDER_STUDENT_GUIDE }}"
       rendering_docker_image: "${{ env.RENDERING_DOCKER_IMAGE }}"
       toggle_quiz_check: "${{ env.CHECK_QUIZZES }}"
 
-  render-bookdown:
-    name: Render bookdown
+  render-course:
+    name: Render course preview
     needs: yaml-check
     runs-on: ubuntu-latest
     container:
       image: ${{needs.yaml-check.outputs.rendering_docker_image}}
-    if: ${{needs.yaml-check.outputs.toggle_bookdown == 'yes'}}
 
     steps:
       - name: checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           fetch-depth: 0
           token: ${{ secrets.GH_PAT }}
 
-      - name: Login as jhudsl-robot
+      - name: Login as github actions bot
         run: |
-          git config --system --add safe.directory "$GITHUB_WORKSPACE"
-          git config --local user.email "itcrtrainingnetwork@gmail.com"
-          git config --local user.name "jhudsl-robot"
+          git config --global --add safe.directory $GITHUB_WORKSPACE
+          git config --global user.name 'github-actions[bot]'
+          git config --global user.email 'github-actions[bot]@users.noreply.github.com'
 
       # We want a fresh run of the renders each time
       - name: Delete old docs/*
-        run: rm -rf docs/*
+        run: |
+          git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
+          git fetch origin
+          git pull --rebase --allow-unrelated-histories --strategy-option=ours
+
+      # Make sure the link for AnVIL feedback is prepopulated for the specific course
+      - name: Set up feedback link
+        if: ${{needs.yaml-check.outputs.toggle_feedback_link == 'yes'}}
+        run: |
+          bash .github/AnVIL_Feedback_Script.sh
+          git add _output.yml
+          git commit -m 'Set up feedback link' || echo "No changes to commit"
 
-      # Run bookdown rendering
+      # Run Rmd rendering
       - name: Run bookdown render
         id: bookdown
+        if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }}
         run: |
+          rm -rf docs/*
           Rscript -e "bookdown::render_book('index.Rmd', output_format = 'all');
           file.copy(from = 'assets', to = 'docs/assets', overwrite = TRUE)"
+
+      - name: Render quarto version
+        id: quarto
+        if: ${{needs.yaml-check.outputs.toggle_website == 'quarto' }}
+        run: Rscript -e "quarto::quarto_render('.')"
           
       # Render a student guide if specified. This is a bit clunky because 
       # Bookdown does not work well if the files aren't named as such in the 
       # root directory
       - name: Run student guide render
-        if: ${{needs.yaml-check.outputs.render_student_guide == 'yes'}}
+        if: ${{needs.yaml-check.outputs.toggle_student_guide == 'yes'}}
         id: student_guide
         run: |
           mkdir tmp1
@@ -78,29 +99,40 @@ jobs:
           mv _bookdown.yml _output.yml student-guide
           mv tmp1/_bookdown.yml tmp1/_output.yml .
           rm -r tmp1
+          git add student-guide/*
+          git commit -m 'Create student guide' || echo "No changes to commit"
 
       # This checks on the steps before it and makes sure that they completed.
       # If the renders didn't complete we don't want to commit the file changes
-      - name: Check on render step
-        if: steps.bookdown.outcome != 'success'
+      - name: Check on Rmd render steps
+        if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }}
         run: |
           echo Bookdown status ${{steps.bookdown.outcome}}
-          exit 1
+          if [${{steps.bookdown.outcome}} != 'success']; then
+            exit 1
+          fi
+
+      - name: Check on quarto render steps
+        if: ${{needs.yaml-check.outputs.toggle_website == 'quarto' }}
+        run: |
+          echo Quarto status ${{steps.quarto.outcome}}
+          if [${{steps.quarto.outcome}} != 'success']; then
+            exit 1
+          fi
 
-      # Commit the rendered bookdown files
-      - name: Commit rendered bookdown files
+      # Commit the rendered course files
+      - name: Commit rendered course files
         env:
           GH_PAT: ${{ secrets.GH_PAT }}
         run: |
-          git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
           git add --force docs/*
-          git commit -m 'Render bookdown' || echo "No changes to commit"
-          git pull --allow-unrelated-histories --strategy-option=ours
-          git push origin main || echo "No changes to push"
+          git commit -m 'Render course' || echo "No changes to commit"
+          git status docs/*
+          git push --force -u origin main  || echo "No changes to push"
 
   render-tocless:
     name: Render TOC-less version for Leanpub or Coursera
-    needs: [yaml-check]
+    needs: [yaml-check, render-course]
     runs-on: ubuntu-latest
     container:
       image: ${{needs.yaml-check.outputs.rendering_docker_image}}
@@ -108,54 +140,68 @@ jobs:
 
     steps:
       - name: checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           fetch-depth: 0
           token: ${{ secrets.GH_PAT }}
 
-      - name: Login as jhudsl-robot
+      - name: Login as github-actions bot
         run: |
-          git config --system --add safe.directory "$GITHUB_WORKSPACE"
-          git config --local user.email "itcrtrainingnetwork@gmail.com"
-          git config --local user.name "jhudsl-robot"
+          git config --global --add safe.directory $GITHUB_WORKSPACE
+          git config --global user.name 'github-actions[bot]'
+          git config --global user.email 'github-actions[bot]@users.noreply.github.com'
+          git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
+          git fetch origin
+          git pull --rebase --allow-unrelated-histories --strategy-option=ours
 
       # Rendered content for Leanpub and Coursera is very similar.
       # This job creates a shared scaffold for both.
-      - name: Run TOC-less version of render
-        id: tocless
+      - name: Run TOC-less version of render -- Rmd version
+        if: ${{needs.yaml-check.outputs.toggle_website == 'rmd' }}
+        id: tocless_rmd
         run: Rscript -e "ottrpal::render_without_toc()"
 
+      - name: Run TOC-less version of render -- quarto version
+        id: tocless_quarto
+        if: ${{needs.yaml-check.outputs.toggle_website == 'quarto' }}
+        run: |
+          Rscript -e "quarto::quarto_render('.', metadata = list(sidebar = F, toc = F),
+          quarto_args = c('--output-dir', 'docs/no_toc/'))"
+
       # Commit the TOC-less version files
       - name: Commit tocless bookdown files
         env:
           GH_PAT: ${{ secrets.GH_PAT }}
         run: |
-          git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
           git add --force docs/no_toc*
           git commit -m 'Render toc-less' || echo "No changes to commit"
-          git pull --allow-unrelated-histories --strategy-option=ours
-          git push origin main || echo "No changes to push"
+          git status docs/no_toc*
+          git push --force -u origin main  || echo "No changes to push"
 
   render-leanpub:
     name: Finish Leanpub prep
     needs: [yaml-check, render-tocless]
     runs-on: ubuntu-latest
     container:
-      image: jhudsl/ottrpal:main
+      image: jhudsl/ottrpal
     if: ${{needs.yaml-check.outputs.toggle_leanpub == 'yes'}}
 
     steps:
       - name: checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           fetch-depth: 0
           token: ${{ secrets.GH_PAT }}
 
-      - name: Login as jhudsl-robot
+      - name: Login as github actions bot
         run: |
-          git config --system --add safe.directory "$GITHUB_WORKSPACE"
-          git config --local user.email "itcrtrainingnetwork@gmail.com"
-          git config --local user.name "jhudsl-robot"
+          git config --global --add safe.directory $GITHUB_WORKSPACE
+          git config --global user.name 'github-actions[bot]'
+          git config --global user.email 'github-actions[bot]@users.noreply.github.com'
+          git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
+          git fetch origin
+          git pull --rebase --allow-unrelated-histories --strategy-option=ours
+          ls docs/no_toc
 
       # Create screenshots
       - name: Run the screenshot creation
@@ -164,31 +210,41 @@ jobs:
           rm -rf resources/chapt_screen_images
 
           # Make new screenshots
-          chapt_urls=$(Rscript --vanilla scripts/make_screenshots.R \
+          curl -o make_screenshots.R https://raw.githubusercontent.com/jhudsl/ottr-reports/main/scripts/make_screenshots.R
+          chapt_urls=$(Rscript --vanilla make_screenshots.R \
             --git_pat ${{ secrets.GH_PAT }} \
             --repo $GITHUB_REPOSITORY \
             --output_dir resources/chapt_screen_images)
+          rm make_screenshots.R
 
       # We want a fresh run of the renders each time
-      - name: Delete old manuscript/
-        run: rm -rf manuscript/
+      - name: Delete manuscript/
+        env:
+          GH_PAT: ${{ secrets.GH_PAT }}
+        run: |
+          rm -rf manuscript/
+          git add .
+          git commit -m 'Delete manuscript folder' || echo "No changes to commit"
+          git push -u origin main || echo "No changes to push"
 
       - name: Run ottrpal::bookdown_to_embed_leanpub
-        if: needs.yaml-check.outputs.toggle_quiz_check == 'no'
+        if: ${{ needs.yaml-check.outputs.toggle_quiz_check == 'no'}}
         run: |
+          echo needs.yaml-check.outputs.toggle_make_book_txt == 'yes'
+          echo needs.yaml-check.outputs.toggle_make_book_txt
           Rscript -e "ottrpal::bookdown_to_embed_leanpub(
             render = FALSE, \
             chapt_img_key = 'resources/chapt_screen_images/chapter_urls.tsv', \
-            make_book_txt = TRUE, \
+            make_book_txt = as.logical('${{needs.yaml-check.outputs.make_book_txt == 'yes'}}'), \
             quiz_dir = NULL)"
 
       - name: Run ottrpal::bookdown_to_embed_leanpub
-        if: needs.yaml-check.outputs.toggle_quiz_check == 'yes'
+        if: ${{ needs.yaml-check.outputs.toggle_quiz_check == 'yes'}}
         run: |
           Rscript -e "ottrpal::bookdown_to_embed_leanpub(
             render = FALSE, \
             chapt_img_key = 'resources/chapt_screen_images/chapter_urls.tsv', \
-            make_book_txt = TRUE)"
+            make_book_txt = as.logical('${{needs.yaml-check.outputs.make_book_txt == 'yes'}}'))"
 
       # Commit the rendered Leanpub files
       - name: Commit rendered Leanpub files
@@ -196,13 +252,13 @@ jobs:
           GH_PAT: ${{ secrets.GH_PAT }}
         run: |
           mkdir -p manuscript
-          git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
           git add --force manuscript/*
           git add --force resources/*
           git add --force docs/*
           git commit -m 'Render Leanpub' || echo "No changes to commit"
-          git pull --allow-unrelated-histories --strategy-option=ours
-          git push origin main || echo "No changes to push"
+          git status docs/*
+          git pull --rebase --allow-unrelated-histories --strategy-option=ours --autostash
+          git push --force --set-upstream origin main || echo "No changes to push"
 
   render-coursera:
     name: Finish Coursera prep
@@ -214,16 +270,19 @@ jobs:
 
     steps:
       - name: checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
           fetch-depth: 0
           token: ${{ secrets.GH_PAT }}
 
-      - name: Login as jhudsl-robot
+      - name: Login as github action
         run: |
-          git config --system --add safe.directory "$GITHUB_WORKSPACE"
-          git config --local user.email "itcrtrainingnetwork@gmail.com"
-          git config --local user.name "jhudsl-robot"
+          git config --global --add safe.directory $GITHUB_WORKSPACE
+          git config --global user.name 'github-actions[bot]'
+          git config --global user.email 'github-actions[bot]@users.noreply.github.com'
+          git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
+          git fetch origin
+          git pull --rebase --allow-unrelated-histories --strategy-option=ours
 
       # Run Coursera version
       - name: Convert Leanpub quizzes to Coursera
@@ -231,15 +290,18 @@ jobs:
         id: coursera
         run: Rscript -e "ottrpal::convert_coursera_quizzes()"
 
-      # Commit the rendered bookdown files
+      # Commit the rendered files
+      # Only commit coursera quizzes if the directory is present
       - name: Commit rendered Coursera files
         env:
           GH_PAT: ${{ secrets.GH_PAT }}
         run: |
-          git remote set-url origin https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}
+          if [ -d 'coursera_quizzes' ]; then
+            git add --force coursera_quizzes/*
+          fi
           git add --force manuscript/*
           git add --force resources/*
           git add --force docs/*
           git commit -m 'Render Coursera quizzes' || echo "No changes to commit"
-          git pull --allow-unrelated-histories --strategy-option=ours
-          git push origin main || echo "No changes to push"
+          git status
+          git push --force -u origin main  || echo "No changes to push"
diff --git a/.github/workflows/transfer-rendered-files.yml b/.github/workflows/transfer-rendered-files.yml
index 3c3577e..dae4141 100644
--- a/.github/workflows/transfer-rendered-files.yml
+++ b/.github/workflows/transfer-rendered-files.yml
@@ -21,7 +21,7 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - name: Checkout
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
 
         # Use the yaml-env-action action.
       - name: Load environment from YAML
@@ -42,21 +42,23 @@ jobs:
     if: ${{needs.yaml-check.outputs.toggle_coursera == 'yes' || needs.yaml-check.outputs.toggle_leanpub == 'yes'}}
 
     steps:
+      - name: Checkout from Bookdown Repo
+        uses: actions/checkout@v4
+        with:
+          path: bookdown
+          token: ${{ secrets.GH_PAT }}
+
       - name: Run git repo check
         id: git_repo_check
         env:
           GH_PAT: ${{ secrets.GH_PAT }}
         run: |
-          sudo apt-get install subversion
-
           # What's the Quizzes repository's name?
           QUIZ_REPO=$(echo ${GITHUB_REPOSITORY} | sed "s/_Bookdown/ /g" | sed "s/_Template/ /g" | awk '{print $1"_Quizzes"}')
           echo $QUIZ_REPO
 
-          # Get repo check script
-          svn export --force https://github.com/${GITHUB_REPOSITORY}.git/branches/${GITHUB_REF#refs/heads/}/scripts/git_repo_check.R git_repo_check.R
-
           # Run repo check script
+          curl -o git_repo_check.R https://raw.githubusercontent.com/jhudsl/ottr-reports/main/scripts/git_repo_check.R
           results=$(Rscript --vanilla git_repo_check.R --repo "$GITHUB_REPOSITORY" --git_pat "$GH_PAT")
           echo $QUIZ_REPO exists: $results
 
@@ -65,8 +67,9 @@ jobs:
 
       - name: Checkout code from Leanpub repo
         if: ${{ steps.git_repo_check.outputs.git_results == 'TRUE' }}
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
         with:
+          path: quizzes
           repository: ${{ steps.git_repo_check.outputs.leanpub_repo }}
           token: ${{ secrets.GH_PAT }}
 
@@ -76,17 +79,19 @@ jobs:
         env:
           GH_PAT: ${{ secrets.GH_PAT }}
         run: |
-          # Copy over images folder
-          svn export --force https://github.com/${GITHUB_REPOSITORY}.git/branches/${GITHUB_REF#refs/heads/}/resources/chapt_screen_images resources/chapt_screen_images
+          # Copy over images folder (from bookdown to quizzes repo)
+          mkdir -p quizzes/resources/chapt_screen_images
+          cp bookdown/resources/chapt_screen_images/* quizzes/resources/chapt_screen_images
 
-          # Copy over _bookdown.yml
-          svn export --force https://github.com/${GITHUB_REPOSITORY}.git/branches/${GITHUB_REF#refs/heads/}/_bookdown.yml _bookdown.yml
+          # Copy over _bookdown.yml (from bookdown to quizzes repo)
+          cp bookdown/_bookdown.yml quizzes/_bookdown.yml
 
       - name: Create PR with resources files
         if: ${{ steps.git_repo_check.outputs.git_results == 'TRUE' }}
         uses: peter-evans/create-pull-request@v3
         id: cpr
         with:
+          path: quizzes # Must create the PR in the Quizzes Repo
           token: ${{ secrets.GH_PAT }}
           commit-message: Copy files from Bookdown repository
           signoff: false
diff --git a/_output.yml b/_output.yml
index 37feea5..d97f446 100644
--- a/_output.yml
+++ b/_output.yml
@@ -16,5 +16,6 @@ bookdown::gitbook:
        <p style="text-align:center;"> <a href="http://jhudatascience.org/"> The Johns Hopkins Data Science Lab </a></p>
        <a href="http://jhudatascience.org/"><img src="https://jhudatascience.org/images/dasl.png" style=" width: 80%; padding-left: 40px; padding-top: 8px; vertical-align: top "</a>
        <p style="text-align:center; font-size: 12px;"> <a href="https://github.com/rstudio4edu/rstudio4edu-book/"> Style adapted from: rstudio4edu-book </a> <a href ="https://creativecommons.org/licenses/by/2.0/"> (CC-BY 2.0) </a></p>
-       <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span>  <a href="https://forms.gle/AK12iVXTjsB7yCUUA"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>
-    
+       <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span><a href="https://docs.google.com/forms/d/e/1FAIpQLScrDVb_utm55pmb_SHx-RgELTEbCCWdLea0T3IzS0Oj00GE4w/viewform?usp=pp_url&entry.1565230805=your+course"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>
+       
+# Note: Do not edit the feedback link in this file. This is automatically edited through the render-preview and render-bookdown workflows.
diff --git a/assets/AnVIL_style/logo-anvil-img.png b/assets/AnVIL_style/logo-anvil-img.png
new file mode 100644
index 0000000..b5e3c39
Binary files /dev/null and b/assets/AnVIL_style/logo-anvil-img.png differ
diff --git a/assets/GDSCN_style/logo_BioDIGS_final.png b/assets/GDSCN_style/logo_BioDIGS_final.png
new file mode 100644
index 0000000..8bbc378
Binary files /dev/null and b/assets/GDSCN_style/logo_BioDIGS_final.png differ
diff --git a/assets/GDSCN_style/powered-by-anvil.png b/assets/GDSCN_style/powered-by-anvil.png
new file mode 100644
index 0000000..c6d5f09
Binary files /dev/null and b/assets/GDSCN_style/powered-by-anvil.png differ
diff --git a/assets/box_images/under_construction.png b/assets/box_images/under_construction.png
new file mode 100644
index 0000000..a67bd5c
Binary files /dev/null and b/assets/box_images/under_construction.png differ
diff --git a/assets/style.css b/assets/style.css
index 21ed0c6..748acad 100755
--- a/assets/style.css
+++ b/assets/style.css
@@ -250,7 +250,7 @@ li.appendix span, li.part span { /* for TOC part names */
 /* Sidebar formating --------------------------------------------*/
 /* from r-pkgs.org*/
 
-div.notice, div.warning, div.github, div.dictionary, div.reflection {
+div.notice, div.warning, div.github, div.dictionary, div.reflection, div.wip {
   padding: 1em;
   margin: 1em 0;
   padding-left: 100px;
@@ -304,6 +304,14 @@ div.reflection{
   background-image: url("../assets/box_images/thinking_face.png");
 }
 
+div.wip{
+  border: 4px #000000;
+  border-style: solid;
+  background-size: 70px;
+  background-position: 15px center;
+  background-color: #f4d03f;
+  background-image: url("../assets/box_images/under_construction.png");
+}
 
 /* .book .book-body .page-wrapper .page-inner section.normal is needed
    to override the styles produced by gitbook, which are ridiculously
diff --git a/config_automation.yml b/config_automation.yml
index b0499a8..54dcf03 100644
--- a/config_automation.yml
+++ b/config_automation.yml
@@ -3,22 +3,34 @@
 # Check quiz formatting
 check-quizzes: no
 # Check that urls in the content are not broken
-url-checker: no
+url-checker: yes
 # Render preview of content with changes (Rmd's and md's are checked)
 render-preview: yes
 # Spell check Rmds and quizzes
 spell-check: yes
 # Style any R code
 style-code: yes
+# Would you like your markdown files to be checked for formatting
+markdown-linter: yes
+# Would you like a readability report on your markdowns?
+readability-report: yes
 # Test build the docker image if any docker-relevant files have been changed
 docker-test: no
+# Should URLs be tested periodically?
+url-check-periodically: yes
 
 ##### Renderings run upon merge to main branch #####
 # Rendering each platform's content
-render-bookdown: yes
+render-website: rmd
 render-leanpub: no
 render-coursera: no
 
+##### Rendering of student guide (if applicable)
+render-student-guide: no
+
+##### Auto-generate a feedback link for the AnVIL Feedback Form: https://docs.google.com/forms/d/e/1FAIpQLScrDVb_utm55pmb_SHx-RgELTEbCCWdLea0T3IzS0Oj00GE4w/viewform
+feedback-link: yes
+
 # What docker image should be used for rendering?
-# The default is jhudsl/course_template:main
+# The default is jhudsl/base_ottr:main
 rendering-docker-image: 'jhudsl/stats-for-genomics:main'
diff --git a/index.Rmd b/index.Rmd
index 0661988..f4faf68 100644
--- a/index.Rmd
+++ b/index.Rmd
@@ -30,4 +30,3 @@ _Programming skills_
 This exercise is part of a collection of teaching resources developed through the *Genomic Data Science Community Network* (GDSCN). GDSCN works towards a vision where researchers, educators, and students from diverse backgrounds are able to fully participate in genomic data science research.  Learn more about GDSCN by visiting https://www.gdscn.org/home or reading the [article in Genome Research](https://doi.org/10.1101/gr.276496.121).
 
 Please check out our full collection of AnVIL and related resources: https://hutchdatascience.org/AnVIL_Collection/
-
diff --git a/resources/exclude_files.txt b/resources/exclude_files.txt
new file mode 100644
index 0000000..5525a40
--- /dev/null
+++ b/resources/exclude_files.txt
@@ -0,0 +1,8 @@
+About.Rmd
+docs/*
+style-sets/*
+manuscript/*
+CONTRIBUTING.md
+LICENSE.md
+code_of_conduct.md
+README.md
diff --git a/scripts/anvil_repo_check.R b/scripts/anvil_repo_check.R
deleted file mode 100644
index b39fd56..0000000
--- a/scripts/anvil_repo_check.R
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/usr/bin/env Rscript
-
-library(optparse)
-library(httr)
-library(jsonlite)
-library(dplyr)
-library(readr)
-library(tidyr)
-library(stringr)
-
-option_list <- list(
-  optparse::make_option(
-    c("--git_pat"),
-    type = "character",
-    default = NULL,
-    help = "GitHub personal access token",
-  )
-)
-
-# Read the GH_PAT argument
-opt_parser <- optparse::OptionParser(option_list = option_list)
-opt <- optparse::parse_args(opt_parser)
-git_pat <- opt$git_pat
-
-# --------- Set url and token ---------
-
-message(paste("Querying Github API..."))
-
-# Request search results specific to jhudsl + fhdsl + DataTrail organizations
-# Also allows us to pull in repos forked into these organizations
-url <- "https://api.github.com/search/repositories?q=user:jhudsl+user:fhdsl+fork:true&per_page=50"
-
-# Provide the appropriate GH token & Make the request
-req <- GET(url = url, config = add_headers(Authorization = paste("token", git_pat)))
-
-if (!(httr::http_error(req))) {
-  message(paste("API request successful!"))
-} else {
-  stop("API request failed!")
-}
-
-# --------- Traverse pages ---------
-
-# Pull out the last page number of the request
-last <- str_extract(req$headers$link, pattern = '.(?=>; rel=\"last\")')
-
-full_repo_df <- tibble()
-for (page in 1:last){
-  
-  url <- paste0("https://api.github.com/search/repositories?q=user:jhudsl+user:fhdsl+fork:true&per_page=50&page=", page)
-  message(paste("Gathering results from:", url))
-  req <- GET(url = url, config = add_headers(Authorization = paste("token", git_pat)))
-  repo_dat <-
-    jsonlite::fromJSON(httr::content(req, as = "text"), flatten = TRUE)
-  message(paste("... Gathered", nrow(repo_dat$items), "repositories."))
-  
-  repo_df <-
-    tibble(repo_dat$items) %>%
-    select(full_name, homepage, html_url, description, private) %>%
-    separate(full_name, into = c("org", "name"), sep = "/") %>%
-    
-    # Collapse topics so they can be printed
-    bind_cols(tibble(topics = unlist(
-      lapply(repo_dat$items$topics, paste, collapse = ", ")
-    ))) %>%
-
-    # Drop private repos and remove org column
-    filter(!(private)) %>%
-    select(!c(private, org)) %>%
-    
-    # # Rearrange columns
-    relocate(description, .before = topics) %>%
-    
-    # Keep only those with homepages and descriptions
-    filter(!(is.na(homepage)), homepage != "",!(is.na(description))) %>% 
-  
-    # Keep only AnVIL related content
-    mutate(is_anvil = str_detect(topics, "anvil")) %>% 
-    filter(is_anvil) %>% 
-    select(!(is_anvil))
-  
-  full_repo_df <- rbind(full_repo_df, repo_df) %>%
-    dplyr::arrange(name)
-}
-
-# --------- Save the collection ---------
-
-# Create an artifact file containing the repos, else write an empty file
-if (!dir.exists("resources")) {
-  dir.create("resources")
-}
-if (nrow(full_repo_df) > 0) {
-  readr::write_tsv(full_repo_df, file.path('resources', 'AnVIL_repos.tsv'))
-} else {
-  readr::write_tsv(tibble(), file.path('resources', 'AnVIL_repos.tsv'))
-}
-
diff --git a/scripts/anvil_repo_table.R b/scripts/anvil_repo_table.R
deleted file mode 100644
index ac4b8c6..0000000
--- a/scripts/anvil_repo_table.R
+++ /dev/null
@@ -1,45 +0,0 @@
-library(dplyr)
-library(stringr)
-
-make_anvil_repo_table <- function(exclude = NULL) {
-  # Read in AnVIL repos found by GHA
-  df <- tryCatch(
-    # Check for the file created by GHA
-    expr = {
-      df <-
-        readr::read_tsv("resources/AnVIL_repos.tsv")
-      
-      # Filter out any user specified repos (could be some that are in progress,
-      # templates, etc)
-      df <-
-        df %>%
-        filter(!(name %in% exclude)) 
-      
-      # Do some cleaning of strings
-      df$name <-
-        df$name %>%
-        stringr::str_replace_all("_Book_", ": ") %>%
-        stringr::str_replace_all("_", " ")
-      
-      # Concatenate columns to create links
-      df <-
-        df %>% 
-        mutate(`Book Name` = paste0("[", name, "](", homepage, ") ([github](", html_url, "))")) %>% 
-        arrange(`Book Name`) %>%
-        rename(Description = description, Topics = topics) %>% 
-        select(`Book Name`, Description, Topics)
-      
-      message("Colnames are: \n", paste(colnames(df), collapse='\n'))
-      
-      return(df)
-    },
-    # Will error out if file doesn't exist - provides a blank tibble instead
-    error = function(e) {
-      df <- tibble(name = "none", html_url = "none")
-      
-      message("Rendering table of AnVIL collection failed. Please try rerunning the workflow or if needed, create an issue in the AnVIL_Template repository at https://github.com/jhudsl/AnVIL_Template.")
-      
-      return(df)
-    }
-  )
-}
diff --git a/scripts/git_repo_check.R b/scripts/git_repo_check.R
deleted file mode 100644
index fd4b8f5..0000000
--- a/scripts/git_repo_check.R
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/usr/bin/env Rscript
-
-# Written by Candace Savonen Sept 2021
-
-if (!("optparse" %in% installed.packages())){
-  install.packages("optparse")
-}
-
-library(optparse)
-
-option_list <- list(
-  optparse::make_option(
-    c("--repo"),
-    type = "character",
-    default = NULL,
-    help = "GitHub repository name, e.g. jhudsl/OTTR_Template",
-  ),
-  optparse::make_option(
-    c("--git_pat"),
-    type = "character",
-    default = NULL,
-    help = "GitHub personal access token",
-  )
-)
-
-# Read the arguments passed
-opt_parser <- optparse::OptionParser(option_list = option_list)
-opt <- optparse::parse_args(opt_parser)
-
-repo <- opt$repo
-git_pat <- opt$git_pat
-
-if (!is.character(repo)) {
-  repo <- as.character(repo)
-}
-
-check_git_repo <- function(repo, git_pat = NULL, silent = TRUE, return_repo = FALSE) {
-  # Given a repository name, check with git ls-remote whether the repository
-  # exists and return a TRUE/FALSE
-
-  # Inputs:
-  # repo: the name of the repository, e.g. jhudsl/OTTR_Template
-  # git_pat: A personal access token from GitHub. Only necessary if the repository being
-  #          checked is a private repository.
-  # silent: TRUE/FALSE of whether the warning from the git ls-remote command
-  #         should be echoed back if it does fail.
-  # return_repo: TRUE/FALSE of whether or not the output from git ls-remote
-  #              should be saved to a file (if the repo exists)
-
-  # Returns:
-  # A TRUE/FALSE whether or not the repository exists.
-  # Optionally the output from git ls-remote if return_repo = TRUE.
-
-  message(paste("Checking for remote git repository:", repo))
-
-  # If silent = TRUE don't print out the warning message from the 'try'
-  report <- ifelse(silent, suppressWarnings, message)
-
-  if (!is.null(git_pat)) {
-    # If git_pat is supplied, use it
-    test_repo <- report(
-      try(system(paste0("git ls-remote https://", git_pat, "@github.com/", repo),
-        intern = TRUE, ignore.stderr = TRUE
-      ))
-    )
-  } else {
-
-    # Try to git ls-remote the repo given
-    test_repo <- report(
-      try(system(paste0("git ls-remote https://github.com/", repo),
-        intern = TRUE, ignore.stderr = TRUE
-      ))
-    )
-  }
-  # If 128 is returned as a status attribute it means it failed
-  exists <- ifelse(is.null(attr(test_repo, "status")), TRUE, FALSE)
-
-  if (return_repo && exists) {
-    # Make file name
-    output_file <- paste0("git_ls_remote_", gsub("/", "_", repo))
-
-    # Tell the user the file was saved
-    message(paste("Saving output from git ls-remote to file:", output_file))
-
-    # Write to file
-    writeLines(exists, file.path(output_file))
-  }
-
-  return(exists)
-}
-
-# Change repo name to its Leanpub equivalent:
-repo <- gsub("_Template", "", repo)
-repo <- paste0(repo, "_Quizzes")
-
-# Print out the result
-write(check_git_repo(repo, git_pat = git_pat), stdout())
diff --git a/scripts/make_screenshots.R b/scripts/make_screenshots.R
deleted file mode 100644
index c57a182..0000000
--- a/scripts/make_screenshots.R
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env Rscript
-# Written by Candace Savonen Jan 2022
-
-if (!('devtools' %in% installed.packages())) {
-  # install.packages("remotes", repos = "http://cran.us.r-project.org")
-}
-
-if (!('optparse' %in% installed.packages())) {
-  # install.packages("optparse", repos = "http://cran.us.r-project.org")
-}
-
-webshot::install_phantomjs()
-
-library(optparse)
-library(magrittr)
-
-option_list <- list(
-  optparse::make_option(
-    c("--repo"),
-    type = "character",
-    default = NULL,
-    help = "GitHub repository name, e.g. jhudsl/OTTR_Template",
-  ),
-  optparse::make_option(
-    c("--git_pat"),
-    type = "character",
-    default = NULL,
-    help = "GitHub personal access token",
-  ),
-  optparse::make_option(
-    c("--output_dir"),
-    type = "character",
-    default = "resources/chapt_screen_images",
-    help = "Output directory where the chapter's screen images should be stored",
-  ),
-  optparse::make_option(
-    c("--base_url"),
-    type = "character",
-    default = NULL,
-    help = "Output directory where the chapter's screen images should be stored",
-  )
-)
-
-# Read the arguments passed
-opt_parser <- optparse::OptionParser(option_list = option_list)
-opt <- optparse::parse_args(opt_parser)
-
-output_folder <- file.path(opt$output_dir)
-if (!dir.exists(output_folder)) {
-  dir.create(output_folder, recursive = TRUE)
-}
-
-if (is.null(opt$base_url)) {
-  base_url <- cow::get_pages_url(repo_name = opt$repo, git_pat = opt$git_pat)
-  base_url <- gsub("/$", "", base_url)
-}
-
-chapt_df <- ottrpal::get_chapters(base_url = file.path(base_url, "no_toc/"))
-
-file_names <- lapply(chapt_df$url, function(url) {
-  file_name <- gsub(".html", ".png", file.path(output_folder, basename(url)))
-  # Get rid of special characters
-  webshot::webshot(url, file_name)
-  file_name <- gsub(":|?|!|\\'", "", file_name)
-  message(paste("Screenshot saved:", file_name))
-  return(file_name)
-})
-
-# Save file of chapter urls and file_names
-chapt_df %>%
-  dplyr::mutate(img_path = unlist(file_names)) %>%
-  readr::write_tsv(file.path(output_folder, "chapter_urls.tsv"))
-
-message(paste("Image Chapter key written to: ", file.path(output_folder, "chapter_urls.tsv")))
diff --git a/scripts/ottr-fy.R b/scripts/ottr-fy.R
deleted file mode 100644
index aa079ce..0000000
--- a/scripts/ottr-fy.R
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env Rscript
-
-# This script downloads all the files and sets up the folders you need to
-# OTTR-fy a repository that has markdown or R Markdown files
-
-system("git checkout -b 'robot/ottr-fy'")
-
-if (!('optparse' %in% installed.packages())) {
-  install.packages("optparse")
-}
-library(optparse)
-library(magrittr)
-
-option_list <- list(
-  optparse::make_option(
-    c("--bookdown"),
-    action = "store_true",
-    help = "Is this a bookdown repository already? If used, means bookdown repo.",
-  )
-)
-
-# Read the arguments passed
-opt_parser <- optparse::OptionParser(option_list = option_list)
-opt <- optparse::parse_args(opt_parser)
-
-# Find .git root directory
-root_dir <- rprojroot::find_root(rprojroot::has_dir(".git"))
-
-base_url <- "https://raw.githubusercontent.com/jhudsl/OTTR_Template/main/"
-
-needed_files <- c(
-  ".github/workflows/pull_request.yml",
-  ".github/workflows/render-all.yml",
-  ".github/workflows/delete-preview.yml",
-  "scripts/git_repo_check.R",
-  "scripts/make_screenshots.R",
-  "_bookdown.yml",
-  "_output.yml",
-  "book.bib",
-  "config_automation.yml",
-  "assets/big-image.html",
-  "assets/footer.html"
-  )
-
-# If this is bookdown, we don't want to copy over the bookdown.yml or output.yml files
-if (opt$bookdown) {
-  needed_files <- setdiff(needed_files,
-  c("_bookdown.yml", "_output.yml", "assets/big-image.html", "assets/footer.html", "book.bib"))
-}
-
-# Set up a file list with the destination locations as the names
-url_to_files <- paste0(base_url, needed_files)
-names(url_to_files) <-  file.path(root_dir, needed_files)
-
-# Download the file in the respective place
-for (index in 1:length(url_to_files)) {
-  dest_folder <- dirname(names(url_to_files)[index])
-  if (!dir.exists(dest_folder)){
-    dir.create(dest_folder, recursive = TRUE)
-  }
-  download.file(url = url_to_files[index], destfile = names(url_to_files)[index])
-}
-
-system("git add .")
-system("git config commit.gpgsign false")
-system("git commit -m 'Add ottr-fying files'")
-system("git push --set-upstream origin robot/ottr-fy")
diff --git a/scripts/quiz-check.R b/scripts/quiz-check.R
deleted file mode 100644
index 9c10ee9..0000000
--- a/scripts/quiz-check.R
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env Rscript
-
-# Adapted for this jhudsl repository by Candace Savonen Mar 2022
-
-# Run spell check and save results
-
-library(magrittr)
-
-# Find .git root directory
-root_dir <- rprojroot::find_root(rprojroot::has_dir(".git"))
-
-output_file <- file.path(root_dir, 'check_reports', 'question_error_report.tsv')
-
-if (!dir.exists('check_reports')) {
-  dir.create('check_reports')
-}
-
-ottrpal::check_quizzes(quiz_dir = file.path(root_dir, 'quizzes'), write_report = TRUE, verbose = TRUE)
-
-if (file.exists("question_error_report.tsv")) {
-  quiz_errors <- readr::read_tsv("question_error_report.tsv")
-
-  file.copy('question_error_report.tsv', file.path(root_dir, 'check_reports'))
-  file.remove('question_error_report.tsv')
-
-  # Print out how many quiz check errors
-  write(nrow(quiz_errors), stdout())
-
-} else {
-  quiz_errors <- data.frame(errors = NA)
-
-  # Print out how many quiz check errors
-  write("1", stdout())
-}
-
-# Save question errors to file
-readr::write_tsv(quiz_errors, output_file)
-
-message(paste0("Saved to: ", output_file))
diff --git a/scripts/spell-check.R b/scripts/spell-check.R
deleted file mode 100644
index 58f1b17..0000000
--- a/scripts/spell-check.R
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env Rscript
-
-# This code was originally written by Josh Shapiro and Candace Savonen
-# for the Childhood Cancer Data Lab an initiative of Alexs Lemonade Stand Foundation.
-# https://github.com/AlexsLemonade/refinebio-examples/blob/33cdeff66d57f9fe8ee4fcb5156aea4ac2dce07f/.github/workflows/style-and-sp-check.yml#L1
-
-# Adapted for this jhudsl repository by Candace Savonen Apr 2021
-
-# Run spell check and save results
-
-library(magrittr)
-
-if (!("spelling" %in% installed.packages())){
-  install.packages("spelling")
-}
-# Find .git root directory
-root_dir <- rprojroot::find_root(rprojroot::has_dir(".git"))
-
-# Set up output file directory
-output_file <- file.path(root_dir, 'check_reports', 'spell_check_results.tsv')
-
-if (!dir.exists('check_reports')) {
-  dir.create('check_reports')
-}
-
-dictionary_file <- file.path(root_dir, 'resources', 'dictionary.txt')
-
-if (!file.exists(dictionary_file)) {
-  message(paste("No dictionary text file found at:", dictionary_file, "downloading one from the main OTTR Template repo"))
-  download.file("https://raw.githubusercontent.com/jhudsl/OTTR_Template/main/resources/dictionary.txt",
-                destfile = dictionary_file)
-}
-
-# Read in dictionary
-dictionary <- readLines(dictionary_file)
-
-# Only declare `.Rmd` files but not the ones in the style-sets directory
-files <- list.files(pattern = 'Rmd$', recursive = TRUE, full.names = TRUE)
-
-# Get quiz file names
-quiz_files <- list.files(file.path(root_dir, "quizzes"), pattern = '\\.md$', full.names = TRUE)
-
-# Put into one list
-files <- c(files, quiz_files)
-
-files <- grep("About.Rmd", files, ignore.case = TRUE, invert = TRUE, value = TRUE)
-files <- grep("style-sets", files, ignore.case = TRUE, invert = TRUE, value = TRUE)
-
-# Run spell check
-sp_errors <- spelling::spell_check_files(files, ignore = dictionary)
-
-if (nrow(sp_errors) > 0) {
-  sp_errors <- sp_errors %>%
-    data.frame() %>%
-    tidyr::unnest(cols = found) %>%
-    tidyr::separate(found, into = c("file", "lines"), sep = ":")
-} else {
-  sp_errors <- data.frame(errors = NA)
-}
-
-# Print out how many spell check errors
-write(nrow(sp_errors), stdout())
-
-# Save spell errors to file temporarily
-readr::write_tsv(sp_errors, output_file)
-
-message(paste0("Saved to: ", output_file))
diff --git a/scripts/url-check.R b/scripts/url-check.R
deleted file mode 100644
index 4928ea0..0000000
--- a/scripts/url-check.R
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/usr/bin/env Rscript
-
-# Adapted for this jhudsl repository by Candace Savonen Mar 2022
-
-# Summarize url checks
-
-library(magrittr)
-
-# Find .git root directory
-root_dir <- rprojroot::find_root(rprojroot::has_dir(".git"))
-
-ignore_urls_file <- file.path(root_dir, "resources", "ignore-urls.txt")
-
-if (!file.exists(ignore_urls_file)) {
-  message(paste("No ignore URLs text file found at:", ignore_urls_file, "downloading one from the main OTTR Template repo"))
-  download.file("https://raw.githubusercontent.com/jhudsl/OTTR_Template/main/resources/ignore-urls.txt",
-               destfile = ignore_urls_file)
-}
-ignore_urls <- readLines(ignore_urls_file)
-
-output_file <- file.path(root_dir, 'check_reports', 'url_checks.tsv')
-
-if (!dir.exists('check_reports')) {
-  dir.create('check_reports')
-}
-
-# Only declare `.Rmd` files but not the ones in the style-sets directory
-files <- list.files(path = root_dir, pattern = 'md$', full.names = TRUE)
-
-test_url <- function(url) {
-  message(paste0("Testing: ", url))
-  url_status <- try(httr::GET(url), silent = TRUE)
-  status <- ifelse(suppressMessages(grepl("Could not resolve host", url_status)), "failed", "success")
-  return(status)
-}
-
-get_urls <- function(file) {
-  # Read in a file and return the urls from it
-  content <- readLines(file)
-  content <- grep("http[s]?://", content, value = TRUE)
-  url_pattern <- "http[s]?://.+?[\"|\\)| |,|}]"
-  urls <- stringr::str_extract(content, url_pattern)
-  urls <- urls[!is.na(urls)]
-  if (length(urls) > 0 ){
-    urls <- gsub("\\)$|\"|)$", "", urls)
-    urls_status <- sapply(urls, test_url)
-    url_df <- data.frame(urls, urls_status, file)
-    return(url_df)
-  }
-}
-
-# Run this for all Rmds
-all_urls <- lapply(files, get_urls)
-
-# Write the file
-all_urls_df <- dplyr::bind_rows(all_urls) %>%
-  dplyr::filter(!is.na(urls))
-
-if (nrow(all_urls_df) > 0) {
-  failed_urls_df <- all_urls_df %>%
-    dplyr::filter(urls_status == "failed")
-} else {
-  failed_urls_df <- data.frame(errors = NA)
-}
-
-failed_urls_df <- failed_urls_df %>%
-  dplyr::filter(!(urls %in% ignore_urls))
-
-# Save spell errors to file temporarily
-readr::write_tsv(failed_urls_df, output_file)
-
-message(paste0("Saved to: ", output_file))
-
-# Print out how many spell check errors
-write(nrow(failed_urls_df), stdout())
diff --git a/student-guide/_bookdown.yml b/student-guide/_bookdown.yml
new file mode 100644
index 0000000..5c247d7
--- /dev/null
+++ b/student-guide/_bookdown.yml
@@ -0,0 +1,13 @@
+book_filename: "Student_Guide"
+chapter_name: "Chapter "
+repo: https://github.com/jhudsl/AnVIL_Template/
+rmd_files: ["index.Rmd",
+            "09-student_guide.Rmd",
+            "References.Rmd"]
+new_session: yes
+bibliography: [book.bib]
+delete_merged_file: true
+language:
+  ui:
+    chapter_name: "Chapter"
+output_dir: "student-guide"
diff --git a/style-sets/AnVIL/_output.yml b/style-sets/AnVIL/_output.yml
index 9b76c2c..f1d6e6a 100644
--- a/style-sets/AnVIL/_output.yml
+++ b/style-sets/AnVIL/_output.yml
@@ -2,6 +2,7 @@ bookdown::gitbook:
   # When using multiple css files, the default file path will be the first one #
   css: [assets/style.css, assets/AnVIL_style/anvil.css]
   includes:
+    in_header: GA_Script.html
     before_body: assets/AnVIL_style/big-image_anvil.html
     after_body: assets/AnVIL_style/footer.html
   highlight: tango
@@ -15,4 +16,6 @@ bookdown::gitbook:
        <p style="text-align:center;"> <a href="https://hutchdatascience.org/"> The Fred Hutch Data Science Lab </a></p>
        <a href="https://hutchdatascience.org/" target="_blank"><img src="https://raw.githubusercontent.com/jhudsl/OTTR_Template/main/style-sets/fhdasl/copy_to_assets/big-dasl-stacked.png" style="width: 80%; padding-left: 34px; padding-top: 8px;"</a>
        <p style="text-align:center; font-size: 12px;"> <a href="https://github.com/rstudio4edu/rstudio4edu-book/"> Style adapted from: rstudio4edu-book </a> <a href ="https://creativecommons.org/licenses/by/2.0/"> (CC-BY 2.0) </a></p>
-       <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span>  <a href="https://forms.gle/AK12iVXTjsB7yCUUA"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>
+       <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span><a href="https://docs.google.com/forms/d/e/1FAIpQLScrDVb_utm55pmb_SHx-RgELTEbCCWdLea0T3IzS0Oj00GE4w/viewform?usp=pp_url&entry.1565230805=AnVIL+Book+Name"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>
+       
+# Note: Do not edit the feedback link in this file. This is automatically edited through the render-preview and render-bookdown workflows. You can deactivate this behavior in config_automation.yml.
\ No newline at end of file
diff --git a/style-sets/AnVIL/index.Rmd b/style-sets/AnVIL/index.Rmd
index 0ae4626..d204825 100644
--- a/style-sets/AnVIL/index.Rmd
+++ b/style-sets/AnVIL/index.Rmd
@@ -38,3 +38,4 @@ Please check out our full collection of AnVIL and related resources: https://hut
 <!-- - Objective 3 -->
 
 <!-- Please also see the Bioinformatics core competencies for undergraduate life sciences education from NIBLSE: https://journals.plos.org/plosone/article/figure?id=10.1371/journal.pone.0196878.t002 -->
+
diff --git a/style-sets/AnVIL_FH/_output.yml b/style-sets/AnVIL_FH/_output.yml
index 9b76c2c..7cba311 100644
--- a/style-sets/AnVIL_FH/_output.yml
+++ b/style-sets/AnVIL_FH/_output.yml
@@ -15,4 +15,6 @@ bookdown::gitbook:
        <p style="text-align:center;"> <a href="https://hutchdatascience.org/"> The Fred Hutch Data Science Lab </a></p>
        <a href="https://hutchdatascience.org/" target="_blank"><img src="https://raw.githubusercontent.com/jhudsl/OTTR_Template/main/style-sets/fhdasl/copy_to_assets/big-dasl-stacked.png" style="width: 80%; padding-left: 34px; padding-top: 8px;"</a>
        <p style="text-align:center; font-size: 12px;"> <a href="https://github.com/rstudio4edu/rstudio4edu-book/"> Style adapted from: rstudio4edu-book </a> <a href ="https://creativecommons.org/licenses/by/2.0/"> (CC-BY 2.0) </a></p>
-       <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span>  <a href="https://forms.gle/AK12iVXTjsB7yCUUA"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>
+       <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span><a href="https://docs.google.com/forms/d/e/1FAIpQLScrDVb_utm55pmb_SHx-RgELTEbCCWdLea0T3IzS0Oj00GE4w/viewform?usp=pp_url&entry.1565230805=your+course"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>
+       
+# Note: Do not edit the feedback link in this file. This is automatically edited through the render-preview and render-bookdown workflows.
\ No newline at end of file
diff --git a/style-sets/AnVIL_JHU/_output.yml b/style-sets/AnVIL_JHU/_output.yml
index ba187ea..a3a7145 100644
--- a/style-sets/AnVIL_JHU/_output.yml
+++ b/style-sets/AnVIL_JHU/_output.yml
@@ -15,5 +15,6 @@ bookdown::gitbook:
        <p style="text-align:center;"> <a href="http://jhudatascience.org/"> The Johns Hopkins Data Science Lab </a></p>
        <a href="http://jhudatascience.org/"><img src="https://jhudatascience.org/images/dasl.png" style=" width: 80%; padding-left: 40px; padding-top: 8px; vertical-align: top "</a>
        <p style="text-align:center; font-size: 12px;"> <a href="https://github.com/rstudio4edu/rstudio4edu-book/"> Style adapted from: rstudio4edu-book </a> <a href ="https://creativecommons.org/licenses/by/2.0/"> (CC-BY 2.0) </a></p>
-       <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span>  <a href="https://forms.gle/AK12iVXTjsB7yCUUA"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>
-    
\ No newline at end of file
+       <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span><a href="https://docs.google.com/forms/d/e/1FAIpQLScrDVb_utm55pmb_SHx-RgELTEbCCWdLea0T3IzS0Oj00GE4w/viewform?usp=pp_url&entry.1565230805=your+course"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>
+       
+# Note: Do not edit the feedback link in this file. This is automatically edited through the render-preview and render-bookdown workflows.
\ No newline at end of file
diff --git a/style-sets/GDSCN/_output.yml b/style-sets/GDSCN/_output.yml
index 338cd83..4156fd7 100644
--- a/style-sets/GDSCN/_output.yml
+++ b/style-sets/GDSCN/_output.yml
@@ -15,5 +15,6 @@ bookdown::gitbook:
        <p style="text-align:center;"> <a href="https://hutchdatascience.org/"> The Fred Hutch Data Science Lab </a></p>
        <a href="https://hutchdatascience.org/" target="_blank"><img src="https://raw.githubusercontent.com/jhudsl/OTTR_Template/main/style-sets/fhdasl/copy_to_assets/big-dasl-stacked.png" style="width: 80%; padding-left: 34px; padding-top: 8px;"</a>
        <p style="text-align:center; font-size: 12px;"> <a href="https://github.com/rstudio4edu/rstudio4edu-book/"> Style adapted from: rstudio4edu-book </a> <a href ="https://creativecommons.org/licenses/by/2.0/"> (CC-BY 2.0) </a></p>
-       <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span>  <a href="https://forms.gle/AK12iVXTjsB7yCUUA"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>
-    
\ No newline at end of file
+       <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span><a href="https://docs.google.com/forms/d/e/1FAIpQLScrDVb_utm55pmb_SHx-RgELTEbCCWdLea0T3IzS0Oj00GE4w/viewform?usp=pp_url&entry.1565230805=your+course"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>
+       
+# Note: Do not edit the feedback link in this file. This is automatically edited through the render-preview and render-bookdown workflows.
\ No newline at end of file
diff --git a/style-sets/GDSCN_JHU/_output.yml b/style-sets/GDSCN_JHU/_output.yml
index cb0d27f..2bbb202 100644
--- a/style-sets/GDSCN_JHU/_output.yml
+++ b/style-sets/GDSCN_JHU/_output.yml
@@ -15,5 +15,6 @@ bookdown::gitbook:
        <p style="text-align:center;"> <a href="http://jhudatascience.org/"> The Johns Hopkins Data Science Lab </a></p>
        <a href="http://jhudatascience.org/"><img src="https://jhudatascience.org/images/dasl.png" style=" width: 80%; padding-left: 40px; padding-top: 8px; vertical-align: top "</a>
        <p style="text-align:center; font-size: 12px;"> <a href="https://github.com/rstudio4edu/rstudio4edu-book/"> Style adapted from: rstudio4edu-book </a> <a href ="https://creativecommons.org/licenses/by/2.0/"> (CC-BY 2.0) </a></p>
-       <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span>  <a href="https://forms.gle/AK12iVXTjsB7yCUUA"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>
-    
\ No newline at end of file
+       <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span><a href="https://docs.google.com/forms/d/e/1FAIpQLScrDVb_utm55pmb_SHx-RgELTEbCCWdLea0T3IzS0Oj00GE4w/viewform?usp=pp_url&entry.1565230805=your+course"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>
+       
+# Note: Do not edit the feedback link in this file. This is automatically edited through the render-preview and render-bookdown workflows.
\ No newline at end of file
diff --git a/style-sets/fhdasl/_output.yml b/style-sets/fhdasl/_output.yml
index d00716f..0a86496 100644
--- a/style-sets/fhdasl/_output.yml
+++ b/style-sets/fhdasl/_output.yml
@@ -11,7 +11,8 @@ bookdown::gitbook:
       before: |
        <a href="https://hutchdatascience.org/" target="_blank"><img src="assets/big-dasl-stacked.png" style="width: 80%; padding-left: 34px; padding-top: 8px;"</a>
       after: |
-       <p style="text-align:center;"> <a href="https://github.com/jhudsl/OTTR_Template" target="blank" > This content was published with</a> <a href="https://bookdown.org/" target="blank"> bookdown by: </a> </p>
+       <p style="text-align:center;"> <a href="https://www.ottrproject.org/" target="blank" > This content was published with</a> <a href="https://bookdown.org/" target="blank"> bookdown using</a> </p>
+       <p style="text-align:center;"> <a href="https://github.com/jhudsl/OTTR_Template"> The OTTR Template by:</a></p>
        <p style="text-align:center;"> <a href="https://hutchdatascience.org/"> The Fred Hutch Data Science Lab </a></p>
        <p style="text-align:center; font-size: 12px;"> <a href="https://github.com/rstudio4edu/rstudio4edu-book/"> Style adapted from: rstudio4edu-book </a> <a href ="https://creativecommons.org/licenses/by/2.0/"> (CC-BY 2.0) </a></p>
        <p style="padding-left: 40px;"><div class="trapezoid" style = "padding-left: 40px;"><span>  <a href="https://forms.gle/W6Mg4rzuMK6Yk3Am8"> Click here to provide feedback</a> <img src="assets/itcr_arrow.png" style=" width: 10%" ></span></div></p>